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 启动模板的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 AWS CloudFormation 创建 Amazon VPC?