メニュー
AWS CloudFormation
ユーザーガイド (API Version 2010-05-15)

カスタムリソース

カスタムリソースを使用すると、テンプレートにカスタムのプロビジョニングロジックを記述し、ユーザーがスタックを作成、更新(カスタムリソースを変更した場合)、削除するたびに AWS CloudFormation がそれを実行します。 たとえば、AWS CloudFormation のリソースタイプとして使用できないリソースを含める必要があるとします。それらのリソースは、カスタム リソースを使用して含めることができます。この方法により、すべての関連リソースを 1 つのスタックで管理できます。

AWS::CloudFormation::CustomResource または Custom::String のリソースタイプを使用して、テンプレートにカスタムリソースを定義します。カスタムリソースにはサービストークンを示す 1 つのプロパティが必要です。このプロパティは、AWS CloudFormation が要求を送信する宛先 (Amazon SNS トピックなど) を指定します。

注記

VPC エンドポイント機能を使用する場合は、VPC のカスタムリソースには AWS CloudFormation 固有の S3 バケットへのアクセス権が必要です。カスタムリソースは、署名付き Amazon S3 URL に応答を送信する必要があります。Amazon S3 に応答を送信できない場合、AWS CloudFormation は応答を受信せず、スタックオペレーションは失敗となります。詳細については、「AWS CloudFormation および VPC エンドポイント」を参照してください。

カスタムリソースのしくみ

カスタムリソースで実行されるアクションには、3 者が関係します。

template developer

カスタムリソースタイプを含むテンプレートを作成します。template developer はサービストークンとすべての入力データをテンプレートに指定します。

custom resource provider

カスタムリソースを所有し、AWS CloudFormation からの要求に対する処理と応答の方法を決定します。custom resource provider は template developer が使用するサービストークンを提供する必要があります。

AWS CloudFormation

スタックオペレーション中に、テンプレートで指定された要求をサービストークンに送信し、スタックオペレーションを進める前に応答を待機します。

template developer と custom resource provider は同じ個人や企業である場合がありますが、プロセスは同じです。次の手順はその一般的なプロセスを示したものです。

  1. template developer は対象のテンプレートのカスタムリソースを定義します。テンプレートにはサービストークンとすべての入力データのパラメーターが含まれます。カスタムリソースによっては、入力データが必要な場合があります。ただし、サービストークンはいつでも必要です。

    サービストークンは AWS CloudFormation が要求を送信する宛先 (Amazon SNS トピックの ARN、AWS Lambda 関数の ARN など) を指定します。詳細については、「AWS::CloudFormation::CustomResource」を参照してください。サービストークンや入力データの構造は custom resource provider によって定義されます。

  2. テンプレートを使用してカスタムリソースを作成、更新、削除するたびに、AWS CloudFormation は指定のサービストークンに要求を送信します。 このサービストークンは、スタックを作成するリージョンと同じリージョンにある必要があります。

    この要求には、AWS CloudFormation にリクエストタイプやカスタムリソースが応答を送信する宛先の Amazon Simple Storage Service の署名付き URL などの情報が含まれています。リクエストに含まれている情報の詳細については、「カスタムリソースリクエストオブジェクト」を参照してください。

    次のサンプルデータは、ある要求の AWS CloudFormation に含まれている情報を示します。

    Copy
    { "RequestType" : "Create", "ResponseURL" : "http://pre-signed-S3-url-for-response", "StackId" : "arn:aws:cloudformation:us-west-2:EXAMPLE/stack-name/guid", "RequestId" : "unique id for this create request", "ResourceType" : "Custom::TestResource", "LogicalResourceId" : "MyTestResource", "ResourceProperties" : { "Name" : "Value", "List" : [ "1", "2", "3" ] } }

    注記

    この例では、ResourceProperties は AWS CloudFormation が Lambda 関数へ送信するカスタムペイロードの作成を許可します。

  3. custom resource provider は AWS CloudFormation の要求を処理し、SUCCESS または FAILED の応答を署名付き URL に返します。custom resource provider は、応答を JSON 形式のファイルで提供し、それを署名付き S3 URL にアップロードします。詳細については、Amazon Simple Storage Service 開発者ガイド の「署名付き URL を使用したオブジェクトのアップロード」を参照してください。

    その応答について、custom resource provider には template developer がアクセスできる名前と値のペアも含まれている場合があります。たとえば、応答には要求が成功した場合は出力データ、要求が失敗した場合はエラーメッセージが含まれることがあります。応答の詳細については、「カスタムリソースの応答オブジェクト」を参照してください。

    custom resource provider には要求をリッスンして応答する責任があります。たとえば、Amazon SNS の通知の場合、custom resource provider は指定のトピックの ARN に送信された通知をリッスンして応答する必要があります。AWS CloudFormation は署名付き URL の場所で応答を待機してリッスンします。

    次のサンプルデータは、カスタムリソースの応答に含まれる可能性がある情報を示します。

    Copy
    { "Status" : "SUCCESS", "PhysicalResourceId" : "TestResource1", "StackId" : "arn:aws:cloudformation:us-west-2:EXAMPLE:stack/stack-name/guid", "RequestId" : "unique id for this create request", "LogicalResourceId" : "MyTestResource", "Data" : { "OutputName1" : "Value1", "OutputName2" : "Value2", } }
  4. SUCCESS 応答を取得した後、AWS CloudFormation はスタック操作を続けます。FAILURE が返されるか応答がない場合、操作が失敗します。カスタムリソースからの出力データは署名付き URL の場所に保存されます。template developer は Fn::GetAtt 関数を使用してそのデータを取得できます。

このページの内容: