Stack failure options (Opções de falha da pilha) - AWS CloudFormation

Stack failure options (Opções de falha da pilha)

Você pode desenvolver suas aplicações de maneira iterativa quando falhas de provisionamento são detectadas, iniciando desde o ponto de falha sem precisar reverter os recursos provisionados com êxito. Especificando opções de falha de pilha, você pode solucionar problemas de recursos em um status CREATE_FAILED ou UPDATE_FAILED. É possível especificar opções de falha de provisionamento de todas as implantações de pilha e operações de conjunto de alterações.

  • Operações de criação definidas como Preserve successfully provisioned resources (Preservar recursos provisionados com sucesso) preservam o estado dos recursos bem-sucedidos, enquanto os recursos com falha permanecerão em um estado de falha até que a próxima operação de atualização seja realizada.

  • Operações de atualização e conjunto de alterações definidas como Preserve successfully provisioned resources (Preservar recursos provisionados com sucesso) preservam o estado dos recursos bem-sucedidos e revertem os recursos com falha para o ú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.

Consulte as seções a seguir para obter mais detalhes sobre como pausar a reversão de recursos com falha:

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 AWS 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 para pausar a reversão de pilhas

Para pausar a reversão de recursos com falha na sua pilha, as seguintes condições precisam ser atendidas.

  • Você deve especificar o parâmetro Preserve successfully provisioned resources (Preservar recursos provisionados com êxito) durante uma operação de pilha. Para obter mais informações sobre o comportamento de reversão, consulte Configurar opções de pilha do AWS CloudFormation.

  • Uma operação de pilha deve ter um status de pilha de CREATE_FAILED ou UPDATE_FAILED. Para obter informações sobre o status da pilha, consulte Códigos de status da pilha.

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 no Application 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 Application 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://DOC-EXAMPLE-BUCKET.json --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 DOC-EXAMPLE-BUCKET.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.

    { "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": "MyBucket", "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 a pilha

Para reverter uma pilha do status CREATE_FAILED ou UPDATE_FAILED

Use o comando rollback-stack para reverter uma pilha ao seu último estado estável.

  • Inicie uma reversão com o comando rollback-stack e especifique o nome da pilha.

    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.