AWS CloudFormation
ユーザーガイド (API バージョン 2010-05-15)

AWS::CloudFormation::CustomResource

CloudFormation テンプレートでは、AWS::CloudFormation::CustomResource または Custom::String リソースタイプを使用して、カスタムリソースを指定します。

カスタムリソースでは、CloudFormation テンプレートでカスタムのプロビジョニングロジックを記述し、CloudFormation がそれをスタックオペレーション中 (スタックの作成、更新、削除など) に実行するための方法が提供されます。詳細については、「カスタムリソース」を参照してください。

注記

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

構文

AWS CloudFormation テンプレートでこのエンティティを宣言するには、次の構文を使用します。

JSON

{ "Type" : "AWS::CloudFormation::CustomResource", "Properties" : { "ServiceToken" : String } }

YAML

Type: AWS::CloudFormation::CustomResource Properties: ServiceToken: String

プロパティ

ServiceToken

注記

カスタムリソースでは、AWS で定義できるプロパティは ServiceToken のみとなっています。他のプロパティは、サービスプロバイダーが定義します。

サービスにアクセスするためにサービスプロバイダーからテンプレートの開発者に与えられたサービストークン (Amazon SNS トピック ARN や Lambda 関数 ARN など)。このサービストークンは、作成しているスタックと同じリージョンのものである必要があります。

アップデートはサポートされていません。

必須: はい

タイプ: 文字列

Update requires: Replacement

解説

カスタムリソースのタイプの名前を指定する

カスタムリソースには、リソースタイプとして AWS::CloudFormation::CustomResource を指定する以外に、独自のリソースタイプの名前を指定できます。たとえば、AWS::CloudFormation::CustomResource の代わりに、Custom::MyCustomResourceTypeName を使用できます。

カスタムリソースタイプ名には、英数字および次の文字を含めることができます。_@-。カスタムリソースタイプ名には最長 60 文字まで指定できます。更新時にタイプを変更することはできません。

リソースタイプに独自の名前を使用すると、スタックのカスタムリソースのタイプをすばやく識別できます。たとえば、カスタムリソースが 2 つあり、それぞれが異なる ping テストを実行する場合であれば、そのタイプ名を (Custom::PingTester ではなく) AWS::CloudFormation::CustomResource として、ping テスターであることが容易にわかるようにするという使い方が考えられます。

更新時にカスタムリソースを置き換える

カスタムリソースの更新には、基になる物理リソースの置き換えが伴うことがあります。CloudFormation テンプレートでカスタムリソースを更新すると、CloudFormation が、そのカスタムリソースに更新リクエストを送信します。カスタムリソースを置き換えることが必要になった場合には、新しいカスタムリソースから新しい物理 ID を含むレスポンスを送信する必要があります。CloudFormation は、そのレスポンスを受け取ると、古いカスタムリソースと新しいカスタムリソースの PhysicalResourceId を比較します。この 2 つが異なる場合には、CloudFormation は新しい方が更新用のものであると認識し、古いリソースに削除リクエストを送信します。このプロセスの順を追った説明については、「スタックの更新」を参照してください。

次の点に注意してください。

戻り値の取得

カスタムリソースでは、カスタムリソースプロバイダーが戻り値を定義します。戻り値を取得するときは、プロバイダーが定義した属性について Fn::GetAtt を呼び出します。

テンプレートでカスタムリソース定義を作成する

以下の例は、テンプレートでカスタムリソース定義を作成する方法を示しています。

ServiceToken 以外のプロパティと、Fn::GetAtt リソース属性はすべて、カスタムリソースプロバイダーが定義します。

JSON

{ "AWSTemplateFormatVersion" : "2010-09-09", "Resources" : { "MyFrontEndTest" : { "Type": "Custom::PingTester", "Version" : "1.0", "Properties" : { "ServiceToken": "arn:aws:sns:us-east-1:84969EXAMPLE:CRTest", "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } } }, "Outputs" : { "CustomResourceAttribute1" : { "Value" : { "Fn::GetAtt" : ["MyFrontEndTest", "responseKey1"] } }, "CustomResourceAttribute2" : { "Value" : { "Fn::GetAtt" : ["MyFrontEndTest", "responseKey2"] } } } }

YAML

AWSTemplateFormatVersion: "2010-09-09" Resources: MyFrontEndTest: Type: "Custom::PingTester" Version: "1.0" Properties: ServiceToken: "arn:aws:sns:us-east-1:84969EXAMPLE:CRTest" key1: string key2: - list key3: key4: map Outputs: CustomResourceAttribute1: Value: Fn::GetAtt: - MyFrontEndTest - responseKey1 CustomResourceAttribute2: Value: Fn::GetAtt: - MyFrontEndTest - responseKey2

カスタムリソースでの AWS Lambda 関数の使用

Lambda 関数とカスタムリソースを使用することで、スタックイベント (作成、更新、および削除) に対応するカスタムコードを実行できます。次のカスタムリソースは Lambda 関数を起動し、それを StackName プロパティに入力として送信します。関数はこのプロパティを使用して、適切なスタックからの出力を取得します。

JSON

"MyCustomResource" : { "Type" : "Custom::TestLambdaCrossStackRef", "Properties" : { "ServiceToken": { "Fn::Join": [ "", [ "arn:aws:lambda:", { "Ref": "AWS::Region" }, ":", { "Ref": "AWS::AccountId" }, ":function:", {"Ref" : "LambdaFunctionName"} ] ] }, "StackName": { "Ref": "NetworkStackName" } } }

YAML

MyCustomResource: Type: "Custom::TestLambdaCrossStackRef" Properties: ServiceToken: !Sub | arn:aws:lambda:${AWS::Region}:${AWS::AccountId}:function:${LambdaFunctionName} StackName: Ref: "NetworkStackName"

このページの内容: