Opciones de error de pila - AWS CloudFormation

Opciones de error de pila

Puede desarrollar sus aplicaciones de forma iterativa cuando se producen errores de aprovisionamiento comenzando desde el punto en que se produjo el error sin deshacer los recursos que se aprovisionaron correctamente. Al especificar las opciones de error de pila, puede solucionar los problemas de los recursos con el estado CREATE_FAILED o UPDATE_FAILED. Puede aprovisionar opciones de error para todas las implementaciones de pilas y operaciones de conjuntos de cambios.

  • Crear operaciones establecidas en Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente) conserva el estado de los recursos correctos, mientras que los recursos con errores permanecerán en un estado con error hasta que se lleve a cabo la siguiente operación de actualización.

  • Actualizar y cambiar las operaciones de conjunto establecidas en Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente) preserva el estado de los recursos exitosos y, al mismo tiempo, reduce los recursos con errores al último estado estable conocido. El estado de los recursos con error será UPDATE_FAILED. Los recursos sin un último estado estable conocido se eliminarán en la siguiente operación de pila.

Consulte las siguientes secciones para obtener más detalles sobre cómo pausar la restauración de los recursos con errores:

Descripción general de las opciones de errores de pila

Antes de emitir una operación desde la consola de AWS CloudFormation, la API o la AWS CLI, especifique el comportamiento de los errores de recursos aprovisionados. A continuación, continúe con el proceso de implementación de sus recursos sin ninguna otra modificación. En caso de que se produzca un error operativo, CloudFormation se detiene en el primer error de cada ruta de aprovisionamiento independiente. CloudFormation identifica las dependencias entre los recursos para paralelizar acciones de aprovisionamiento independientes. A continuación, procede a aprovisionar recursos en cada ruta de aprovisionamiento independiente hasta que se produce un error. Un error en una ruta no afecta a otras rutas de aprovisionamiento. CloudFormation continuará aprovisionando los recursos hasta que se completen o se detengan en un error diferente.

Solucione cualquier problema para continuar con el proceso de implementación. CloudFormation lleva a cabo las actualizaciones necesarias antes de volver a intentar las acciones de aprovisionamiento en los recursos que no se pudieron aprovisionar correctamente antes. Para solucionar los problemas, envíe una operación Retry (Reintentar), Update (Actualizar) o Roll back (Restaurar). Por ejemplo, si va a aprovisionar una instancia de Amazon EC2 y se produce un error en la instancia de EC2 durante una operación de creación, es posible que desee investigar el error, en lugar de deshacer el recurso fallido de inmediato. Puede revisar las verificaciones de estado del sistema y las verificaciones de estado de las instancias y, a continuación, seleccionar la operación Retry (Reintentar) una vez que se resuelvan los problemas.

Cuando se produce un error en una operación de pila y se ha especificado Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente) en el menú Stack failure options (Opciones de error de pila), puede seleccionar las siguientes opciones.

  • Retry (Reintentar): reintenta la operación de aprovisionamiento en los recursos con errores y continúa aprovisionando la plantilla hasta que se complete correctamente la operación de pila o se produzca el siguiente error. Seleccione esta opción si el recurso no se ha podido aprovisionar debido a un problema que no requiere modificaciones en la plantilla, como un permiso de AWS Identity and Access Management (IAM).

  • Update (Actualizar): los recursos que se han aprovisionado se actualizan en las actualizaciones de la plantilla. Los recursos que no se hayan podido crear o actualizar se volverán a intentar. Seleccione esta opción si el recurso no se ha podido aprovisionar debido a errores de plantilla y ha modificado la plantilla. Cuando actualiza una pila cuyo estado es FAILED, debe seleccionar Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente) en Stack failure options (Opciones de error de pila) para seguir actualizando la pila.

  • Roll back (Restaurar): CloudFormation restaura la pila al último estado estable conocido.

Condiciones para detener la restauración de la pila

