

# Elija cómo gestionar los errores al aprovisionar recursos
<a name="stack-failure-options"></a>

Si se produce un error en la operación de la pila, no tendrá que restaurar los recursos que ya se habían aprovisionado correctamente y volver a empezar desde el principio cada vez. En su lugar, puede solucionar los problemas de los recursos en un estado `UPDATE_FAILED` o `CREATE_FAILED` y, a continuación, reanudar el aprovisionamiento desde el punto en el que se produjo el problema. 

Para ello, debe activar la opción para conservar los recursos aprovisionados correctamente. Esta opción está disponible para todas las implementaciones de pilas y operaciones de conjuntos de cambios.
+ Para crear pilas, si elige la opción **Conservar los recursos aprovisionados correctamente**, CloudFormation conserva el estado de los recursos que se crearon correctamente y deja los con errores 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 **Conservar los recursos aprovisionados correctamente** mantiene el estado de los recursos satisfactorios 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.

**Topics**
+ [Descripción general de las opciones de errores de pila](#stack-failure-options-overview)
+ [Condiciones necesarias para pausar la reversión de la pila](#stack-failure-options-conditions)
+ [Conservar los recursos aprovisionados correctamente (consola)](#stack-failure-options-console)
+ [Conservar los recursos aprovisionados correctamente (AWS CLI)](#stack-failure-options-cli)

## Descripción general de las opciones de errores de pila
<a name="stack-failure-options-overview"></a>

Antes de emitir una operación desde la consola de 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 necesarias para pausar la reversión de la pila
<a name="stack-failure-options-conditions"></a>

Para evitar que CloudFormation reversione y elimine de forma automática los recursos que se crearon correctamente, deben cumplirse las siguientes condiciones.

1. Al crear o actualizar la pila, debe elegir la opción **Conservar los recursos aprovisionados correctamente**. Esto le indica a CloudFormation que no elimine los recursos que se crearon correctamente, incluso si se produce un error en la operación general de la pila.

1. La operación de apilamiento debe haber fallado, lo que significa que el estado de la pila es `CREATE_FAILED` o `UPDATE_FAILED`.

**nota**  
No se admiten los tipos de actualización inmutables.

## Conservar los recursos aprovisionados correctamente (consola)
<a name="stack-failure-options-console"></a>

------
#### [ Create stack ]

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

1. Inicie sesión en la Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. En la página **Pilas**, seleccione **Crear pila** en la parte superior derecha y, a continuación, seleccione **Con recursos nuevos (estándar)**.

1. En **Requisito previo: preparar la plantilla**, elija **Seleccione una plantilla existente**.

1. En **Especificar plantilla**, elija especificar la dirección URL del bucket de S3 que contiene la plantilla de pila o cargar un archivo de plantilla de pila. A continuación, elija **Siguiente**.

1. 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).

1. 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.

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

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

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

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

1. 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 Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

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

1. En la página **Update stack** (Actualizar pila), elija una plantilla de pila utilizando una de las siguientes opciones:
   + **Usar plantilla existente**
   + **Replace current template (Reemplazar la plantilla actual**
   + **Editar la plantilla en Infrastructure Composer**

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

1. 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.

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

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

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

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

1. 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 Consola de administración de AWS y abra la consola de CloudFormation en [https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/).

1. 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).

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

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

1. 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)
<a name="stack-failure-options-cli"></a>

------
#### [ 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](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/create-stack.html).

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://template.yaml \
       --disable-rollback
   ```

   El comando devuelve el siguiente resultado:

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

1. 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 https://s3.amazonaws.com/amzn-s3-demo-bucket/updated.template --disable-rollback
   ```

   El comando devuelve el resultado siguiente.

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

1. 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](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/execute-change-set.html).

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"
   }
   ```

1. 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
   ```

1. Determine el estado de la pila mediante el comando **describe-stacks** o **describe-stack-events**.

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

   El comando devuelve el resultado siguiente.

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

1. 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"
   }
   ```

1. 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
<a name="roll-back-stack-cli"></a>

Puede usar el comando [rollback-stack](https://docs.aws.amazon.com/cli/latest/reference/cloudformation/rollback-stack.html) para restaurar una pila con un estado de pila `UPDATE_FAILED` o `CREATE_FAILED` a su último estado estable.

El siguiente comando **rollback-stack** revierte la pila especificada.

```
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.