标签: amazon-cloudformation

使用 Autoscale 在 CloudFormation 中引导

我的 CloudFormation 模板创建了一个自动缩放组并使用实用程序脚本 /opt/aws/bin/cfn-init 对其进行引导。当我从模板中删除引导程序部分时,自动缩放创建没有任何问题,但我添加它 CloudFormation 堆栈失败并在 /var/log/cloud-init.log 中添加行:

Error: AutoScalingGroupName does not specify any metadata
Run Code Online (Sandbox Code Playgroud)

上面的行紧跟在以下命令之后:

/opt/aws/bin/cfn-init --verbose --configsets orderedConfig --region us-east-1 --stack AS15 --resource AutoScalingGroupName --access-key XXXXXXXXXXXXX --secret-key XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Run Code Online (Sandbox Code Playgroud)

深入挖掘一点,在 cfn-init 中,我在退出点添加了以下几行:

from pprint import pprint
pprint(vars(detail))
Run Code Online (Sandbox Code Playgroud)

在运行之前的 cfn-init 命令时,我得到以下跟踪:

{'_description': None,
 '_lastUpdated': datetime.datetime(2012, 7, 12, 14, 52, 42),
 '_logicalResourceId': u'AutoScalingGroupName',
 '_metadata': None,
 '_physicalResourceId': u'AS15-AutoScalingGroupName-HNPOXXXXXXXX',
 '_resourceStatus': u'CREATE_COMPLETE',
 '_resourceStatusReason': None,
 '_resourceType': u'AWS::AutoScaling::AutoScalingGroup',
 '_stackId': u'arn:aws:cloudformation:us-east-1:XXXXXXXXXXXXX:stack/AS15/XXXXXXXX-cc30-11e1-XXXXXX-XXXXXXXXXX',
 '_stackName': u'AS15'}
Run Code Online (Sandbox Code Playgroud)

如您所见,元数据字段为空,这就是它无法创建堆栈的原因。与 autoscale 一起使用时, cfn-init 是否有任何已知的副作用?

amazon-web-services autoscaling amazon-cloudformation

3
推荐指数
1
解决办法
1472
查看次数

以 Cloudformation 临时(实例)存储为例

我正在尝试使用 CloudFormation 启动一个 EC2 实例,该实例使用临时/实例存储而不是 EBS。

我已经使用 Opsworks 进行了管理 - 因此在 EC2 管理窗口中,“根设备”不是 ebs。我还没有弄清楚如何使用 CloudFormation 模板来做到这一点。

我有一种感觉,它与 BlockDeviceMappings 有关,但还没有弄清楚。我在这里找到了与我想做的最接近的讨论:https : //forums.aws.amazon.com/message.jspa?messageID=243921

有人可以提供 CloudFormation 模板片段来启动基于临时存储的实例吗?

文档的其他部分似乎有用:

amazon-ec2 amazon-cloudformation

2
推荐指数
1
解决办法
3581
查看次数

使用具有特定子网的 Cloud Formation 配置的安全组

概括

我正在尝试创建一个 AWS CloudFormation 模板,其中包含我要为其选择特定子网的实例。如果我指定子网 ID,则会出现以下错误The parameter groupName cannot be used with the parameter subnet。从阅读此线程看来,我需要提供安全组 ID - 而不是名称。如何在 CloudFormation 中创建安全组,然后在事后获取其 ID?

细节

实例配置的相关部分如下

