Referência personalizada de solicitações e respostas de recursos do CloudFormation
O CloudFormation gerencia recursos personalizados por meio de um protocolo de solicitação-resposta que se comunica com seu provedor de recursos personalizados. Cada solicitação inclui um tipo de solicitação (Create, Update ou Delete) e segue esse fluxo de trabalho de alto nível:
-
Um desenvolvedor de modelos define um recurso personalizado com um
ServiceTokeneServiceTimeoutno modelo e inicia uma operação de pilha. -
O CloudFormation envia uma solicitação JSON ao provedor de recursos personalizados por meio do SNS ou do Lambda.
-
O provedor de recursos personalizados processa a solicitação e retorna uma resposta JSON para um URL pré-assinado do bucket do Amazon S3 antes que o período de tempo limite expire.
-
O CloudFormation lê a resposta e prossegue para a operação da pilha. Se nenhuma resposta for recebida antes do tempo limite terminar, a solicitação será considerada malsucedida e a operação de pilha falhará.
Para obter mais informações, consulte Como os recursos personalizados funcionam.
Esta seção descreve a estrutura, os parâmetros e as respostas esperadas para cada tipo de solicitação.
nota
O tamanho total do corpo da resposta não pode exceder 4096 bytes.
Configuração do modelo
Ao definir um recurso personalizado em um modelo, o desenvolvedor do modelo usa AWS::CloudFormation::CustomResource com as seguintes propriedades:
ServiceToken-
Um ARN de tópico do Amazon SNS ou um ARN de função do Lambda da mesma região que a pilha.
Obrigatório: Sim
Tipo: string
ServiceTimeout-
O tempo máximo, em segundos, antes que a operação de um recurso personalizado atinja o tempo limite. Esse valor deve estar entre 1 e 3600. Padrão: 3600 segundos (1 hora).
Obrigatório: não
Tipo: string
São compatíveis propriedades adicionais de recursos. As propriedades do recurso serão incluídas como ResourceProperties na solicitação. O provedor de recursos personalizados deve determinar quais propriedades são válidas e seus valores aceitáveis.
Objeto de solicitação
Objeto da resposta
O provedor de recursos personalizados envia uma resposta para o URL pré-assinado para todos os tipos de solicitação. Se o provedor de recursos personalizados não enviar uma resposta, o CloudFormation vai esperar até que a operação atinja o tempo limite.
A resposta deve ser um objeto JSON com os seguintes campos:
Status-
Deve ser
SUCCESSouFAILED.Obrigatório: Sim
Tipo: string
RequestId-
Um ID exclusivo para a solicitação. Copie esse valor exatamente como ele aparece na solicitação.
Obrigatório: Sim
Tipo: string
StackId-
O nome do recurso da Amazon (ARN) que identifica a pilha que contém o recurso personalizado. Copie esse valor exatamente como ele aparece na solicitação.
Obrigatório: Sim
Tipo: string
LogicalResourceId-
O nome do modelo escolhido pelo desenvolvedor (ID lógico) do recurso personalizado no modelo do CloudFormation. Copie esse valor exatamente como ele aparece na solicitação.
Obrigatório: Sim
Tipo: string
PhysicalResourceId-
Esse valor deve ser um identificador exclusivo do fornecedor de recursos personalizados e pode ter até 1 KB de tamanho. O valor deve ser uma string não vazia e deve ser idêntico para todas as respostas do mesmo recurso.
Ao atualizar recursos personalizados, o valor retornado de
PhysicalResourceIddetermina o comportamento da atualização. Se o valor retornado permanecer o mesmo, o CloudFormation vai considerar a atualização normal. Se o valor mudar, o CloudFormation vai interpretar a atualização como uma substituição e enviará uma solicitação de exclusão para o recurso antigo. Para obter mais informações, consulte AWS::CloudFormation::CustomResource.Obrigatório: Sim
Tipo: string
Reason-
Descreve o motivo de uma resposta de falha.
Obrigatório se
StatusforFAILED. Caso contrário, será opcional.Obrigatório: Condicional
Tipo: string
NoEcho-
Indica se é necessário mascarar a saída do recurso personalizado quando ela for recuperada usando a função
Fn::GetAtt. Se definido comotrue, todos os valores retornados serão mascarados com asteriscos (*****), exceto os armazenados na seçãoMetadatado modelo. O CloudFormation não transforma, modifica nem edita nenhuma informação incluída na seçãoMetadata. O valor padrão éfalse.Para obter mais informações sobre como usar
NoEchopara mascarar informações confidenciais, consulte a prática recomendada Não incorporar credenciais em seus modelos.Disponível somente para respostas
CreateeUpdate. Não é compatível com respostasDelete.Obrigatório: não
Tipo: booliano
Data-
Os pares de nome/valor definidos pelo provedor de recursos personalizados a serem enviados com a resposta. É possível acessar os valores fornecidos aqui pelo nome no modelo com
Fn::GetAtt.Disponível somente para respostas
CreateeUpdate. Não é compatível com respostasDelete.Importante
Se os pares de nome/valor contiverem informações confidenciais, você deverá utilizar o campo
NoEchopara mascarar a saída do recurso personalizado. Caso contrário, os valores estarão visíveis por meio de APIs que exibem valores de propriedades (comoDescribeStackEvents).Obrigatório: não
Tipo: objeto JSON
Exemplos de respostas de sucesso
Resposta Create e Update
{
"Status": "SUCCESS",
"RequestId": "unique-request-id",
"StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id",
"LogicalResourceId": "resource-logical-id",
"PhysicalResourceId": "provider-defined-physical-id",
"NoEcho": true,
"Data": {
"key1": "value1",
"key2": "value2"
}
}
DeleteResposta do
{
"Status": "SUCCESS",
"RequestId": "unique-request-id",
"StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id",
"LogicalResourceId": "resource-logical-id",
"PhysicalResourceId": "provider-defined-physical-id"
}
Exemplo de resposta com falha
{
"Status": "FAILED",
"RequestId": "unique-request-id",
"StackId": "arn:aws:cloudformation:us-west-2:123456789012:stack/name/id",
"LogicalResourceId": "resource-logical-id",
"PhysicalResourceId": "provider-defined-physical-id",
"Reason": "Required failure reason string"
}