cfn-init用于cloudformation启动模板

时间:2019-02-14 13:15:38

标签: amazon-web-services amazon-ec2 amazon-cloudformation amazon-ecs

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

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

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]]

2 个答案:

答案 0 :(得分:2)

我将元数据放在错误的嵌套级别,应该与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

答案 1 :(得分:0)

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