cfn-signal
説明
cfn-signal ヘルパースクリプトは、Amazon EC2 インスタンスが正常に作成または更新されたかどうかを示すシグナルを CloudFormation に送信します。インスタンスにソフトウェアアプリケーションをインストールして設定する場合、ソフトウェアアプリケーションが使用できる状態になった時に CloudFormation にシグナルを送信できます。
cfn-signal スクリプトは CreationPolicy 属性 または WaitOnResourceSignals 更新ポリシーを持つ Auto Scaling グループともに使用します。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
オプション
使用できるオプションは、シグナルが作成ポリシーか待機条件ハンドルかによって異なります。作成ポリシーに適用するオプションは、待機条件ハンドルに適用されない場合があります。
名前 | 説明 | 必須 |
---|---|---|
|
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-init と cfn-signal を一緒に使用することです。cfn-signal 呼び出しは、cfn-init への呼び出しから返されるステータスを使用します ($? シェル構造を使用)。アプリケーションのインストールが失敗すると、インスタンスの作成が失敗し、スタックはロールバックされます。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 を使用します。