AWS CloudFormation
User Guide (API Version 2010-05-15)
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。请点击 Amazon AWS 入门,可查看中国地区的具体差异

cfn-signal

说明

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

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

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

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

注意

cfn-signal 不需要凭证,因此您不需要使用 --access-key--secret-key--role--credential-file 选项。但是,如果不指定证书,则 AWS 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 AWS 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

选项

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

名称 描述 必需

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

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

Type: String

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

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

Type: String

默认值:空

-e, --exit-code

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

Type: String

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

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

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

Type: String

--http-proxy

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

Type: String

--https-proxy

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

Type: String

-i, --id

要发送的唯一 ID。

Type: String

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

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

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

Type: String

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

要使用的 AWS CloudFormation 区域终端节点。

Type: String

默认值us-east-1

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

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

Type: String

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

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

Type: String

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

-s, --success

如为真实的,则信号“成功”,否则“失败”。

Type: Boolean

默认值true

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

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

Type: String

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

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

Type: String

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

要使用的 AWS CloudFormation 终端节点。

Type: String

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

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

Type: String

示例

Amazon Linux 示例

常规使用模式将同时使用 cfn-init 和 cfn-signal。cfn-signal 调用利用了 cfn-init 调用返回状态(使用 $? 外壳程序构造)。如果应用程序安装失败,则该实例将无法创建,并且堆栈将回滚。有关 Windows 堆栈,请参阅启动 AWS 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": "ami-a4c7edb2", "InstanceType": "t2.micro", "UserData": { "Fn::Base64": { "Fn::Join": [ "", [ "#!/bin/bash -x\n", "# Install the files and packages from the metadata\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: ami-a4c7edb2 InstanceType: t2.micro UserData: !Base64 'Fn::Join': - '' - - | #!/bin/bash -x - | # Install the files and packages from the metadata - '/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 的 AWS CloudFormation 示例模板,包括以下模板: