使用自訂資源,您可以在模板中編寫自訂配置邏輯,當您建立、更新(如果您更改了自訂資源)或刪除資源棧時,ROS會運行該邏輯。例如:您可能需要使用不可作為ROS資源類型的資源,此時可以在模板中自訂資源,從而在一個資源棧中管理所有相關資源。
自訂資源介紹
您可以使用ALIYUN::ROS::CustomResource或Custom::MyCustomResourceTypeName資源類型在模板中定義自訂資源。自訂資源需要一個屬性,即服務令牌,它指定ROS發送請求的目標,如SMQ(Simple Message Queue (formerly MNS))主題和隊列,FC(Function Compute)函數或HTTP和HTTPS服務。
自訂資源必須將響應發送到預簽名的響應URL。如果不能向ROS發送響應,資源棧操作會失敗。ResponseURL提供了公網響應的能力,IntranetResponseURL提供了阿里雲內網響應的能力。
自訂資源的工作原理
自訂資源執行的操作涉及以下對象:
template developer:建立包含自訂資源類型的模板。template developer在模板中指定服務令牌和所有輸入資料。
custom resource provider:擁有自訂資源並確定如何處理和響應來自ROS的請求。custom resource provider必須提供template developer使用的服務令牌。
ROS:在資源棧操作期間,向模板中指定的服務令牌發送請求,然後等待響應,再繼續資源棧操作。
template developer和custom resource provider可以是同一人員或實體,但過程相同。自訂資源的步驟如下:
template developer在模板中定義自訂資源,該模板包含服務令牌和任何輸入資料參數。根據自訂資源,輸入資料可選,但服務令牌必選。
服務令牌指定ROS發送請求發送的位置,例如:發送到MNS主題ARN或FC函數ARN。更多資訊,請參見 ALIYUN::ROS::CustomResource。服務令牌和輸入資料的結構由custom resource provider定義。
當您使用模板建立、更新或刪除自訂資源時,ROS將向指定服務令牌發送請求。服務令牌無地區限制。
在請求中,ROS包含請求類型和自訂資源向其發送請求的預簽名URL等資訊。更多資訊,請參見自訂資源請求對象。
以下樣本列出ROS在請求中包含的內容:
{ "RequestType" : "Create", "RequestId" : "unique id for this create request", "ResponseURL" : "pre-signed-url-for-create-response", "IntranetResponseURL" : "pre-signed-intranet-url-for-create-response", "ResourceType" : "Custom::MyCustomResourceType", "LogicalResourceId" : "name of resource in template", "StackId" : "stack id", "StackName" : "stack name", "ResourceOwnerId": "resource owner id", "CallerId": "caller id", "RegionId": "region id", "ResourceProperties" : { "key1" : "string", "key2" : [ "list" ], "key3" : { "key4" : "map" } } }
custom resource provider處理ROS請求並向預簽名URL返回SUCCESS或FAILED響應。custom resource provider提供採用JSON格式資料響應URL。
在響應中,custom resource provider還可以包含template developer。例如:如果請求成功,響應可以包含輸出資料,如果請求失敗,響應可以包含錯誤訊息。更多資訊,請參見自訂資源響應對象。
custom resource provider負責偵聽和響應請求。例如:對於MNS主題通知,custom resource provider必須偵聽並響應發送到特定主題ARN的通知。ROS在預簽名URL位置等待並偵聽響應。
以下樣本列出自訂資源在響應中可以包含的內容:
{ "Status" : "SUCCESS", "RequestId" : "unique id for this create request (copied from request)", "LogicalResourceId" : "name of resource in template (copied from request)", "StackId" : "stack id (copied from request)", "PhysicalResourceId" : "required vendor-defined physical id that is unique for that vendor", "Data" : { "keyThatCanBeUsedInGetAtt1" : "data for key 1", "keyThatCanBeUsedInGetAtt2" : "data for key 2" } }
獲得SUCCESS響應後,ROS繼續資源棧操作。如果收到FAILED響應或未返回任何響應,則操作失敗。來自自訂資源的所有輸出資料都由預簽名URL響應返回。template developer可使用Fn::GetAtt函數檢索該資料。