Para pausar la restauración de los recursos con errores de la pila, deben cumplirse las siguientes condiciones.

  • Debe especificar el parámetro Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente) durante una operación de apilamiento. Para obtener más información sobre el comportamiento de reversión, consulte Configuración de las opciones de pila de AWS CloudFormation.

  • Una operación de pila debe tener un estado de pila de CREATE_FAILED o UPDATE_FAILED. Para obtener más información acerca del estado de la pila, consulte Códigos de estado de pilas.

nota

No se admiten los tipos de actualización inmutables.

Conservar los recursos aprovisionados correctamente (consola)

Create stack
Para conservar los recursos aprovisionados correctamente durante una operación de creación de pila
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione Create stack (Crear pila) y seleccione With new resources (standard) (Con recursos nuevos [estándar]).

  3. En la página Specify Template (Especificar plantilla), elija una plantilla de pila utilizando una de las siguientes opciones:

    • Template is ready (La plantilla está lista)

    • Use a sample template (Usar una plantilla de muestra)

    • Creación desde Application Composer

    Acepte la configuración y seleccione Next (Siguiente).

  4. En la página Specify stack details (Especificar los detalles de la pila), ingrese un nombre de pila en el cuadro Stack name (Nombre de la pila).

  5. En la sección Parameters (Parámetros), especifique los parámetros que se definen en su plantilla de la pila.

    Puede utilizar o cambiar cualquier parámetro con valores predeterminados.

  6. Cuando esté satisfecho con los valores de los parámetros, elija Next (Siguiente).

  7. En la página Configure stack options (Configurar opciones de pila), puede configurar opciones adicionales para su pila.

  8. En Stack failure options (Opciones de error de pila), seleccione Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente).

  9. Cuando esté satisfecho con las opciones de pila, elija Next (Siguiente).

  10. Revise su pila en la página Review (Revisar) y seleccione Create stack (Crear pila).

Resultados: los recursos que no se pudieron crear hacen la transición del estado de la pila a CREATE_FAILED para evitar que la pila se restaure cuando se produce un error en la operación de pila. El estado de los recursos que se aprovisionan correctamente es CREATE_COMPLETE. Puede supervisar la pila en la pestaña Stack events (Eventos de la pila).

Update stack
Para conservar los recursos aprovisionados correctamente durante una operación de pila de actualizaciones
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione la pila que desea actualizar y, a continuación, Update (Actualizar).

  3. En la página Update stack (Actualizar pila), elija una plantilla de pila utilizando una de las siguientes opciones:

    • Use current template (Utilizar la plantilla actual)

    • Replace current template (Reemplazar la plantilla actual)

    • Edición de plantilla en Application Composer

    Acepte la configuración y seleccione Next (Siguiente).

  4. En la página Specify stack details (Especificar los detalles de la pila), especifique los parámetros que se definen en la plantilla de pila.

    Puede utilizar o cambiar cualquier parámetro con valores predeterminados.

  5. Cuando esté satisfecho con los valores de los parámetros, elija Next (Siguiente).

  6. En la página Configure stack options (Configurar opciones de pila), puede configurar opciones adicionales para su pila.

  7. Para el registro Behavior on provisioning failure (Comportamiento en caso de error de aprovisionamiento), seleccione Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente).

  8. Cuando esté satisfecho con las opciones de pila, elija Next (Siguiente).

  9. Revise su pila en la página Review (Revisar) y seleccione Update stack (Actualizar pila).

Resultados: los recursos que no se pudieron actualizar hacen la transición del estado de la pila a UPDATE_FAILED y se restauran al último estado estable conocido. CloudFormation eliminará los recursos sin un último estado estable conocido en la siguiente operación de pila. El estado de los recursos que se aprovisionan correctamente es CREATE_COMPLETE o UPDATE_COMPLETE. Puede supervisar la pila en la pestaña Stack events (Eventos de la pila).

Change set
nota

Puede iniciar un conjunto de cambios para una pila con un estado de CREATE_FAILED o UPDATE_FAILED, pero no con un estado de UPDATE_ROLLBACK_FAILED.

