

這是新的 *CloudFormation 範本參考指南*。請更新您的書籤和連結。如需 CloudFormation 入門的說明，請參閱 [AWS CloudFormation 使用者指南](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

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

# cfn-signal
<a name="cfn-signal"></a>

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

對於 Amazon EC2 Auto Scaling 群組，可以將 `cfn-signal` 指令碼與 [`CreationPolicy` 屬性](aws-attribute-creationpolicy.md) 或具有 `WaitOnResourceSignals` 的 [`UpdatePolicy` 屬性](aws-attribute-updatepolicy.md) 搭配使用。當 CloudFormation 使用這些政策建立或更新資源時，會暫停堆疊上的工作，直到資源收到必要的訊號數目，或直到超過逾時期限。針對 CloudFormation 收到的每個有效訊號，它會對堆疊事件發佈訊號，以便您追蹤每個訊號。

**Topics**
+ [發出資源訊號的語法 (建議)](#w2aac32c29b9)
+ [使用等待條件控點的語法](#cfn-signal-Syntaxwaitcondition)
+ [選項](#cfn-signal-options)
+ [範例](#cfn-signal-examples)
+ [相關資源](#cfn-signal-related-resources)

## 發出資源訊號的語法 (建議)
<a name="w2aac32c29b9"></a>

如果您想要發出 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 {{CloudFormation.endpoint}}
```

**注意**  
`cfn-signal` 不需要憑證，因此您不需要使用 `--access-key`、`--secret-key`、`--role` 或 `--credential-file` 選項。不過，如果未指定憑證，CloudFormation 會檢查是否有堆疊成員資格，並將呼叫範圍限制為執行個體所屬的堆疊。如需詳細資訊，請參閱[協助程式指令碼的許可](cfn-helper-scripts-reference.md#cfn-helper-scripts-reference-permissions)。

## 使用等待條件控點的語法
<a name="cfn-signal-Syntaxwaitcondition"></a>

如果您想要發出等待條件控點訊號，請使用下列語法。

```
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}}
```

## 選項
<a name="cfn-signal-options"></a>

您可以使用的選項取決於您要發出建立政策或等待條件控點訊號。套用至建立政策的某些選項可能不會套用至等待條件控點。


| 名稱 | 描述 | 必要 | 
| --- | --- | --- | 
| `--access-key` (僅限發出資源訊號) | AWS 具有呼叫 CloudFormation `SignalResource `API 許可之帳戶的存取金鑰。憑證檔案參數會取代此參數。<br />*類型：*字串 | 否 | 
| `-d, --data` (僅限等待條件控點) | 要使用 `waitConditionHandle` 傳回的資料。預設為空白。<br />*類型：*字串<br />*預設*：空白 | 否 | 
| `-e, --exit-code`  | 來自程序的錯誤碼，可用來判斷成功或失敗。如果指定，則會忽略 `--success` 選項。<br />*類型：*字串<br />*範例*：`-e $?` (適用於 Linux)、`-e %ERRORLEVEL%` (適用於 Windows cmd.exe) 和 `-e $lastexitcode` (適用於 Windows PowerShell)。 | 否 | 
| `-f, --credential-file` (僅限發出資源訊號) | 包含私密存取金鑰和存取金鑰的檔案。憑證檔案參數會取代 --role、--access-key 和 --secret-key 參數。<br />*類型：*字串 | 否 | 
| `--http-proxy` | HTTP 代理 (非 SSL)。使用下列格式：`http://{{user:password}}@{{host}}:{{port}}`<br />*類型：*字串 | 否 | 
| `--https-proxy` | HTTPS 代理。使用下列格式：`https://{{user:password}}@{{host}}:{{port}}`<br />*類型：*字串 | 否 | 
| `-i, --id` | 要傳送的唯一 ID。<br />*類型：*字串<br />*預設值*：Amazon EC2 執行個體的 ID。如果無法解析 ID，則傳回機器的完整網域名稱 (FQDN)。 | 否 | 
| `-r, --reason ` (僅限等待條件控點) | 資源事件的狀態原因 (目前只會在失敗時使用) – 如果 success 為 false，預設為 'Configuration failed' (組態失敗)。<br />*類型：*字串 | 否 | 
| --region (僅限發出資源訊號) | 要使用的 CloudFormation 區域端點。<br />*類型：*字串<br />*預設*：`us-east-1` | 否 | 
| --resource (僅限發出資源訊號) | 包含您想要發出訊號的建立政策之資源的邏輯 ID。<br />*類型：*字串 | 是 | 
| `--role` (僅限發出資源訊號) | 與執行個體相關聯的 IAM 角色名稱。<br />*類型：*字串<br />條件：憑證檔案參數會取代此參數。 | 否 | 
| `-s, --success`  | 若為 true，則發出 `SUCCESS` 訊號；否則發出 `FAILURE` 訊號。<br />*類型*：布林值<br />*預設*：`true` | 否 | 
| `--secret-key` (僅限發出資源訊號) | AWS 對應至指定存取金鑰的私密 AWS 存取金鑰。<br />*類型：*字串 | 否 | 
| `--stack` (僅限發出資源訊號) | 包含您想要發出訊號之資源的堆疊名稱或堆疊 ID。<br />*類型：*字串 | 是 | 
| -u, --url (僅限發出資源訊號) | 要使用的 CloudFormation 端點。<br />*類型：*字串 | 否 | 
| `waitconditionhandle.url` (僅限等待條件控點) | 可用來對相關聯的 `WaitCondition` 發出成功或失敗訊號之預先簽署的 URL<br />*類型：*字串 | 是 | 

## 範例
<a name="cfn-signal-examples"></a>

### Amazon Linux 範例
<a name="w2aac32c29c15b3"></a>

常見使用模式是同時使用 `cfn-init` 和 `cfn-signal`。`cfn-signal` 呼叫使用 `cfn-init` 呼叫的傳回狀態 (使用 $? shell 建構)。如果應用程式無法安裝，執行個體會無法建立且堆疊會復原。

#### JSON
<a name="cfn-signal-example.json"></a>

```
{
    "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
<a name="cfn-signal-example.yaml"></a>

```
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: !Sub |
          #!/bin/bash -x
          # Install the files and packages from the metadata
          yum install -y aws-cfn-bootstrap
          /opt/aws/bin/cfn-init -v --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}
          # Signal the status from cfn-init
          /opt/aws/bin/cfn-signal -e $? --stack ${AWS::StackName} --resource MyInstance --region ${AWS::Region}
    CreationPolicy:
      ResourceSignal:
        Timeout: PT5M
```

## 相關資源
<a name="cfn-signal-related-resources"></a>

您也可以造訪我們的 GitHub 儲存庫，下載使用 `cfn-signal` 的[範例範本](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/template-guide.html#sample-templates)，包括下列範本。
+  [InstanceWithCfnInit.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/EC2/InstanceWithCfnInit.yaml) 
+  [AutoScalingRollingUpdates.yaml](https://github.com/aws-cloudformation/aws-cloudformation-templates/blob/main/AutoScaling/AutoScalingRollingUpdates.yaml) 