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

cfn-signal

描述

cfn-signal 帮助程序脚本向 CloudFormation 发送信号来指示是否已成功创建或更新 Amazon EC2 实例。如果您在实例上安装和配置软件应用程序,则可在这些软件应用程序准备就绪时向 CloudFormation 发送信号。

您将 cfn-signal 脚本与 CreationPolicy 属性 结合使用或将自动扩缩组与 WaitOnResourceSignals 更新策略结合使用。当 CloudFormation 使用这些策略创建或更新资源时,它将暂停堆栈上的工作直至资源收到所需数量的信号或超出超时期限。对于 CloudFormation 接收的每个有效信号,CloudFormation 会将信号发送到堆栈事件以便您跟踪每个信号。有关使用创建策略和 cfn-signal 的演练,请参阅使用 Amazon CloudFormation 在 Amazon EC2 上部署应用程序

注意

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

用于发送资源信号的语法 (推荐)

如果您想向 CloudFormation 资源发送信号,请使用以下语法。

cfn-signal --success|-s signal.to.send \ --access-key access.key \ --credential-file|-f credential.file \ --exit-code|-e exit.code \ --http-proxy HTTP.proxy \ --https-proxy HTTPS.proxy \ --id|-i unique.id \ --region AWS.region \ --resource resource.logical.ID \ --role IAM.role.name \ --secret-key secret.key \ --stack stack.name.or.stack.ID \ --url Amazon CloudFormation.endpoint

用于等待条件句柄的语法

如果您想向等待条件句柄发送信号,请使用以下语法。

cfn-signal --success|-s signal.to.send \ --reason|-r resource.status.reason \ --data|-d data \ --id|-i unique.id \ --exit-code|-e exit.code \ waitconditionhandle.url

Options

您可使用的选项取决于您是向创建策略还是等待条件句柄发送信号。适用于创建策略的一些选项可能不适用于等待条件句柄。

名称 描述 必填

--access-key (仅适用于向资源发送信号)

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

类型:字符串

-d, --data (仅适用于等待条件句柄)

要通过 waitConditionHandle 发送回的数据。默认值待留空。

类型:字符串

默认值:空

-e, --exit-code

进程中出现错误代码,用于确定成功或失败。如果已经指定,则忽略 --success 选项。

类型:字符串

示例-e $?(适用于 Linux)、-e %ERRORLEVEL%(适用于 Windows cmd.exe)和 -e $lastexitcode(适用于 Windows PowerShell)。

-f, --credential-file (仅适用于向资源发送信号)

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

类型:字符串

--http-proxy

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

类型:字符串

--https-proxy

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

类型:字符串

-i, --id

要发送的唯一 ID。

类型:字符串

默认:Amazon EC2 实例的 ID。如果无法解析该 ID,则将返回计算机的完全限定域名(FQDN)。

-r, --reason (仅适用于等待条件句柄)

如成功为错误信息,资源事件状态原因 (当前仅用于故障) 则将默认为“配置失败”。

类型:字符串

--region (仅适用于向资源发送信号)

要使用的 CloudFormation 区域端点。

类型:字符串

默认值us-east-1

--resource (仅适用于向资源发送信号)

包含要向其发送信号的创建策略的资源的逻辑 ID

类型:字符串

--role (仅适用于向资源发送信号)

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

类型:字符串

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

-s, --success

如果为 true,则发出信号 SUCCESS,否则 FAILURE

类型:布尔值

默认值true

--secret-key (仅适用于向资源发送信号)

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

类型:字符串

--stack (仅适用于向资源发送信号)

包含要向其发送信号的资源的堆栈名称或堆栈 ID。

类型:字符串

-u, --url (仅适用于向资源发送信号)

要使用的 CloudFormation 端点。

类型:字符串

waitconditionhandle.url (仅适用于等待条件句柄)

可用于向关联的 WaitCondition 发送成功或失败信号的预签名 URL

类型:字符串

示例

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 示例模板,包括以下模板: