如何在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]]
答案 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