使用自定义资源,您可以在模板中编写自定义配置逻辑,每次创建、更新(如果您更改了自定义资源)或删除资源栈时,阿里云ROS都会运行该逻辑。例如,您可能需要包含不可作为阿里云ROS资源类型的资源。您可以使用自定义资源包含这些资源。这样,您仍然可以在一个资源栈中管理所有相关资源。
自定义资源介绍 使用ALIYUN::ROS::CustomResource或Custom::MyCustomResourceTypeName资源类型在模板中定义自定义资源。自定义资源需要一个属性,即服务令牌,它指定阿里云ROS发送请求的目标,如阿里云MNS(消息服务)主题&队列,阿里云FC(函数计算)函数,或HTTP&HTTPS服务。
自定义资源必须将响应发送到预签名的响应URL。如果不能向ROS发送响应,阿里云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函数检索该数据。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。