cfn-init 用于 cloudformation 启动模板

Posted

技术标签:

【中文标题】cfn-init 用于 cloudformation 启动模板【英文标题】:cfn-init for cloudformation launchtemplate 【发布时间】:2019-07-08 12:49:36 【问题描述】:

如何在 LaunchTemplate 中使用 cfn-init?这适用于 ECS 集群的自动扩展组中的 EC2 实例。

实例的Metadata 部分在哪里以及传递给cnf-init 的--resource 是什么?

LaunchTemplate:
  Type: AWS::EC2::LaunchTemplate
  Properties:
    LaunchTemplateName: !Sub $AWS::StackName-launch-template
    LaunchTemplateData: 
      SecurityGroups: 
        - !Ref DMZSecurityGroup
        - !Ref ECSSecurityGroup
      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            yum update -y aws-cfn-bootstrap
            /opt/aws/bin/cfn-init -v --stack $AWS::StackName --resource ??? --region $AWS::Region
            yum -y update

我对元数据的最佳猜测产生了错误:

    Property validation failure: [Encountered unsupported properties in /LaunchTemplateData: [Metadata]]

【问题讨论】:

【参考方案1】:

我的元数据位于错误的嵌套级别,它应该与Type:Properties: 一起位于最顶层,而不是在Properties:LaunchTemplateData: 之下。

LaunchTemplate:
  Type: AWS::EC2::LaunchTemplate
  Metadata: 
    AWS::CloudFormation::Init: 
      config:
        files:
          /var/www/html/index2.html:
            content: TestString
  Properties:
    LaunchTemplateData: 
      SecurityGroupIds: 
        - !GetAtt DMZSecurityGroup.GroupId
        - !GetAtt ECSSecurityGroup.GroupId
      UserData:
        Fn::Base64:
          !Sub |
            #!/bin/bash -xe
            yum update -y aws-cfn-bootstrap
            /opt/aws/bin/cfn-init -v --stack $AWS::StackName --resource ECSLaunchTemplate --region $AWS::Region
            yum -y update

【讨论】:

这真的有效吗? --resource 与您的元数据所在的位置不匹配。除非您在 ECSLaunchTemplate 资源中有其他元数据。【参考方案2】:

cfn-init 仅应在您在 cloudformation 模板本身中为您的实例定义一些初始化步骤时使用。

cfn-init 脚本告诉 cloudformation 从模板定义(AWS::CloudFormation::Init 部分)读取您的配置步骤,并在实例上“执行”它们。

您还可以通过在用户数据部分传递一个 shell 脚本来引导您的实例。

在您的情况下,由于我看不到您的 YAML 文件中定义的任何引导配置步骤,因此无需在您的用户数据脚本中调用 cfn-init

更多关于cfn-init:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/cfn-init.html

更多关于AWS::CloudFormation::Init:https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-init.html

【讨论】:

以上是关于cfn-init 用于 cloudformation 启动模板的主要内容,如果未能解决你的问题,请参考以下文章

cfnbootstrap 文件夹在哪里?

如何使用 AWS CloudFormation 创建 Amazon VPC?

如何在 cloudformation 策略文档中引用资源 ARN? (yaml)

如何自动化 aws 托管 UI 的徽标

无法提取机密或注册表身份验证:拉命令失败::信号:已杀死

第一篇 用于测试使用