Solución de problemas de AWS CloudFormation StackSets - AWS CloudFormation

Solución de problemas de AWS CloudFormation StackSets

Este tema contiene algunos problemas habituales relacionados con AWS CloudFormation StackSets y las soluciones sugeridas.

Motivos comunes para el fallo en una operación de la pila

Problema: se produjo un error en una operación de la pila, y el estado de la instancia de la pila es OUTDATED.

Causa: puede haber varias causas comunes para el error en la operación de la pila.

  • Permisos insuficientes en una cuenta de destino para la creación de recursos que se especifican en la plantilla.

  • La plantilla de AWS CloudFormation podría tener errores. Valide la plantilla en AWS CloudFormation y arregle los errores antes de intentar crear el conjunto de pilas.

  • La plantilla podría intentar crear recursos globales que debe ser únicos pero no lo son, como los buckets de S3.

  • Un número de cuenta de destino especificado no existe. Compruebe los números de cuenta de destino que ha especificado en la página Set deployment options (Establecer opciones de implementación) del asistente.

  • La cuenta de administrador no tiene una relación de confianza con la cuenta de destino.

  • El número máximo de un recurso que se especifica en la plantilla ya existe en su cuenta de destino. Por ejemplo, es posible que haya alcanzado el límite de roles de IAM permitidos en una cuenta de destino, pero la plantilla crea más roles de IAM.

  • Ha alcanzado el número máximo de pilas permitidas en un conjunto de pilas. Consulte Límites de AWS CloudFormation para ver el número máximo de pilas por conjunto de pilas.

Solución: para obtener más información acerca de los permisos necesarios de las cuentas de administrador y de destino antes de poder crear conjuntos de pilas, consulte Configuración de permisos básicos para operaciones con conjuntos de pilas.

Reintento de operaciones fallidas de creación o actualización de pilas

Problema: se produjo un error al crear o actualizar una pila, y el estado de la instancia de la pila es OUTDATED. Para solucionar el error de creación o actualización de una pila, abra la consola de AWS CloudFormation y vea los eventos de la pila, que tendrán un estado de DELETED (para las operaciones de creación erróneas) o FAILED (para las operaciones de actualización erróneas). Examine los eventos de pila y busque la columna Status reason (Motivo del estado). El valor de Status reason (Motivo del estado) explica por qué se produjo un error en la operación de la pila.

Una vez corregida la causa del fallo de creación de la pila, y cuando esté listo para reintentar la creación de la pila, siga estos pasos.

Solución: realice los siguientes pasos para reintentar la operación de la pila.

  1. En la consola, seleccione el conjunto de pilas que contiene la pila en la que la operación ha fallado.

  2. En el menú Actions (Acciones), elija Edit StackSet details (Editar detalles de StackSet) para volver a intentar la creación o actualización de pilas.

  3. En la página Specify template (Especificar plantilla) para utilizar la misma plantilla de AWS CloudFormation, mantenga la opción predeterminada, Use current template (Usar plantilla actual). Si la operación de la pila ha generado un error porque la plantilla requería cambios, y desea cargar una plantilla revisada, elija Upload a template to Amazon S3 (Cargar una plantilla en Amazon S3) en su lugar y, a continuación, elija Browse (Explorar) para seleccionar la plantilla actualizada. Cuando haya terminado de cargar la plantilla revisada, elija Next (Siguiente).

  4. En la página Specify details (Especificar detalles), si no va a cambiar ninguno de los parámetros que son específicos de la plantilla, elija Next (Siguiente).

  5. En la página Set deployment options (Establecer opciones de implementación), cambie los valores predeterminados de Maximum concurrent accounts (Número máximo de cuentas simultáneas) y Failure tolerance (Tolerancia a errores), si lo desea. Para obtener más información sobre estas opciones, consulte Opciones de operaciones con conjuntos de pilas.

  6. En la página Review (Revisar), revise la selección y marque la casilla para reconocer las capacidades de IAM. Elija Enviar.

  7. Si la pila no se actualiza correctamente, repita este procedimiento, después de haber resuelto todos los problemas que impiden la creación de la pila.

