cfn-signal - AWS CloudFormation

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

cfn-signal

描述

cfn-signal 協助程式指令碼訊號 CloudFormation ,指出 Amazon EC2執行個體是否已成功建立或更新。如果您在執行個體上安裝和設定軟體應用程式,您可以在這些軟體應用程式準備就緒 CloudFormation 時發出訊號。

您可以使用 cfn-signal 指令碼搭配 CreationPolicy 屬性,或使用 Auto Scaling 群組搭配 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-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。憑證檔案參數會取代此參數。

類型:字串

-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 (僅限等待條件控點)

資源事件的狀態原因 (目前只會在失敗時使用) – 如果 success 為 false,預設為 'Configuration failed' (組態失敗)。

類型:字串

--region (僅限發出資源訊號)

要使用 CloudFormation 的區域端點。

類型:字串

預設us-east-1

--resource (僅限發出資源訊號)

包含您想要發出訊號的建立政策之資源的邏輯 ID

類型:字串

--role (僅限發出資源訊號)

與執行個體相關聯的IAM角色名稱。

類型:字串

條件:憑證檔案參數會取代此參數。

-s, --success

若為 true,則發出 SUCCESS 訊號;否則發出 FAILURE 訊號。

類型:布林值

預設true

--secret-key (僅限發出資源訊號)

AWS 對應至指定存取金鑰的秘密 AWS 存取金鑰。

類型:字串

--stack (僅限發出資源訊號)

包含您想要發出訊號之資源的堆疊名稱或堆疊 ID。

類型:字串

-u, --url (僅限發出資源訊號)

要使用的 CloudFormation 端點。

類型:字串

waitconditionhandle.url (僅限等待條件控點)

預先簽章URL,可用來向關聯的 發出成功或失敗的訊號 WaitCondition

類型:字串

範例

Amazon Linux 範例

常見使用模式是同時使用 cfn-init 和 cfn-signal。cfn-signal 呼叫使用 cfn-init 呼叫的傳回狀態 (使用 $? shell 建構)。如果應用程式無法安裝,執行個體會無法建立且堆疊會復原。對於 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": "{{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

相關資源

數個 CloudFormation 範例範本使用 cfn-signal,包括下列範本。