Para conservar los recursos aprovisionados correctamente durante una operación de conjunto de cambios
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Seleccione la pila que contenga el conjunto de cambios que desea iniciar y, a continuación, elija la pestaña Change sets (Conjuntos de cambios).

  3. Seleccione el conjunto de cambios y, a continuación, elija Execute (Ejecutar).

  4. Para Execute change set (Ejecutar conjunto de cambios), seleccione la opción Preserve successfully provisioned resources (Conservar los recursos aprovisionados correctamente).

  5. Seleccione Execute change set (Ejecutar conjunto de cambios).

Resultados: los recursos que no se pudieron actualizar hacen la transición del estado de la pila a UPDATE_FAILED y se restauran al último estado estable conocido. CloudFormation eliminará los recursos sin un último estado estable conocido en la siguiente operación de pila. El estado de los recursos que se aprovisionan correctamente es CREATE_COMPLETE o UPDATE_COMPLETE. Puede supervisar la pila en la pestaña Stack events (Eventos de la pila).

Conservar los recursos aprovisionados correctamente (AWS CLI)

Create stack
Para conservar los recursos aprovisionados correctamente durante una operación de creación de pila

Especifique la opción --disable-rollback o enumeración on-failure DO_NOTHING durante una operación create-stack.

  1. Proporcione un nombre de pila y una plantilla al comando create-stack con la opción --disable-rollback.

    aws cloudformation create-stack --stack-name myteststack --template-body file://DOC-EXAMPLE-BUCKET.json --disable-rollback

    El comando devuelve el siguiente resultado:

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  2. Describa el estado de la pila mediante el comando describe-stacks.

    aws cloudformation describe-stacks --stack-name myteststack

    El comando devuelve el resultado siguiente.

    {
        "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
Cómo preservar los recursos aprovisionados con éxito durante una operación de actualización de pila
  1. Proporcione un nombre de pila y una plantilla existentes al comando update-stack con la opción --disable-rollback.

    aws cloudformation update-stack --stack-name myteststack --template-url DOC-EXAMPLE-BUCKET.template --disable-rollback

    El comando devuelve el resultado siguiente.

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  2. Describa el estado de la pila mediante el comando describe-stacks o describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    El comando devuelve el resultado siguiente.

    {
        "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

Puede iniciar un conjunto de cambios para una pila con un estado de CREATE_FAILED o UPDATE_FAILED, pero no para un estado de UPDATE_ROLLBACK_FAILED.

Para conservar los recursos aprovisionados correctamente durante una operación de conjunto de cambios

Especifique la opción --disable-rollback durante una operación execute-change-set.

  1. Proporcione un nombre de pila y una plantilla al comando execute-change-set con la opción --disable-rollback.

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

    El comando devuelve el siguiente resultado:

    {
     "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 el conjunto de cambios con la opción --disable-rollback.

    aws cloudformation execute-change-set --stack-name myteststack --change-set-name my-change-set -–disable-rollback
  3. Determine el estado de la pila mediante el comando describe-stacks o 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 los errores de los permisos y vuelva a ejecutar la operación.

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

    El comando devuelve el resultado siguiente.

    {
        "StackId": "arn:aws:cloudformation:us-east-1:123456789012:stack/myteststack/466df9e0-0dff-08e3-8e2f-5088487c4896"
    }
  5. Describa el estado de la pila mediante el comando describe-stacks o describe-stack-events.

    aws cloudformation describe-stacks --stack-name myteststack

    El comando devuelve el resultado siguiente.

    {
        "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
            }
        ]
    }

Restauración de una pila

Para restaurar una pila del estado de pila CREATE_FAILED o UPDATE_FAILED

Utilice el comando rollback-stack para revertir una pila a su último estado estable.

  • Inicie una reversión con el comando rollback-stack y especifique el nombre de la pila.

    aws cloudformation rollback-stack --stack-name myteststack

    El comando devuelve el resultado siguiente.

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

La operación rollback-stack borrará una pila si no contiene un último estado estable conocido.