本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
cfn-signal
cfn-signal
協助程式指令碼會發出 CloudFormation 訊號,指出 Amazon EC2 執行個體是否已成功建立或更新。如果您在執行個體上安裝及設定軟體應用程式,則可以在這些軟體應用程式就緒時,向 CloudFormation 發出訊號。
您可以將cfn-signal
指令碼與適用於 Amazon EC2 Auto Scaling 群組WaitOnResourceSignals
的 CreationPolicy 屬性或 UpdatePolicy 屬性 搭配使用。當 CloudFormation 使用這些政策建立或更新資源時,它會暫停堆疊上的工作,直到資源收到所需的訊號數量或超過逾時期間為止。對於 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
\ --urlAWS CloudFormation.endpoint
注意
cfn-signal
不需要登入資料,因此您不需要使用 --access-key
、--role
、 --secret-key
或 --credential-file
選項。不過,如果未指定憑證,CloudFormation 會檢查是否有堆疊成員資格,並將呼叫範圍限制為執行個體所屬的堆疊。如需詳細資訊,請參閱協助程式指令碼的許可。
使用等待條件控點的語法
如果您想要發出等待條件控點訊號,請使用下列語法。
cfn-signal --success|-s
signal.to.send
\ --reason|-rresource.status.reason
\ --data|-ddata
\ --id|-iunique.id
\ --exit-code|-eexit.code
\waitconditionhandle.url
選項
您可以使用的選項取決於您要發出建立政策或等待條件控點訊號。套用至建立政策的某些選項可能不會套用至等待條件控點。
名稱 | 描述 | 必要 |
---|---|---|
|
AWS 具有呼叫 CloudFormation 類型:字串 |
否 |
|
要使用 類型:字串 預設:空白 |
否 |
|
來自程序的錯誤碼,可用來判斷成功或失敗。如果指定,則會忽略 類型:字串 範例: |
否 |
|
包含私密存取金鑰和存取金鑰的檔案。憑證檔案參數會取代 --role、--access-key 和 --secret-key 參數。 類型:字串 |
否 |
|
HTTP 代理 (非 SSL)。使用下列格式: 類型:字串 |
否 |
|
HTTPS 代理。使用下列格式: 類型:字串 |
否 |
|
要傳送的唯一 ID。 類型:字串 預設值:Amazon EC2 執行個體的 ID。如果無法解析 ID,則傳回機器的完整網域名稱 (FQDN)。 |
否 |
|
資源事件的狀態原因 (目前只會在失敗時使用) – 如果 success 為 false,預設為 'Configuration failed' (組態失敗)。 類型:字串 |
否 |
--region (僅限發出資源訊號) |
要使用的 CloudFormation 區域端點。 類型:字串 預設: |
否 |
--resource (僅限發出資源訊號) |
包含您想要發出訊號的建立政策之資源的邏輯 ID。 類型:字串 |
是 |
|
與執行個體相關聯的 IAM 角色名稱。 類型:字串 條件:憑證檔案參數會取代此參數。 |
否 |
|
若為 true,則發出 類型:布林值 預設: |
否 |
|
AWS 對應至指定存取金鑰的秘密 AWS 存取金鑰。 類型:字串 |
否 |
|
包含您想要發出訊號之資源的堆疊名稱或堆疊 ID。 類型:字串 |
是 |
-u, --url (僅限發出資源訊號) |
要使用的 CloudFormation 端點。 類型:字串 |
否 |
|
可用來對相關聯的 類型:字串 |
是 |
範例
Amazon Linux 範例
常見的使用模式是cfn-signal
一起使用 cfn-init
和 。cfn-signal
呼叫會使用呼叫的傳回狀態 cfn-init
(使用 $? shell 建構)。如果應用程式無法安裝,執行個體會無法建立且堆疊會復原。
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
相關資源
您也可以造訪我們的 GitHub 儲存庫,下載使用 的範例範本cfn-signal
,包括下列範本。