

これは新しい CloudFormation テンプレートリファレンスガイドです。ブックマークとリンクを更新してください。CloudFormation の開始方法については、『[AWS CloudFormation ユーザーガイド](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)』を参照してください。

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

`cfn-signal` ヘルパースクリプトは、Amazon EC2 インスタンスが正常に作成または更新されたかどうかを示すシグナルを CloudFormation に送信します。インスタンスにソフトウェアアプリケーションをインストールして設定する場合、ソフトウェアアプリケーションが使用できる状態になった時に CloudFormation にシグナルを送信できます。

Amazon EC2 Auto Scaling グループでは、`cfn-signal` スクリプトを [`CreationPolicy` 属性](aws-attribute-creationpolicy.md) と組み合わせて使用​​するか、[`UpdatePolicy` 属性](aws-attribute-updatepolicy.md) を `WaitOnResourceSignals` と組み合わせて使用​​します。CloudFormation がこれらのポリシーを使用してリソースを作成または更新する場合、リソースが必要な数のシグナルを受信するか、またはタイムアウト時間を超過するまで、スタック上の作業を停止します。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` (リソースシグナル送信のみ)  |  CloudFormation `SignalResource ` API を呼び出す許可が付与されたアカウントの AWS アクセスキー。認証情報ファイルパラメーターは、このパラメーターより優先されます。 *タイプ*: 文字列  |  いいえ  | 
|  `-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` (待機条件ハンドルのみ)  |  関連付けられている `WaitCondition` に成功または失敗のシグナルを送信するために使用できる署名済み URL です。 *タイプ*: 文字列  |  はい  | 

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

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

よくある使用パターンは、`cfn-init` と `cfn-signal` を一緒に使用することです。`cfn-signal` 呼び出しは、`cfn-init` への呼び出しから返されるステータスを使用します (\$1? シェル構造を使用)。アプリケーションのインストールが失敗すると、インスタンスの作成が失敗し、スタックはロールバックされます。

#### 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) 