Questions tagged «amazon-cloudformation»

Amazon Web Services CloudFormation是基于JSON或YAML的模板系统,可用于创建和管理相关AWS资源的集合,以有序和可预测的方式配置和更新它们。您可以将其视为“基础结构即代码”。

3
如何重用CloudFormation中的现有资源?
我的CloudFormation模板中有S3存储桶作为资源。随着DeletionPolicy集来Retain。这按预期工作,删除堆栈时,确实确实保留了存储桶。但是,当我尝试再次创建堆栈时,尝试再次创建相同存储桶时,创建失败,并出现错误消息,提示该存储桶已存在。 我需要添加什么到CloudFormation模板以使其不尝试重新创建已经存在的资源? 我的模板的相关片段如下: "Resources": { "SomeS3Bucket" : { "Type" : "AWS::S3::Bucket", "DeletionPolicy" : "Retain", "Properties": { "BucketName": "SomeS3Bucket" } }

1
在现有的S3存储桶中使用CloudFormation
我想使用CloudFormation 在现有存储桶上的AWS :: S3 :: Bucket中设置一些属性。换句话说,我不想创建存储桶,我只想强制执行某些设置。这是我的cloudformation JSON的示例: "websitePreviewBucket": { "Type": "AWS::S3::Bucket", "Properties": { "AccessControl": "PublicRead", "VersioningConfiguration": { "Status": "Suspended" }, "BucketName": "preview.website.com", "WebsiteConfiguration": { "IndexDocument": "index.html", "ErrorDocument": "error.html" } } }, 毫不奇怪,这在cloudformation控制台中失败了: The following resource(s) failed to create: [websitePreviewBucket]. preview.website.com already exists 我创建了存储区Preview.website.com。我的意思是,此帐户“拥有”该存储桶。如何设置之类的东西AccessControl,并WebsiteConfiguration与CloudFormation现有的桶? 我看过另一个问题,询问类似的问题,但没有合适的答案。


5
AWS CloudFormation-模板中的自定义变量
有什么方法可以为从CloudFormation模板参数派生的常用值定义快捷方式吗? 例如-我有一个脚本,该脚本使用ELB名称创建一个多可用区项目堆栈,project并在ELB后面的两个实例称为project-1和project-2。我只将ELBHostName参数传递给模板,以后再使用它来构造: "Fn::Join": [ ".", [ { "Fn::Join": [ "", [ { "Ref": "ELBHostName" }, "-1" ] ] }, { "Ref": "EnvironmentVersioned" }, { "Ref": "HostedZone" } ] ] 在整个模板中,多次重复这种构造或非常类似的操作-创建EC2主机名,Route53记录等。 我不想一遍又一遍地重复该操作,我想将其输出分配Fn::Join给某种变量,并且仅引用该变量,就像我可以使用"Ref":statement一样。 理想情况是: Var::HostNameFull = "Fn::Join": [ ... ] ... { "Name": { "Ref": "Var::HostNameFull" } } 或类似的简单内容。 Amazon CloudFormation有可能吗?

3
是否可以在Amazon cloudformation中强制重新创建EC2 :: Instance或RDS :: DBInstance?
是否有可能使用cloudformation堆栈来强制重新创建EC2或RDS实例? 我的堆栈陷入了这样的境地:只需销毁和创建资源即可解决该问题,而不是必须删除整个堆栈才能继续工作。 编辑: 这个问题打了我两次。首先,我创建了具有一些默认值的AWS :: RDS :: Instance,然后尝试将其降级为“ EngineVersion”:“ 5.5”。更改它可能会发生一些中断,但是mysql实例不能从5.6降级到5.5,因此堆栈处于UPDATE_FAILED状态,并且我不能在没有麻烦的情况下重新创建RDS。 另一个情况是我有多个“ AWS :: EC2 :: Instance”,显然,如果Y更改了下载的脚本,则必须从其“ UserData”下载并执行脚本,我必须重写该实例,并且没有办法。我再次使用相同的技巧来重新创建计算机。 讨厌的把戏: 我没有使用一台机器的自动缩放组,而是解决了在属性中更改可用区的两个问题...但是让我觉得很不好

2
AWS CloudFormation:VPC默认安全组
我有一个cfn堆栈(除其他外),创建一个VPC,几个安全组和一些EC2实例。将在堆栈内创建的安全组分配给同样由堆栈创建的实例很简单。但是,我对默认的VPC SG感兴趣。 创建VPC后(无论是通过GUI手动,通过cloudformation还是其他方式手动创建),AWS都会为该组中的任何实例创建一个默认的安全组,并使用“允许所有”规则。 我想做的就是将此默认安全组以及其他几个SG分配给由堆栈创建的实例。事实证明,这比我预期的要困难得多。以下是一些片段,显示了我的情况: "AllowSSHSecGroup":{ "Type":"AWS::EC2::SecurityGroup", "Properties":{ "GroupDescription":"Allow SSH from anywhere", "VpcId":{ "Ref":"DevVPC" }, "SecurityGroupIngress":[ { "IpProtocol":"tcp", "FromPort":"22", "ToPort":"22", "CidrIp":"0.0.0.0/0" } ] } }, "Instance001" : { "Type" : "AWS::EC2::Instance", "Properties" : { "ImageId" : "ami-7eab224e", "InstanceType" : "m1.large", "AvailabilityZone" : "us-west-2a", "PrivateIpAddress" : "10.22.0.110", "SecurityGroupIds" : [ {"Ref" : …

4
在cloudformation中可以创建可重用的字符串吗?
我有一个字符串,它是由许多变量组成的,这些变量用于许多不同的事物,例如标签和主机名。 有没有一种方法可以创建一个可重复使用的字符串,我可以引用该模板? 任何对此的想法将不胜感激。编辑:一个示例将传递两个参数,例如ProjectName和Environment来加入它们 "Fn::Join" : [ "-", [ {"Ref":"ProjectName"}, {"Ref":"Environment"} ] ] 并在多个地方使用结果

4
为什么aws云形成未安装我指定的软件包?
我对AWS服务非常陌生。我正在尝试使用AWS云形式,并创建了一个模板。该模板没有错误,我能够使用该模板创建计算机。 但是我在模板中添加了一些配置,以便在启动过程中安装tomcat,git和其他东西。但这对我来说不会发生。 这是我用于安装tomcat的一部分代码: "Resources": { "Tomcat": { "Type": "AWS::EC2::Instance", "Metadata": { "AWS::CloudFormation::Init": { "config": { "packages": { "apt": { "tomcat6": [], "git": [], } } } } }, 但是,当我登录计算机时,既tomcat没有git安装也没有安装! 提前致谢。

4
尝试创建AWS :: Route53 :: RecordSet时,AWS CloudFormation返回“无效请求”
我对此不知所措。 99%的时间CloudFormation很好地为您提供了可以使用的调试消息,但是“无效请求”使我感到困惑,尤其是在资源非常简单的情况下。 据说这是给我一些问题的资源(由Ansible生成的模板,因此是{{...}}符号), "DatabaseDNSRecord": { "Type": "AWS::Route53::RecordSet", "Properties": { "HostedZoneId": "HOSTED_ZONE_ID", "Name": "db.{{ item.env_name|lower }}v2.<DOMAIN>.com.", "ResourceRecords": [ { "Fn::GetAtt": [ "Database", "Endpoint.Address" ] } ], "Type": "CNAME" }, "DependsOn": "Database" } 从我从文档中可以看出,所需的所有内容都正确无误且以正确的格式显示。 我唯一能想到的就是将这个资源添加到我先前创建的现有 CloudFormation堆栈中,该堆栈已经创建了该Database资源,根据记录,这是一个AWS::RDS::DBInstance(很高兴也可以为此发布资源模板,没什么特别的) 。 为什么我收到“无效请求”的任何想法? 谢谢。 编辑:我尝试了此操作,并且没有TTL,出现同样的错误。

1
如何设置Route 53指向Api网关
我正在编写一个Cloudformation配置文件以一次性创建一个网站。这包括创建lambda函数,创建API网关,设置S3存储桶,创建Route 53区域和记录。 至今: 创建Lambda函数及其角色(有效) 创建API网关,它的部署及其角色(有效) 创建一个S3存储桶及其策略(有效) 创建站点的Route 53区域和DNS记录(有效) 为API网关创建一个域(不知道我在做什么) 因此,domain.com可以毫无问题地提供S3存储桶中的文件。将AWS URI用于API网关可以正常工作https://trydsoonjc.execute-api.us-west-2.amazonaws.com/app/path/here。 我要设置的是api.domain.com指向API网关以访问服务器的API。 如何将Route 53连接到API Gateway? 我现在的Cloudformation是这样的: { "AWSTemplateFormatVersion": "2010-09-09", "Description" : "Website", "Parameters": { "DomainName": { "Type" : "String", "Description" : "The DNS name of an Amazon Route 53 hosted zone e.g. server.com", "AllowedPattern" : "(?!-)[a-zA-Z0-9-.]{1,63}(?<!-)", "ConstraintDescription" : "must be …

3
AWS Cloudformation和手动更改
我似乎找不到任何有关手动将Cloudformation的对象弄乱时会发生什么的文档。 我看到它标记了它的对象,但是如果有人删除路由规则,它可以恢复吗? 编辑:刚得到两个矛盾的答案。我想索取一些文档/证据,因为我必须决定我为同事提供有关修改这些资源的指示。

2
AWS CloudFormation中的条件属性
我们有一个用于创建一些EC2实例的AWS CloudFormation模板。但是其中一些需要具体说明PrivateIpAddress,我正在努力弄清楚如何将其合并到模板中。 现在,我有了一个模板参数PrivateIP和一个Condition条件RequestedPrivateIP。到现在为止还挺好。但是我不知道如何将其合并到AWS::EC2::Instance资源规范中。我尝试了这个: "PrivateIpAddress": { "Fn::If": [ "RequestedPrivateIP", { "Ref": "PrivateIP" }, "" <-- This doesn't work ] }, 但是,当失败RequestedPrivateIP是假的 CREATE_FAILED AWS::EC2::Instance NodeInstance Invalid addresses: [] 有什么想法可以选择分配静态私有IP,如果未指定,则将其留给AWS来设置动态私有IP?

4
我可以使用Cloudformation创建一个引用现有策略的新角色吗?
目前,我有一个共享的S3存储桶,可以对不同实例的特定键路径(即文件夹)进行特定访问。我已经能够使用新角色创建实例配置文件,并且测试没有限制访问该文件夹的问题。 我的问题是,存在一个具有已定义策略的通用角色,我也希望能够在每个堆栈的新角色中包括这些角色。 在cloudformation中,是否可以将在一个角色中定义的策略包括在另一个角色中,而不必在新角色中重新定义策略文档? 类似于以下内容: "AppTierS3AccessRole": { "Type": "AWS::IAM::Role", "Properties": { "AssumeRolePolicyDocument": { "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "ec2.amazonaws.com" ] }, "Action": [ "sts:AssumeRole" ] } ] }, "Path": "/", "Policies": [ { "Ref": "existing-policy" } ] } }, “现有政策”是这里的重要组成部分。我试图找到现有政策的秘诀,以尝试和参考它,但是我有点卡住了。

1
启动实例时,AWS CloudFormation是否可以创建供以后使用的KeyPair?
我想使用作为CloudFormation的一部分创建的密钥对来启动堆栈。 那可能吗? .... "Resources": { "ReverseProxyKeyPair": { "Type": "AWS::EC2::KeyPair", "Properties": { "KeyName": "reverse_proxy" } }, .... 是一个猜测,但没有奏效。我还没有找到CloudFormation的架构来说这是不可能的。 大多数示例都假定已经创建了一个KeyPair-我认为是因为在创建时只有一次下载它的机会。但我想动态创建一个,然后将其用作输出并转储到S3中(例如)。 或者,这是一个愚蠢的主意吗?

1
无法通过SSH进入AWS CloudFormation堆栈实例
我现在设置了一个可伸缩的负载平衡器,此模板通常遵循以下步骤: https://github.com/satterly/AWSCloudFormation-samples/blob/master/LAMP_Multi_AZ.template 将AWS::AutoScaling::AutoScalingGroup.CreationPolicy.ResourceSignal.Count密钥调整为0(基本上允许在没有收到成功信号的情况下加载堆栈)之后,我就能够加载堆栈,并且可以看到所有可用资源。 我可以看到正在创建的密钥的公共DNS,但是无法通过SSH进入实例。 我在实例规则中对所有人开放了SSH访问权限,可以在AWS控制台中确认这一点。 我还根据官方AWS文档中的建议为我的VPC配置了一条路由:https : //aws.amazon.com/premiumsupport/knowledge-center/ec2-linux-ssh-troubleshooting/ 我可以看到实例存在,但是似乎我在某些地方限制了自己的访问。但是,在AWS EC2控制台中,设置看起来与我可以SSH进入实例的外观相同。 这是我使用的JSON模板,您可以在其中查看所有设置,包括我的VPC,子网,安全组等:https : //gist.github.com/dambrogia/e4cd93a64ae6f3a79d4a58d466f144f8 我从以下命令收到超时错误:(我的id_rsa密钥在ec2中有效) ssh -i ~/.ssh/id_rsa ec2-user@<ec2_instance> 如何通过SSH进入实例?先谢谢您的帮助!

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.