cfn-init - Amazon CloudFormation
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

cfn-init

描述

cfn-init 帮助程序脚本读取来自 AWS::CloudFormation::Init 密钥的模板元数据并进行相应操作:

  • 提取和解析来自 CloudFormation 的元数据

  • 安装软件包

  • 将文件写入磁盘

  • 启用/禁用以及启动/停止服务

注意

如果您使用 cfn-init 来更新现有文件,则它将在同一目录下为原始文件创建一个扩展名为 .bak 的备份副本。例如,如果更新 /path/to/file_name,则操作生成两个文件:/path/to/file_name.bak 包含原始文件的内容,而 /path/to/file_name 包含更新的内容。

有关模板元数据的信息,请参阅 AWS::CloudFormation::Init

注意

cfn-init 不需要凭证,因此您不需要使用 --access-key--secret-key--role--credential-file 选项。但是,如果不指定证书,则 CloudFormation 会检查堆栈成员并将调用范围限制为实例所属的堆栈。

语法

cfn-init --stack|-s stack.name.or.id \ --resource|-r logical.resource.id \ --region region \ --access-key access.key \ --secret-key secret.key \ --role rolename \ --credential-file|-f credential.file \ --configsets|-c config.sets \ --url|-u service.url \ --http-proxy HTTP.proxy \ --https-proxy HTTPS.proxy \ --verbose|-v

Options

名称 描述 必填

-s, --stack

堆栈名称或堆栈 ID。

类型:字符串

默认值:无

示例--stack { "Ref" : "AWS::StackName" },

-r, --resource

包含元数据的资源的逻辑资源 ID。

类型:字符串

示例--resource WebServerHost

--region

要使用的 CloudFormation 区域端点。

类型:字符串

默认值us-east-1

示例--region ", { "Ref" : "AWS::Region" },

--access-key

针对有权在 CloudFormation 上调用 DescribeStackResource 的账户的 Amazon 访问密钥。凭证文件参数取代该参数。

类型:字符串

--secret-key

对应于指定的 Amazon 访问密钥的 Amazon 秘密访问密钥。

类型:字符串

--role

与实例关联的 IAM 角色的名称。

类型:字符串

条件:凭证文件参数替代该参数。

-f, --credential-file

同时包含秘密访问密钥和访问密钥的文件。凭证文件参数取代 --role、--access-key 和 --secret-key 参数。

类型:字符串

-c, --configsets

待运行逗号分隔 configsets 列表 (按顺序)。

类型:字符串

默认值default

-u, --url

要使用的 CloudFormation 端点。

类型:字符串

--http-proxy

HTTP 代理 (非 SSL)。采用以下格式:http://user:password@host:port

类型:字符串

--https-proxy

HTTPS 代理。采用以下格式:https://user:password@host:port

类型:字符串

-v, --verbose

详细的输出。这对于调试 cfn-init 无法初始化的案例非常有用。

注意

您应该打开 DisableRollback,以便调试初始化操作。您可以通过使用 CloudFormation 控制台,选择 Show Advanced Options(显示高级选项),将 Rollback on failure(失败时回滚)设置为 No(否)。然后,您可以通过 SSH 进入控制台并读取 /var/log/cfn-init.log 中的日志。

-h, --help

显示帮助消息并退出。

示例

Amazon Linux 示例

下面的代码段演示 EC2 实例的 UserData 属性,该实例运行与 WebServerInstance 资源关联的 InstallAndRun 配置集。

有关完整示例模板,请参阅 使用 Amazon CloudFormation 在 Amazon EC2 上部署应用程序

要包含最新版本,请将 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} - {}