No se puede eliminar una instancia de pila a causa de un error

Problema: se produce un error que evita la eliminación de una instancia de pila.

Causa: ninguna pila con protección de terminación de pilas habilitada se podrá eliminar.

Solución: determine si se ha habilitado la protección de terminación en la pila. Si está habilitada, deshabilítela y, a continuación, intente realizar la operación de eliminación de la instancia de pila de nuevo.

Error en la operación de importación de pila

Problema: una operación de importación de pilas no permite importar pilas existentes en conjuntos de pilas nuevos o existentes. El estado de la instancia de pila es INOPERABLE.

Solución: para restaurar la operación de importación de la pila, lleve a cabo las siguientes tareas.

  1. Use la opción Eliminar pilas de StackSets y habilite RetainStacks durante la configuración y, a continuación, proceda a eliminar las instancias de pila del conjunto de pilas. Para obtener más información, consulte Eliminación de instancias de pila del conjunto de pilas.

  2. Verá que la instancia de pila del conjunto de pilas se actualiza para eliminar la instancia de pila INOPERABLE.

  3. Corrija las instancias de la pila según el error de importación y vuelva a intentar la operación de importación de la pila.

Recuento de fallos de instancias de pila para las operaciones de StackSets

El recuento de fallos de las instancias de la pila notifica si las instancias de las pilas no se aprovisionan o actualizan. Estas instancias de pila no se implementaron por uno o más de los siguientes motivos:

  • Recursos existentes con una configuración similar

  • Falta de dependencias, como los roles de AWS Identity and Access Management (IAM)

  • Otros factores en conflicto

Si desea implementar con la máxima simultaneidad, el recuento máximo de simultaneidad es uno más que el recuento de tolerancia a fallos, como máximo. Por ejemplo, si el recuento de tolerancia a fallos es 9, el recuento máximo de simultaneidad no puede ser superior a 10. Esto hará que la operación devuelva SUCCEEDED, incluso si algunas instancias de la pila no se actualizan. El nuevo recuento de fallos de instancias de pila le permite determinar si la operación solo se realizó correctamente de forma condicional, ya que el recuento de tolerancia a fallos está configurado para permitir todos los fallos.

Puede utilizar la AWS Management Console, el AWS SDK o la AWS CLI para obtener el recuento de fallos y filtrar las instancias de la pila para determinar qué instancias deben reimplementarse.

Uso de la consola

Para visualizar la cantidad de instancias de pila fallidas:
  1. Abra la consola de AWS CloudFormation y elija StackSets.

  2. Elija su StackSet y luego elija la pestaña Operations (Operaciones).

  3. Elija un estado en la columna Status (Estado) para visualizar los detalles del estado. Encontrará la cantidad de instancias de pila fallidas para una operación particular en los detalles del estado.

Para ver la cuenta, la región y el estado de las instancias de pila de la operación:
  1. En los detalles del estado, elija el recuento de instancias de pila fallidas. Ejemplo: Instancias de pila: <number of failed stack instances>.

  2. Amplíe el panel lateral mediante la selección del encabezado del panel. Los resultados del panel lateral son los estados de las instancias de la pila después de completar la operación seleccionada.

Para ver los detalles de la instancia de pila actual de una operación:
  1. Elija la pestaña Stack Instances (Instancias de la pila).

  2. Filtre por Last operation ID (ID de última operación). Los resultados son los estados actuales y los motivos de estado de la última operación que modificó la instancia. Puede usar este filtro junto con Cuenta de AWS, Región de AWS, Estado detallado y Estado de desviación para refinar aún más los resultados de búsqueda.

Utilización del AWS CLI

Para obtener la cantidad de instancias de pila fallidas, haga una llamada a describe-stack-set-operation o list-stack-set-operations y consulte StatusDetails.

