Quero seguir as práticas recomendadas quando eu implementar recursos personalizados com suporte do AWS Lambda com o AWS CloudFormation.
Resolução
Ao implementar recursos personalizados com suporte do Lambda com o CloudFormation, use as seguintes práticas recomendadas.
Crie seus recursos personalizados para relatar, registrar e resolver falhas
Exceções podem fazer com que seu código de função seja encerrado sem enviar uma resposta. O CloudFormation exige uma resposta HTTPS para confirmar se a operação foi bem-sucedida ou falhou. Uma exceção não relatada faz com que o CloudFormation espere até que a operação atinja o tempo limite antes de ela iniciar uma reversão da pilha. Se a exceção ocorrer novamente durante a reversão, o CloudFormation aguardará novamente por um tempo limite antes de terminar em uma falha de reversão. Durante esse período, não é possível usar sua pilha.
Para evitar problemas de tempo limite, inclua os seguintes elementos no código que você cria para a função do Lambda:
- Lógica para resolver exceções
- A capacidade de registrar falhas em cenários de solução de problemas
- A capacidade de responder ao CloudFormation com uma resposta HTTPS para confirmar que uma operação falhou
- Uma fila de mensagens não entregues que permite capturar e lidar com execuções incompletas
- Um módulo cfn-response para enviar uma resposta ao CloudFormation
Defina períodos de tempo limite razoáveis e informe quando eles estão prestes a ser excedidos
Se uma operação não for executada dentro do período de tempo limite definido, a função gerará uma exceção e não envia uma resposta ao CloudFormation.
Para evitar esse problema, execute as seguintes ações:
- Definir um valor de tempo limite para suas funções do Lambda alto o suficiente para lidar com variações no tempo de processamento e nas condições da rede.
- Definir um cronômetro em sua função para responder ao CloudFormation com um erro quando uma função estiver prestes a expirar.
Crie em torno de eventos Criar, Atualizar e Excluir
Dependendo da ação da pilha, o CloudFormation envia à sua função um evento Criar, Atualizar ou Excluir. Como cada evento é tratado de forma diferente, confirme se não há comportamentos indesejados quando sua função receber um dos três tipos de eventos.
Para mais informações, consulte Tipos de solicitação de recursos personalizados.
Entenda como o CloudFormation identifica e substitui recursos
Quando uma atualização substitui um recurso físico, o CloudFormation compara o PhysicalResourceID que sua função do Lambda retorna para o PhysicalResourceID anterior. Se os IDs forem diferentes, o CloudFormation presumirá que o recurso foi substituído por um novo recurso físico.
No entanto, para permitir possíveis reversões, o CloudFormation não remove o recurso antigo. Quando a atualização da pilha é concluída, o CloudFormation envia uma solicitação de evento Excluir com o ID físico antigo como identificador. Se a atualização da pilha falhar e ocorrer uma reversão, então o CloudFormation envia o novo ID físico no evento Excluir.
Use PhysicalResourceId para identificar recursos de forma exclusiva para que, quando sua função receber um evento Excluir, ela exclua somente os recursos corretos durante uma substituição.
Projete suas funções com idempotência
É possível repetir uma função idempotente várias vezes com as mesmas entradas, e o resultado é o mesmo que fazer isso apenas uma vez. A idempotência garante que novas tentativas, atualizações e reversões não criem recursos duplicados nem introduzam erros.
Por exemplo, o CloudFormation invoca sua função para criar um recurso, mas não recebe uma resposta de que o recurso foi criado com sucesso. O CloudFormation pode invocar a função novamente e criar um segundo recurso. O primeiro recurso pode então ficar órfão.
Implemente seus manipuladores para lidar corretamente com as reversões
Quando uma operação de pilha falha, o CloudFormation tenta retornar todos os recursos ao estado anterior. Esta ação resulta em comportamentos diferentes, dependendo se a atualização causou uma substituição de recursos.
Para garantir que o CloudFormation possa concluir as reversões, execute as seguintes ações:
Informações relacionadas
Crie uma lógica de provisionamento personalizada com recursos personalizados