"WebServerHost": {
  "Type" : "AWS::EC2::Instance",
 <..skipping metadata...>
 "Properties": {
    "ImageId" : { "ami-1234" },
    "InstanceType" : { "Ref" : "WebServerInstanceType" },
    "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],
    "SubnetId"       : "subnet-abcdef123",
Run Code Online (Sandbox Code Playgroud)

安全组如下所示

"WebServerSecurityGroup" : {
  "Type" : "AWS::EC2::SecurityGroup",
  "Properties" : {
    "GroupDescription" : "Enable HTTP and SSH",
    "SecurityGroupIngress" : [
      {"IpProtocol" : "tcp", …
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-cloudformation

2
推荐指数
1
解决办法
6989
查看次数

AWS CloudFormation 模板和 bash init 脚本

到目前为止,我一直在手动启动 EC2 实例,复制下载我的厨师 + 厨师工件的 bash 脚本,并调用chef-solo 来配置实例。

该公司的一位前 AWS 工程师曾创建过 CF 模板;我几乎不知道如何使用。

有没有办法将我的 bash 脚本集成到 CF 模板中,以便在 CF EC2 实例启动时调用我的 bash 脚本并且实例是auto-provisioned

amazon-web-services chef-solo amazon-cloudformation

2
推荐指数
1
解决办法
7843
查看次数

使用 AWS CloudFormation 与 TracingConfig 在 Lambda 中配置 X-Ray

我们有一个使用 CloudFormation 配置的 AWS Lambda(更广泛的 AWS 堆栈的一部分)。要求我们在此 Lambda 上实施/配置X-Ray。公司政策禁止我们(按角色/按帐户)访问 AWS 控制台,这也是我们使用 CloudFormation 定义 AWS 堆栈的部分原因;但这意味着我们无法通过 AWS 控制台启用 X-Ray(通常是这样做的方法)。

遗憾的是,我们尚未找到有关将 X-Ray 与 CloudFormation 结合使用的文档。回顾CloudFormation 发布历史记录,我们发现 X-Ray 实际上并未列出。CloudFormation 似乎不支持以这种方式使用 X-Ray 配置 Lambda。

我们还发现了名为TracingConfig的东西,它可以通过 CloudFormation 启用。然而,关于它的作用,或者输出是什么样子/它去哪里的文档并不多。我们发现的与此相关的充满希望的信息是关于两者的文档TracingConfig,并X-Ray在传递中提到了他们所谓的“主动跟踪”。

因此,我的问题最终是,我们可以从中获得多少信息TracingConfig,以及如果我们能够使用它,我们能与本来可以提供的信息有多接近X-Ray

或者

是否有在 CloudFormation 中启用 X-Ray 的未记录方法?

amazon-web-services amazon-cloudformation amazon-lambda

2
推荐指数
1
解决办法
3228
查看次数

在 cloudformation 中为 ec2 实例指定根卷大小

继承了亚马逊托管的基础设施,包括一个负载均衡器、一个数据库服务器和一个自动缩放组内的几个网络服务器;由 CloudFormation 协调部署。

问题是,旋转的网络服务器有一个微不足道的根卷 (8gb),有时在网络服务器生命周期内,磁盘被日志和临时文件填满,一些服务停止工作。

我找到了声明机器定义的部分(我认为):

...
"Properties": {
            "ImageId": {
                "Fn::FindInMap": [
                    "AWSRegionArch2AMI",
                    {
                        "Ref": "AWS::Region"
                    },
                    {
                        "Fn::FindInMap": [
                            "AWSInstanceType2Arch",
                            {
                                "Ref": "InstanceType"
                            },
                            "Arch"
                        ]
                    }
                ]
            },
            "InstanceType": {
                "Ref": "InstanceType"
            },
            "SecurityGroups": [
                {
                    "Ref": "WebServerSecurityGroup"
                }
            ],
            "KeyName": {
                "Ref": "KeyName"
            },
            "UserData": {
                "Fn::Base64": {
                    "Fn::Join": [
...
Run Code Online (Sandbox Code Playgroud)

实例类型最终在其他地方定义:

"InstanceType": {
  "Description": "WebServer EC2 instance type",
  "Type": "String",
  "Default": "c4.xlarge",
  "AllowedValues": [
    "t1.micro",
    "t2.nano",
     # ... more allowed values
    "cg1.4xlarge"
  ],
  "ConstraintDescription": "must …
Run Code Online (Sandbox Code Playgroud)

amazon-web-services amazon-cloudformation

2
推荐指数
1
解决办法
1万
查看次数

如何在 Cloudformation 中创建私有 IP 的 route53 记录

我在 AWS 中有一个 cloudformation 脚本,它创建了一个 EC2 实例,有一些防火墙规则、S3 映射和其他东西。我在 route53 中为实例的公共 ip 创建了一个 DNS 记录,这很好用。

现在我需要在主机的内部 ip 的 DNS 中创建另一条记录(供内部使用,以便其他实例无需通过公共 ip 即可与此实例通信)。

我还没有找到一种方法来做到这一点。是否可以?有没有人有一个示例 cloudformation 脚本?

domain-name-system amazon-web-services amazon-route53 amazon-cloudformation

2
推荐指数
1
解决办法
2507
查看次数

如何更改RDS KMS密钥而不丢失数据?

我们有一个托管在 AWS RDS 上的 PostgreSQL 数据库。当使用cloudformation创建它时,我将其设置为加密,但没有设置加密密钥。因此,它被设置为使用默认加密密钥。

此后我被告知,有一个公司标准,所有 RDS 实例都应该有自己的密钥。

我已经使用 cloudformation 创建了新密钥并将其与 RDS 实例关联,但是当我部署此模板时,它想要删除并重新创建数据库。

我不太熟悉这一切是如何工作的,并且我正在寻找一个不会导致我们丢失数据的程序。如果需要的话,一点停机时间不会对我们造成伤害。

amazon-web-services amazon-rds amazon-cloudformation amazon-kms

2
推荐指数
1
解决办法
4382
查看次数

云形成 - 更新 elb 后面的堆栈不会更新 AMI

我们正在使用云形成为我们的 AWS EC2 实例提供支持。我们有 3 个不同的堆栈 - 测试、暂存和生产。我们更新任何堆栈的图像的工作流程如下:

  1. 更新“黄金大师”实例
  2. 将 Golden Master 快照到磁盘映像
  3. 为给定的堆栈和update堆栈更改我们的 cloud-formation 配置中的 ami 引用(通过 json 文件)。

这会关闭堆栈中的实例 + 使用新磁盘映像重新配置它们。

我们的测试或暂存堆栈没有问题,每个堆栈都包含一个 ec2 实例。每次我们更新,图像被替换没有问题。

我们的生产堆栈似乎并没有以相同的方式工作 :-(。它包含(至少)2 个位于负载均衡器后面的实例。当我们以相同的方式更新此堆栈时,ec2 实例不会立即刷新(即更新完成后,这些盒子仍然从以前的磁盘映像运行)。好消息是当负载平衡器自动缩放时会使用新的映像。

负载均衡规则和云形成之间会不会有冲突?

任何见解将不胜感激

例子:

测试栈:https : //gist.github.com/robsquires/629fb6da2d10869363e5

生产堆栈:https : //gist.github.com/robsquires/79de54eeb04d620d5222

amazon-ec2 amazon-web-services amazon-elb amazon-cloudformation

1
推荐指数
1
解决办法
1956
查看次数

使用 LaunchConfig 时如何在 CloudFormation 模板中获取实例的公共 IP

我有一个带有LaunchConfig. 在UserData我需要引用正在创建的实例的公共 IP。我想使用Fn::GetAtt,但它需要逻辑名称,我不确定在使用时如何定义它LaunchConfig

"LaunchConfig": {
  "Type" : "AWS::AutoScaling::LaunchConfiguration",
  "Metadata" : {"..."},
  "Properties": {
    "ImageId" : "...",
    "InstanceType" : { "Ref" : "InstanceType" },
    "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ],
    "KeyName" : { "Ref" : "KeyName" },
    "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [
      "..."
    ]]}}
  }
},
Run Code Online (Sandbox Code Playgroud)

amazon-ec2 amazon-cloudformation

1
推荐指数
1
解决办法
4424
查看次数

CloudFormation 堆栈 yaml 语法?

我正在尝试创建一个 SecurityGroup,它的标签类似于Name: SG-StackName. 此代码在 json 中完美运行:

"Resources": {
    "SecurityGroup": {
        "Type": "AWS::EC2::SecurityGroup",
        "Properties": {
            ...
            "Tags": [{
                    "Key": "Name",
                    "Value": {
                        "Fn::Join" : [ "", [
                            "SG-",
                            {   "Ref" : "AWS::StackName"    }
                        ]]
                    }
                }
            ]
        }
    },
Run Code Online (Sandbox Code Playgroud)

现在我正在尝试将其转换为 yaml:

Resources: 
  SecurityGroup: 
    Type: AWS::EC2::SecurityGroup
    Properties: 
      ...
      Tags: 
        - Key: Name
        - Value: !Join
          - ''
          - - 'SG-'
            - Ref: AWS::StackName
Run Code Online (Sandbox Code Playgroud)

堆栈构建失败并显示错误“在标签属性中找不到密钥”。模板中的错误在哪里?

syntax amazon-web-services amazon-cloudformation yaml

1
推荐指数
1
解决办法
2319
查看次数

CloudFormation 模板:如何在短格式中同时使用 Sub 和 GetAtt?

我正在使用 yaml。所以,我们可以使用:

!GetAtt [ WebServer, AvailabilityZone ]
!GetAtt WebServer.AvailabilityZone
Run Code Online (Sandbox Code Playgroud)

此外,我们可以使用:

!Sub 'sometext-${AWS::StackName}'
Run Code Online (Sandbox Code Playgroud)

如何使用 GetAtt 输出而不是${AWS::StackName},最好使用 的第二种形式GetAtt?我知道如何使用,Join但我想继续使用Sub.

amazon-web-services amazon-cloudformation yaml

1
推荐指数
1
解决办法
2352
查看次数

如何分配使用 AWS Cloudformation 动态生成的私有 IP?

我有一个 AWS Cloudformation,我希望在同一 VPC 下的私有子网上有两个 EC2 实例 A 和 B。
在应用中,我需要A访问B,
如何配置B动态分配的私有IP给A?

我相信我可以使用环境变量(例如,使用aws:elasticbeanstalk:application:environment)配置 A。
问题是我不知道如何获取 B 的 IP。我认为它不能是弹性 IP,因为它是私有的,因此它可能会在部署之间更改。

amazon-ec2 amazon-web-services amazon-cloudformation amazon-vpc elastic-beanstalk

1
推荐指数
1
解决办法
280
查看次数