cfn-signal
描述
cfn-signal 帮助程序脚本向 CloudFormation 发送信号来指示是否已成功创建或更新 Amazon EC2 实例。如果您在实例上安装和配置软件应用程序,则可在这些软件应用程序准备就绪时向 CloudFormation 发送信号。
您将 cfn-signal 脚本与 CreationPolicy 属性 结合使用或将自动扩缩组与 WaitOnResourceSignals 更新策略结合使用。当 CloudFormation 使用这些策略创建或更新资源时,它将暂停堆栈上的工作直至资源收到所需数量的信号或超出超时期限。对于 CloudFormation 接收的每个有效信号,CloudFormation 会将信号发送到堆栈事件以便您跟踪每个信号。有关使用创建策略和 cfn-signal 的演练,请参阅在 Amazon EC2 上部署应用程序。
注意
cfn-signal 不需要凭证,因此您不需要使用 --access-key
、--secret-key
、--role
或 --credential-file
选项。但是,如果不指定证书,则 CloudFormation 会检查堆栈成员并将调用范围限制为实例所属的堆栈。
用于发送资源信号的语法 (推荐)
如果您想向 CloudFormation 资源发送信号,请使用以下语法。
cfn-signal --success|-s
signal.to.send
\ --access-keyaccess.key
\ --credential-file|-fcredential.file
\ --exit-code|-eexit.code
\ --http-proxyHTTP.proxy
\ --https-proxyHTTPS.proxy
\ --id|-iunique.id
\ --regionAWS.region
\ --resourceresource.logical.ID
\ --roleIAM.role.name
\ --secret-keysecret.key
\ --stackstack.name.or.stack.ID
\ --urlAmazon CloudFormation.endpoint
用于等待条件句柄的语法
如果您想向等待条件句柄发送信号,请使用以下语法。
cfn-signal --success|-s
signal.to.send
\ --reason|-rresource.status.reason
\ --data|-ddata
\ --id|-iunique.id
\ --exit-code|-eexit.code
\waitconditionhandle.url
Options
您可使用的选项取决于您是向创建策略还是等待条件句柄发送信号。适用于创建策略的一些选项可能不适用于等待条件句柄。
名称 | 描述 | 必填 |
---|---|---|
|
针对有权调用 CloudFormation 类型:字符串 |
否 |
|
要通过 类型:字符串 默认值:空 |
否 |
|
进程中出现错误代码,用于确定成功或失败。如果已经指定,则忽略 类型:字符串 示例: |
否 |
|
同时包含秘密访问密钥和访问密钥的文件。凭证文件参数取代 --role、--access-key 和 --secret-key 参数。 类型:字符串 |
否 |
|
HTTP 代理 (非 SSL)。采用以下格式: 类型:字符串 |
否 |
|
HTTPS 代理。采用以下格式: 类型:字符串 |
否 |
|
要发送的唯一 ID。 类型:字符串 默认:Amazon EC2 实例的 ID。如果无法解析该 ID,则将返回计算机的完全限定域名(FQDN)。 |
否 |
|
如成功为错误信息,资源事件状态原因 (当前仅用于故障) 则将默认为“配置失败”。 类型:字符串 |
否 |
--region (仅适用于向资源发送信号) |
要使用的 CloudFormation 区域端点。 类型:字符串 默认值: |
否 |
--resource (仅适用于向资源发送信号) |
包含要向其发送信号的创建策略的资源的逻辑 ID。 类型:字符串 |
是 |
|
与实例关联的 IAM 角色的名称。 类型:字符串 条件:凭证文件参数替代该参数。 |
否 |
|
如果为 true,则发出信号 类型:布尔值 默认值: |
否 |
|
对应于指定的 Amazon 访问密钥的 Amazon 秘密访问密钥。 类型:字符串 |
否 |
|
包含要向其发送信号的资源的堆栈名称或堆栈 ID。 类型:字符串 |
是 |
-u, --url (仅适用于向资源发送信号) |
要使用的 CloudFormation 端点。 类型:字符串 |
否 |
|
可用于向关联的 类型:字符串 |
是 |
示例
Amazon Linux 示例
常规使用模式将同时使用 cfn-init 和 cfn-signal。cfn-signal 调用利用了 cfn-init 调用的返回状态(使用 $? Shell 程序构造)。如果应用程序安装失败,则该实例将无法创建,并且堆栈将回滚。有关 Windows 堆栈,请参阅 引导 Amazon CloudFormation Windows 堆栈。
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "Simple EC2 instance", "Resources": { "MyInstance": { "Type": "AWS::EC2::Instance", "Metadata": { "AWS::CloudFormation::Init": { "config": { "files": { "/tmp/test.txt": { "content": "Hello world!", "mode": "000755", "owner": "root", "group": "root" } } } } }, "Properties": { "ImageId": "{{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}}", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -x\n", "# Install the files and packages from the metadata\n", "yum install -y aws-cfn-bootstrap", "\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref": "AWS::StackName" }, " --resource MyInstance ", " --region ", { "Ref": "AWS::Region" }, "\n", "# Signal the status from cfn-init\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref": "AWS::StackName" }, " --resource MyInstance ", " --region ", { "Ref": "AWS::Region" }, "\n" ] ] } } }, "CreationPolicy": { "ResourceSignal": { "Timeout": "PT5M" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: Simple EC2 instance Resources: MyInstance: Type: 'AWS::EC2::Instance' Metadata: 'AWS::CloudFormation::Init': config: files: /tmp/test.txt: content: Hello world! mode: '000755' owner: root group: root Properties: ImageId: {{resolve:ssm:/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2}} InstanceType: t2.micro UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - yum install -y aws-cfn-bootstrap - |+ - | - '/opt/aws/bin/cfn-init -v ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ - | # Signal the status from cfn-init - '/opt/aws/bin/cfn-signal -e $? ' - ' --stack ' - !Ref 'AWS::StackName' - ' --resource MyInstance ' - ' --region ' - !Ref 'AWS::Region' - |+ CreationPolicy: ResourceSignal: Timeout: PT5M
示例
若干使用 cfn-signal 的 CloudFormation 示例模板,包括以下模板: