Escolha como lidar com falhas ao provisionar recursos - AWS CloudFormation

Escolha como lidar com falhas ao provisionar recursos

Se sua operação de pilha falhar, você não precisará reverter recursos que já foram provisionados com sucesso e recomeçar do início todas as vezes. Em vez disso, você pode solucionar problemas de recursos em um status CREATE_FAILED ou UPDATE_FAILED e, em seguida, retomar o provisionamento a partir do ponto em que o problema ocorreu.

Para fazer isso, é necessário habilitar a opção preservar recursos provisionados com êxito. Essa opção está disponível para todas as implementações de pilha e operações de conjunto de alterações.

  • Para criar uma pilha, se você escolher a opção Preservar recursos provisionados com sucesso, o CloudFormation preservará o estado dos recursos que foram criados com sucesso e deixará os recursos com falha até que a próxima operação de atualização seja realizada.

  • Durante as operações de atualização e de conjunto de alterações, a opção Preservar recursos provisionados com êxito preserva o estado dos recursos bem-sucedidos e reverte os recursos com falha para seu último estado estável conhecido. Os recursos com falha estarão em um estado de UPDATE_FAILED. Os recursos sem um último estado estável conhecido serão excluídos na próxima operação de pilha.

Visão geral de opções de falha de pilhas

Antes de emitir uma operação usando o console, a API ou a AWS CLI do CloudFormation, especifique o comportamento caso ocorra falha do recurso provisionado. Em seguida, prossiga com o processo de implantação dos seus recursos sem outras modificações. No caso de uma falha operacional, o CloudFormation interrompe na primeira falha em cada caminho de provisionamento independente. O CloudFormation identifica dependências entre recursos a fim de paralelizar ações de provisionamento independentes. Em seguida, continua a provisionar recursos em cada caminho de provisionamento independente até se deparar com uma falha. Uma falha em um caminho não afeta os demais caminhos de provisionamento. O CloudFormation continuará a provisionar os recursos até a conclusão ou até interromper em uma falha diferente.

Corrija todos os problemas para dar continuidade ao processo de implantação. O CloudFormation faz as atualizações necessárias antes de tentar novamente as ações de provisionamento em recursos que não puderam ser provisionados com êxito antes. Solucione problemas enviando operações Retry (Tentar novamente), Update (Atualizar) ou Roll back (Reverter). Por exemplo, se estiver provisionando uma instância do Amazon EC2 e ela falhar durante uma operação de criação, talvez você queira investigar o erro em vez de reverter o recurso com falha imediatamente. É possível revisar as verificações de status do sistema e as verificações de status de instâncias e, em seguida, selecionar a operação Retry (Tentar novamente) assim que os problemas forem resolvidos.

Quando uma operação de pilha falha e você especifica Preserve successfully provisioned resources (Preservar recursos provisionados com êxito) no menu Stack failure options (Opções de falha da pilha), é possível selecionar as seguintes opções.

  • Retry ()Tentar novamente: repete a operação de provisionamento em recursos com falha e continua provisionando o modelo até a conclusão bem-sucedida da operação da pilha ou até a próxima falha. Selecione essa opção se o provisionamento do recurso tiver falhado devido a um problema que não requer modificações no modelo, como uma permissão do AWS Identity and Access Management (IAM).

  • Update (Atualizar): os recursos que foram provisionados são atualizados em atualizações de modelos. Os recursos que não tiverem sido criados ou atualizados serão repetidos. Selecione essa opção se o provisionamento do recurso tiver falhado devido a erros de modelo, e você tiver modificado o modelo. Ao atualizar uma pilha em estado FAILED, você deve selecionar Preserve successfully provisioned resources (Preservar recursos provisionados com êxito) em Stack failure options (Opções de falha da pilha) para continuar atualizando sua pilha.

  • Roll back (Reverter): o CloudFormation reverte a pilha ao último estado estável conhecido.

Condições necessárias para pausar a reversão da pilha

Para impedir que o CloudFormation reverta e exclua automaticamente recursos que foram criados com êxito, as seguintes condições precisam ser atendidas.

  1. Ao criar ou atualizar a pilha, você deve escolher a opção Preservar recursos provisionados com sucesso. Isso faz com que o CloudFormation não exclua os recursos que foram criados com sucesso, mesmo que a operação geral da pilha falhe.

  2. A operação da pilha deve ter falhado, o que significa que o status da pilha é CREATE_FAILED ou UPDATE_FAILED.

nota

Não há suporte para tipos de atualização imutáveis.

Preservar recursos provisionados com êxito (console)

Create stack
Para preservar recursos provisionados com êxito durante uma operação de criação de pilha
  1. Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Selecione Create stack (Criar pilha) e depois With new resources (standard) (Com novos recursos, padrão).

  3. Na página Specify template (Especificar modelo), escolha um modelo de pilha usando uma das seguintes opções:

    • Template is ready (O modelo está pronto)

    • Use a sample template (Usar um modelo de amostra)

    • Criar com o Infrastructure Composer

    Aceite suas configurações e selecione Next (Próximo).

  4. Na página Specify stack details (Especificar detalhes da pilha), insira o nome de uma pilha na caixa Stack name (Nome da pilha).

  5. Na seção Parameters (Parâmetros), especifique os parâmetros que são definidos no seu modelo da pilha.

    Você pode usar ou alterar todos os parâmetros com valores padrão.

  6. Quando estiver satisfeito com os valores dos parâmetros, escolha Next (Próximo).

  7. Na página Configure stack options (Configurar opções de pilha), é possível definir opções adicionais para a pilha.

  8. Em Stack failure options (Opções de falha da pilha), selecione Preserve successfully provisioned resources (Preservar recursos provisionados com êxito).

  9. Quando estiver satisfeito com as opções da pilha, escolha Next (Próximo).

  10. Revise sua pilha na página Review (Revisar) e selecione Create stack (Criar pilha).

Resultados: os recursos com falha na criação farão com que o status da pilha mude para CREATE_FAILED, a fim de evitar que esta seja revertida quando a operação de pilha se deparar com uma falha. Os recursos provisionados com êxito estão em um estado CREATE_COMPLETE. É possível monitorar a pilha na guia Stack events (Eventos da pilha).

Update stack
Para preservar recursos provisionados com êxito durante uma operação de atualização de pilha
  1. Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Selecione a pilha que você deseja atualizar e escolha Udpate (Atualizar).

  3. Na página Update stack (Atualizar pilha), escolha um modelo de pilha usando uma das seguintes opções:

    • Use current template (Usar modelo atual)

    • Replace current template (Substituir modelo atual)

    • Editar modelo no Infrastructure Composer

    Aceite suas configurações e selecione Next (Próximo).

  4. Na página Specify stack details (Especificar detalhes da pilha), especifique os parâmetros que estão definidos no modelo da pilha.

    Você pode usar ou alterar todos os parâmetros com valores padrão.

  5. Quando estiver satisfeito com os valores dos parâmetros, escolha Next (Próximo).

  6. Na página Configure stack options (Configurar opções de pilha), é possível definir opções adicionais para a pilha.

  7. Para Behavior on provisioning failure (Comportamento na falha de provisionamento), selecione Preserve successfully provisioned resources (Preservar recursos provisionados com êxito).

  8. Quando estiver satisfeito com as opções da pilha, escolha Next (Próximo).

  9. Revise sua pilha na página Review (Revisar) e selecione Update stack (Atualizar pilha).

Resultados: os recursos com falha na atualização farão com que o status da pilha mude para UPDATE_FAILED e reverterá a pilha para o último estado estável conhecido. Os recursos sem um último estado estável conhecido serão excluídos pelo CloudFormation na próxima operação de pilha. Os recursos provisionados com êxito estão em um estado CREATE_COMPLETE ou UPDATE_COMPLETE. É possível monitorar a pilha na guia Stack events (Eventos da pilha).

Change set
nota

É possível iniciar um conjunto de alterações para uma pilha com um status de CREATE_FAILED ou UPDATE_FAILED, mas não para um status de UPDATE_ROLLBACK_FAILED.

Para preservar recursos provisionados com êxito durante uma operação de conjunto de alterações
  1. Faça login no AWS Management Console e abra o console AWS CloudFormation em https://console.aws.amazon.com/cloudformation.

  2. Selecione a pilha que contém o conjunto de alterações que você deseja iniciar e depois escolha a guia Change sets (Conjuntos de alterações).

  3. Selecione o conjunto de alterações e escolha Execute (Executar).

  4. Para Execute change set (Executar conjunto de alterações), selecione a opção Preserve successfully provisioned resources (Preservar recursos provisionados com êxito).

  5. Selecione Execute change set (Executar conjunto de alterações).

Resultados: os recursos com falha na atualização farão com que o status da pilha mude para UPDATE_FAILED e reverterá a pilha para o último estado estável conhecido. Os recursos sem um último estado estável conhecido serão excluídos pelo CloudFormation na próxima operação de pilha. Os recursos provisionados com êxito estão em um estado CREATE_COMPLETE ou UPDATE_COMPLETE. É possível monitorar a pilha na guia Stack events (Eventos da pilha).

Preservar recursos provisionados com êxito (AWS CLI)

Create stack
Para preservar recursos provisionados com êxito durante uma operação de criação de pilha

