本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
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-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 --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 端點。 類型:字串 |
否 |
|
預先簽章URL,可用來向關聯的 發出成功或失敗的訊號 類型:字串 |
是 |
範例
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,包括下列範本。