cfn-init
在 CloudFormation 模板中,您可以在 Amazon EC2 资源的 Metadata
部分中使用 AWS::CloudFormation::Init
来定义初始化任务。有关更多信息,请参阅《AWS CloudFormation 用户指南》中的 AWS::CloudFormation::Init。
cfn-init
帮助程序脚本会读取来自 AWS::CloudFormation::Init
键的模板元数据并进行相应操作:
-
提取和解析来自 CloudFormation 的元数据
-
安装软件包
-
将文件写入磁盘
-
启用/禁用以及启动/停止服务
cfn-init
帮助程序脚本通常通过 Amazon EC2 实例或启动模板的用户数据运行。
注意
如果您使用 cfn-init
来更新现有文件,则它将在同一目录下为原始文件创建一个扩展名为 .bak 的备份副本。例如,如果更新 /
,则操作生成两个文件:path
/to
/file_name
/
包含原始文件的内容,而 path
/to
/file_name
.bak/
包含更新的内容。path
/to
/file_name
语法
cfn-init --stack|-s
stack.name.or.id
\ --resource|-rlogical.resource.id
\ --regionregion
\ --access-keyaccess.key
\ --secret-keysecret.key
\ --rolerolename
\ --credential-file|-fcredential.file
\ --configsets|-cconfig.sets
\ --url|-uservice.url
\ --http-proxyHTTP.proxy
\ --https-proxyHTTPS.proxy
\ --verbose|-v
注意
cfn-init
不需要凭证,因此您不需要使用 --access-key
、--secret-key
、--role
或 --credential-file
选项。但是,如果不指定证书,则 CloudFormation 会检查堆栈成员并将调用范围限制为实例所属的堆栈。有关更多信息,请参阅 帮助程序脚本的权限。
选项
名称 | 描述 | 必填 |
---|---|---|
|
堆栈名称或堆栈 ID。 类型:字符串 默认值:无 示例: |
是 |
|
包含元数据的资源的逻辑资源 ID。 类型:字符串 示例: |
是 |
|
要使用的 CloudFormation 区域端点。 类型:字符串 默认值: 示例: |
否 |
|
针对有权在 CloudFormation 上调用 类型:字符串 |
否 |
|
对应于指定的 AWS 访问密钥的 AWS 秘密访问密钥。 类型:字符串 |
否 |
|
与实例关联的 IAM 角色的名称。 类型:字符串 条件:凭证文件参数替代该参数。 |
否 |
|
同时包含秘密访问密钥和访问密钥的文件。凭证文件参数取代 --role、--access-key 和 --secret-key 参数。 类型:字符串 |
否 |
|
待运行逗号分隔 configsets 列表 (按顺序)。 类型:字符串 默认值: |
否 |
|
要使用的 CloudFormation 端点。 类型:字符串 |
否 |
|
HTTP 代理 (非 SSL)。采用以下格式: 类型:字符串 |
否 |
|
HTTPS 代理。采用以下格式: 类型:字符串 |
否 |
|
详细的输出。这对于调试 注意您应该打开 |
否 |
|
显示帮助消息并退出。 |
否 |
示例
Amazon Linux 示例
以下示例显示 EC2 实例的 UserData
属性,该实例运行与 WebServerInstance
资源关联的 InstallAndRun
配置集。
要包含最新版本,请将 yum install -y aws-cfn-bootstrap
添加到 UserData
。
JSON
UserData
属性使用 Fn::Join
内置函数。
{ "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -xe\n", "", "yum install -y aws-cfn-bootstrap", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource WebServerInstance ", " --configsets InstallAndRun ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } } }
YAML
UserData
属性使用 Fn::Join
内部函数。
UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -xe - '' - yum install -y aws-cfn-bootstrap - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource WebServerInstance ' - ' --configsets InstallAndRun ' - ' --region ' - !Ref 'AWS::Region' - |+
JSON
UserData
属性使用 Fn::Sub
内置函数。
{ "UserData": { "Fn::Base64": { "Fn::Sub": [ "#!/bin/bash -x\n# Install the files and packages from the metadata\n/opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}\n\n# Signal the status from cfn-init\n/opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}\n", {} ] } } }
YAML
UserData
属性使用 Fn::Sub
内部函数。
UserData: !Base64 'Fn::Sub': - > #!/bin/bash -x # Install the files and packages from the metadata /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region} # Signal the status from cfn-init /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region} - {}
相关资源
您也可以访问我们的 GitHub 存储库下载使用 cfn-init
的示例模板,包括以下模板。
对于 Windows 模板,请参阅《AWS CloudFormation 用户指南》中的使用 Microsoft Windows 堆栈模板。