Recursos personalizados permitem incorporar lógica própria em modelos do ROS. O ROS executa essa lógica ao criar, atualizar ou excluir uma pilha. Use recursos personalizados para gerenciar tipos de recursos sem suporte nativo no ROS e mantenha todos os recursos em uma única pilha.
Sobre recursos personalizados
Defina um recurso personalizado no modelo com o tipo de recurso ALIYUN::ROS::CustomResource ou Custom::MyCustomResourceTypeName. Cada recurso personalizado exige um token de serviço para especificar o destino das requisições do ROS, como tópicos e filas do SMQ (Simple Message Queue (formerly MNS)), funções do Function Compute (FC) ou serviços HTTP e HTTPS.
O recurso personalizado deve enviar uma resposta a uma URL pré-assinada. A ausência de resposta causa falha na operação da pilha. Use ResponseURL para responder pela rede pública e IntranetResponseURL para responder pela rede interna da Alibaba Cloud.
Funcionamento dos recursos personalizados
As operações de recursos personalizados envolvem três entidades:
Desenvolvedor do modelo: cria o modelo com o tipo de recurso personalizado, o token de serviço e os dados de entrada.
Provedor do recurso personalizado: possui o recurso personalizado, define o processamento e a resposta às requisições do ROS e fornece o token de serviço ao desenvolvedor do modelo.
ROS: envia uma requisição ao token de serviço especificado no modelo durante a operação da pilha e aguarda uma resposta antes de prosseguir.
O desenvolvedor do modelo e o provedor do recurso personalizado podem ser a mesma pessoa ou entidade. Fluxo de trabalho do recurso personalizado:
-
Defina o recurso personalizado no modelo com o token de serviço obrigatório e parâmetros opcionais de dados de entrada.
O token de serviço especifica o destino da requisição do ROS, como um ARN (Alibaba Cloud Resource Name) de tópico MNS ou um ARN de função FC, conforme definido em ALIYUN::ROS::CustomResource. O provedor do recurso personalizado define a estrutura do token de serviço e os dados de entrada.
-
Ao criar, atualizar ou excluir um recurso personalizado, o ROS envia uma requisição ao token de serviço especificado. Tokens de serviço não têm restrição de região.
A requisição do ROS inclui o tipo de requisição, a URL de resposta pré-assinada e outros metadados descritos em Objetos de requisição de recurso personalizado.
Exemplo de requisição:
{ "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" } } } -
O provedor do recurso personalizado processa a requisição e retorna uma resposta JSON
SUCCESSouFAILEDà URL pré-assinada.A resposta pode incluir dados de saída em caso de sucesso ou uma mensagem de erro em caso de falha, conforme descrito em Objetos de resposta de recurso personalizado.
O provedor deve monitorar e responder à requisição. Por exemplo, um provedor baseado em MNS escuta no ARN do tópico especificado. O ROS aguarda uma resposta na URL pré-assinada.
Exemplo de resposta:
{ "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" } } Após receber uma resposta
SUCCESS, o ROS continua a operação da pilha. Uma respostaFAILEDou a ausência de resposta causa falha na operação. Recupere dados de saída da resposta com a funçãoFn::GetAtt.