カスタムリソースを使用して、テンプレートのロジック構成をカスタマイズできます。ROS は、スタックを作成、更新、または削除するたびにロジック構成を実行します。 ROS リソースタイプとして使用できないリソースを使用する場合は、テンプレートでカスタムリソースを使用できます。 この方法で、関連するすべてのリソースを単一のスタックで管理できます。
カスタムリソース
ALIYUN::ROS::CustomResource または Custom::MyCustomResourceTypeName を使用して、テンプレートでカスタムリソースを定義できます。 カスタムリソースには、ROS がリクエストを送信する宛先を指定するサービストークンという 1 つのプロパティが必要です。 サービストークンは、Function Compute 関数、MNS トピック、MNS キュー、または HTTP または HTTPS URL にすることができます。
カスタムリソースは、署名済み URL にレスポンスを送信する必要があります。 ROS にレスポンスを送信できない場合、スタック操作は失敗します。 ResponseURL は、インターネット経由でレスポンスを取得するために使用されます。 IntranetResponseURL は、内部ネットワーク経由でレスポンスを取得するために使用されます。
カスタムリソースのしくみ
カスタムリソースに対して実行されるアクションには、次のエンティティが関係します。
テンプレート開発者: カスタムリソースタイプを含むテンプレートを作成します。 テンプレート開発者は、サービストークンとすべての入力パラメーターをテンプレートで指定します。
カスタムリソースプロバイダー: カスタムリソースを所有し、ROS からのリクエストの処理方法と応答方法を決定します。 カスタムリソースプロバイダーは、テンプレート開発者が使用するサービストークンを提供する必要があります。
ROS: スタック操作中にテンプレートで指定されたサービストークンにリクエストを送信し、スタック操作を続行する前にレスポンスを待ちます。
テンプレート開発者とカスタムリソースプロバイダーは同じ人物またはエンティティである可能性がありますが、プロセスは同じです。 次の手順では、リソースをカスタマイズする方法について説明します。
テンプレート開発者は、サービストークンとすべての入力パラメーターを含むテンプレートでカスタムリソースを定義します。 カスタムリソースに基づいて、入力パラメーターが必要になる場合がありますが、サービストークンは常に必要です。
サービストークンは、ROS がリクエストを送信する宛先 (MNS トピック ARN や Function Compute 関数 ARN など) を指定します。 詳細については、ALIYUN::ROS::CustomResource をご参照ください。 サービストークンと入力データの構造は、カスタムリソースプロバイダーによって定義されます。
テンプレートを使用してカスタムリソースを作成、更新、または削除すると、ROS は指定されたサービストークンにリクエストを送信します。 サービストークンはすべてのリージョンで使用できます。
リクエストでは、ROS はリクエストタイプや署名済み URL などの情報を含めます。カスタムリソースは、この URL にレスポンスを送信します。 詳細については、カスタムリソースリクエストオブジェクト をご参照ください。
次のサンプルデータは、ROS がリクエストに含める内容を示しています。
{ "RequestType" : "Create", // リクエストタイプ "RequestId" : "unique id for this create request", // この作成リクエストの一意の ID "ResponseURL" : "pre-signed-url-for-create-response", // 作成レスポンス用の署名済み URL "IntranetResponseURL" : "pre-signed-intranet-url-for-create-response", // 作成レスポンス用の署名済みイントラネット URL "ResourceType" : "Custom::MyCustomResourceType", // リソースタイプ "LogicalResourceId" : "name of resource in template", // テンプレート内のリソースの名前 "StackId" : "stack id", // スタック ID "StackName" : "stack name", // スタック名 "ResourceOwnerId": "resource owner id", // リソース所有者 ID "CallerId": "caller id", // 呼び出し元 ID "RegionId": "region id", // リージョン ID "ResourceProperties" : { // リソースプロパティ "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } }カスタムリソースプロバイダーは ROS リクエストを処理し、SUCCESS または FAILED のレスポンスを署名済み URL に返します。 カスタムリソースプロバイダーは、JSON 形式のファイルでレスポンスを提供し、署名済み URL にレスポンスをアップロードします。
レスポンスでは、カスタムリソースプロバイダーは、テンプレート開発者がアクセスできる名前と値のペアを含めることもできます。 たとえば、レスポンスには、リクエストが成功した場合は出力データ、リクエストが失敗した場合はエラーメッセージを含めることができます。 詳細については、カスタムリソースレスポンスオブジェクト をご参照ください。
カスタムリソースプロバイダーは、リクエストを listen し、応答する責任があります。 たとえば、Alibaba Cloud MNS 通知の場合、カスタムリソースプロバイダーは、特定のトピック ARN に送信される通知を listen し、応答する必要があります。 ROS は、署名済み URL の場所でレスポンスを待機して listen します。
次のサンプルデータは、カスタムリソースがレスポンスに含めることができる内容を示しています。
{ "Status" : "SUCCESS", // ステータス "RequestId" : "unique id for this create request (copied from request)", // この作成リクエストの一意の ID (リクエストからコピー) "LogicalResourceId" : "name of resource in template (copied from request)", // テンプレート内のリソースの名前 (リクエストからコピー) "StackId" : "stack id (copied from request)", // スタック ID (リクエストからコピー) "PhysicalResourceId" : "required vendor-defined physical id that is unique for that vendor", // ベンダーに対して一意の必須ベンダー定義物理 ID "Data" : { // データ "keyThatCanBeUsedInGetAtt1" : "data for key 1", // GetAtt1 で使用できるキーのデータ "keyThatCanBeUsedInGetAtt2" : "data for key 2" // GetAtt2 で使用できるキーのデータ } }ROS が SUCCESS レスポンスを取得すると、ROS はスタック操作を続行します。 FAILED レスポンスまたはレスポンスが返されない場合、操作は失敗します。 カスタムリソースからの出力データは、署名済み URL の場所に保存されます。 テンプレート開発者は、Fn::GetAtt 関数を使用してそのデータを取得できます。