Minha implantação do AWS CodeDeploy atinge o tempo limite e retorna o seguinte erro: “A implantação atingiu o tempo limite enquanto aguardava um retorno de chamada de status. O CodeDeploy espera um retorno de chamada de status dentro de uma hora após a invocação de um gancho de implantação.”
Breve descrição
Esse problema pode ocorrer quando você usa CodeDeploy para implantar um serviço do Amazon Elastic Container Service (Amazon ECS) com um teste de validação.
Se o teste não retornar uma resposta de Bem-sucedido ou Com falha até 60 minutos depois que um gancho de eventos do ciclo de vida é invocado, CodeDeploy retornará o seguinte erro:
“A implantação atingiu o tempo limite enquanto aguardava um retorno de chamada de status. O CodeDeploy espera um retorno de chamada de status dentro de uma hora após a invocação de um gancho de implantação.”
Observação: o tempo limite padrão para o retorno de chamada de status da função do AWS Lambda do gancho do ciclo de vida é de 60 minutos.
Para resolver o erro, verifique se a função do Lambda do gancho do ciclo de vida tem o método necessário e as permissões do AWS Identity and Access Management (IAM).
Solução
Confirme a causa do erro examinando o CloudWatch Logs
Para obter instruções, consulte Como posso recuperar dados de log do Amazon CloudWatch Logs?
Verifique se a função do Lambda do gancho do ciclo de vida tem as permissões do IAM necessárias
Verifique se a função do Lambda do hook do ciclo de vida tem uma função de execução que inclui a seguinte permissão: PutLifecycleEventHookExecutionStatus.
Observação: a permissão PutLifecycleEventHookExecutionStatus não está incluída por padrão na política do IAM CodeDeployFullAccess gerenciada pela AWS.
Veja a seguir o exemplo de uma instrução de permissões PutLifecycleEventHookExecutionStatus:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "codedeploy:PutLifecycleEventHookExecutionStatus",
"Resource": "*"
}
]
}
Verifique se a função do Lambda do gancho do ciclo de vida inclui o método necessário para retornar uma resposta de status para CodeDeploy
Verifique se a função do Lambda do gancho do ciclo de vida inclui o método putLifecycleEventHookExecutionStatus.
Para obter mais informações, consulte a Etapa 3: Criar uma função do Lambda do gancho do ciclo de vida no Guia do usuário do CodeDeploy.
Veja a seguir o exemplo de um método putLifecycleEventHookExecutionStatus para obter uma função do Lambda do gancho do ciclo de vida:
codedeploy.putLifecycleEventHookExecutionStatus(params, function(err, data) {
if (err) {
// Validation failed.
console.log('AfterAllowTestTraffic validation tests failed');
console.log(err, err.stack);
callback("CodeDeploy Status update failed");
} else {
// Validation succeeded.
console.log("AfterAllowTestTraffic validation tests succeeded");callback(null, "AfterAllowTestTraffic validation tests succeeded");
}