cfn-signal - AWS CloudFormation

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-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 AWS CloudFormation.endpoint

待機条件ハンドルを使用するための構文

待機条件ハンドルのシグナルを送信するには、次の構文を使用します。

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

オプション

使用できるオプションは、シグナルが作成ポリシーか待機条件ハンドルかによって異なります。作成ポリシーに適用するオプションは、待機条件ハンドルに適用されない場合があります。

名前 説明 必須

--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 です。

タイプ: 文字列

はい

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 を使用します。