$ aws cloudformation describe-stack-set-operation --stack-set-name ss1 \ --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60
{ "StackSetOperation": { "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60", "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Action": "CREATE", "Status": "SUCCEEDED", "OperationPreferences": { "RegionOrder": [], "FailureToleranceCount": 10, "MaxConcurrentCount": 10 }, "AdministrationRoleARN": "arn:aws:iam::123456789012:role/AWSCloudFormationStackSetAdministrationRole", "ExecutionRoleName": "AWSCloudFormationStackSetExecutionRole", "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00", "EndTimestamp": "2022-10-26T17:19:35.304000+00:00", "StatusDetails": { "FailedStackInstancesCount": 3 } } }
aws cloudformation list-stack-set-operations --stack-set-name ss1
{ "Summaries": [ { "OperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60", "Action": "CREATE", "Status": "SUCCEEDED", "CreationTimestamp": "2022-10-26T17:18:53.947000+00:00", "EndTimestamp": "2022-10-26T17:19:35.304000+00:00", "StatusDetails": { "FailedStackInstancesCount": 3 }, "OperationPreferences": { "RegionOrder": [], "FailureToleranceCount": 10, "MaxConcurrentCount": 10 } } ] }

Para obtener una descripción general del historial de una operación en particular, utilice list-stack-set-operation-results para ver el estado y el motivo del estado de cada instancia de pila cuando la operación esté completada. Consulte el siguiente ejemplo para ver el Status y el StatusReason.

aws cloudformation list-stack-set-operation-results --stack-set-name ss1 --operation-id 5550e62f-c822-4331-88fa-21c1d7bafc60 --filters Name=OPERATION_RESULT_STATUS,Values=FAILED
{ "Summaries": [ { "Account": "123456789012", "Region": "us-west-2", "Status": "FAILED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "AccountGateResult": { "Status": "SKIPPED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'." }, "OrganizationalUnitId": "" }, { "Account": "123456789012", "Region": "us-west-1", "Status": "FAILED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "AccountGateResult": { "Status": "SKIPPED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'." }, "OrganizationalUnitId": "" }, { "Account": "123456789012", "Region": "us-east-1", "Status": "FAILED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "AccountGateResult": { "Status": "SKIPPED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'." }, "OrganizationalUnitId": "" } ] }

Utilice list-stack-instances con los filtros DETAILED_STATUS y LAST_OPERATION_ID para obtener una lista de las instancias de pila que fallaron en la última operación que intentó implementar la instancia de pila. Observe la marca --filters en el ejemplo con DETAILED_STATUS y LAST_OPERATION_ID:

aws cloudformation list-stack-instances --stack-set-name ss1 --filters Name=DETAILED_STATUS,Values=FAILED Name=LAST_OPERATION_ID,Values=5550e62f-c822-4331-88fa-21c1d7bafc60
{ "Summaries": [ { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-east-1", "Account": "123456789012", "Status": "OUTDATED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" }, { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-west-1", "Account": "123456789012", "Status": "OUTDATED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" }, { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-west-2", "Account": "123456789012", "Status": "OUTDATED", "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" } ] }

A fin de encontrar el ID de la última operación para modificar una instancia de pila, use list-stack-instances o describe-stack-instance para obtener LastOperationId:

aws cloudformation describe-stack-instance --stack-set-name ss1 --stack-instance-account 123456789012 --stack-instance-region us-east-2
{ "StackInstance": { "StackSetId": "ss1:9101ca57-49fc-4a61-a5a6-4c97b8adb08f", "Region": "us-west-2", "Account": "123456789012", "ParameterOverrides": [], "Status": "OUTDATED", "StackInstanceStatus": { "DetailedStatus": "FAILED" }, "StatusReason": "Account 123456789012 should have 'AWSCloudFormationStackSetExecutionRole' role with trust relationship to Role 'AWSCloudFormationStackSetAdministrationRole'.", "OrganizationalUnitId": "", "DriftStatus": "NOT_CHECKED", "LastOperationId": "5550e62f-c822-4331-88fa-21c1d7bafc60" } }