Especifique a opção --disable-rollback ou a enumeração on-failure DO_NOTHING durante uma operação create-stack.

  1. Forneça um nome de pilha e um modelo para o comando create-stack com a opção --disable-rollback.

    aws cloudformation create-stack --stack-name myteststack \ --template-body file://template.yaml \ --disable-rollback

    O comando retorna a seguinte saída.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Descreva o estado da pilha usando o comando describe-stacks.

    aws cloudformation describe-stacks --stack-name myteststack

    O comando retorna a seguinte saída.

    {     "Stacks":  [         {             "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",             "Description": "AWS CloudFormation Sample Template",             "Tags": [],             "Outputs": [],             "StackStatusReason": “The following resource(s) failed to create: [MyBucket]”,             "CreationTime": "2013-08-23T01:02:15.422Z",             "Capabilities": [],             "StackName": "myteststack",             "StackStatus": "CREATE_FAILED",             "DisableRollback": true         }     ] }
Update stack
Para preservar com êxito os recursos provisionados durante uma operação de atualização de pilha
  1. Forneça um nome de pilha existente e um modelo para o comando update-stack com a opção --disable-rollback.

    aws cloudformation update-stack --stack-name myteststack \ --template-url https://s3.amazonaws.com/amzn-s3-demo-bucket/updated.template --disable-rollback

    O comando retorna a seguinte saída.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Descreva o estado da pilha usando o comando describe-stacks ou describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    O comando retorna a seguinte saída.

    { "Stacks":  [         {             "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",             "Description": "AWS CloudFormation Sample Template",             "Tags": [],             "Outputs": [],             "CreationTime": "2013-08-23T01:02:15.422Z",             "Capabilities": [],             "StackName": "myteststack",             "StackStatus": "UPDATE_COMPLETE",             "DisableRollback": true         }     ] }
Change set
nota

É possível iniciar um conjunto de alterações para uma pilha com um status de CREATE_FAILED ou UPDATE_FAILED, mas não para um status de UPDATE_ROLLBACK_FAILED.

Para preservar recursos provisionados com êxito durante uma operação de conjunto de alterações

Especifique a opção --disable-rollback durante uma operação execute-change-set.

  1. Forneça um nome de pilha e um modelo para o comando execute-change-set com a opção --disable-rollback.

    aws cloudformation execute-change-set --stack-name myteststack \ --change-set-name my-change-set --template-body file://template.yaml

    O comando retorna a seguinte saída.

    {  "Id": "arn:aws:cloudformation:us-east-1:123456789012:changeSet/my-change-set/bc9555ba-a949-xmpl-bfb8-f41d04ec5784",  "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  2. Inicie o conjunto de alterações com a opção --disable-rollback.

    aws cloudformation execute-change-set --stack-name myteststack \ --change-set-name my-change-set -–disable-rollback
  3. Determine o status da pilha usando o comando describe-stacks ou describe-stack-events.

    aws cloudformation describe-stack-events --stack-name myteststack

    O comando retorna a seguinte saída.

    { "StackEvents": [ { "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896", "EventId": "49c966a0-7b74-11ea-8071-024244bb0672", "StackName": "myteststack", "LogicalResourceId": " MyBucket", "PhysicalResourceId": "myteststack-MyBucket-abcdefghijk1", "ResourceType": "AWS::S3::Bucket", "Timestamp": "2020-04-10T21:43:17.015Z", "ResourceStatus": "UPDATE_FAILED" "ResourceStatusReason": "User XYZ is not allowed to perform S3::UpdateBucket on MyBucket" } }
  4. Corrija os erros de permissão e repita a operação.

    aws cloudformation update-stack --stack-name myteststack \ --use-previous-template --disable-rollback

    O comando retorna a seguinte saída.

    {     "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
  5. Descreva o estado da pilha usando o comando describe-stacks ou describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    O comando retorna a seguinte saída.

    {     "Stacks":  [         {             "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896",             "Description": "AWS CloudFormation Sample Template",             "Tags": [],             "Outputs": [],             "CreationTime": "2013-08-23T01:02:15.422Z",             "Capabilities": [],             "StackName": "myteststack",             "StackStatus": "UPDATE_COMPLETE",             "DisableRollback": true         }     ] }

Reverter uma pilha

É possível usar o comando rollback-stack para reverter uma pilha com um status de pilha CREATE_FAILED ou UPDATE_FAILED ao seu último estado estável.

O comando rollback-stack a seguir reverte a pilha especificada.

aws cloudformation rollback-stack --stack-name myteststack

O comando retorna a seguinte saída.

{ "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896" }
nota

A operação rollback-stack excluirá uma pilha se ela não contiver um último estado estável conhecido.