View a markdown version of this page

Automatice la eliminación de AWS CloudFormation pilas y recursos asociados - Recomendaciones de AWS

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Automatice la eliminación de AWS CloudFormation pilas y recursos asociados

SANDEEP SINGH y James Jacob, Amazon Web Services

Resumen

AWS CloudFormation es un servicio muy utilizado para gestionar la infraestructura como código (IaC) en la nube. Cuando los usa CloudFormation, administra los recursos relacionados como una sola unidad denominada pila. Puede crear, actualizar y eliminar una colección de recursos mediante la creación, actualización y eliminación de pilas.

A veces, ya no necesitas los recursos de una CloudFormation pila. Según los recursos y sus configuraciones, puede resultar complicado eliminar una pila y sus recursos asociados. En los sistemas de producción reales, las eliminaciones a veces fallan o tardan mucho tiempo debido a condiciones conflictivas o restricciones que CloudFormation no se pueden anular. Es posible que necesite realizar una planificación y ejecución cuidadosas para garantizar que todos los recursos se eliminen correctamente de manera eficiente y coherente. Este patrón describe cómo configurar un marco que le ayude a gestionar la eliminación de CloudFormation pilas que presentan las siguientes complejidades:

  • Recursos con protección contra eliminaciones: es posible que algunos recursos tengan habilitada la protección contra eliminaciones. Algunos ejemplos comunes son las tablas de Amazon DynamoDB y los buckets de Amazon Simple Storage Service (Amazon S3). La protección contra la eliminación impide la eliminación automática, como la eliminación automática. CloudFormation Si desea eliminar estos recursos, debe anular o deshabilitar temporalmente la protección contra eliminaciones de forma manual o programática. Debe evaluar detenidamente las implicaciones de eliminar estos recursos antes de continuar.

  • Recursos con políticas de retención: algunos recursos, como las claves AWS Key Management Service (AWS KMS) y los buckets de Amazon S3, pueden tener políticas de retención que especifiquen cuánto tiempo deben conservarse después de solicitar su eliminación. Debes tener en cuenta estas políticas en la estrategia de limpieza para garantizar el cumplimiento de las políticas de la organización y los requisitos normativos.

  • Eliminación retrasada de las funciones de Lambda asociadas a una VPC: la eliminación de una función de AWS Lambda adjunta a una nube privada virtual (VPC) puede tardar entre 5 y 40 minutos, en función de las múltiples dependencias interconectadas que intervienen en el proceso. Si desconecta la función de la VPC antes de eliminar la pila, puede reducir este retraso a menos de 1 minuto.

  • Recursos no creados directamente por CloudFormation: en algunos diseños de aplicaciones, los recursos pueden crearse fuera de la CloudFormation pila original, ya sea por la propia aplicación o por recursos aprovisionados a través de la pila. A continuación se muestran dos ejemplos:

    • CloudFormation podría aprovisionar una instancia de Amazon Elastic Compute Cloud (Amazon EC2) que ejecute un script de datos de usuario. A continuación, este script podría crear un parámetro de AWS Systems Manager para almacenar los datos relacionados con la aplicación. Este parámetro no se administra de forma completa CloudFormation.

    • CloudFormation podría aprovisionar una función Lambda que genere automáticamente un grupo de Amazon CloudWatch Logs para almacenar registros. Este grupo de registros no se administra mediante CloudFormation.

    Aunque estos recursos no los administra directamente CloudFormation, a menudo es necesario limpiarlos cuando se elimina la pila. Si no se administran, pueden quedar huérfanos y provocar un consumo innecesario de recursos.

Si bien estas barreras de protección pueden ser complejas, recuerde que son intencionales e imprescindibles. CloudFormation Permitir anular todas las restricciones y eliminar los recursos de forma indiscriminada podría tener consecuencias perjudiciales e imprevistas en muchos escenarios. Sin embargo, como ingeniero de nube responsable de administrar el entorno, hay ocasiones en las que puede ser necesario anular estas restricciones, especialmente en los entornos de desarrollo, pruebas DevOps o puesta en escena.

Resultados empresariales específicos

La implementación de este marco de trabajo proporciona los siguientes beneficios:

  • Gestión de costes: la limpieza regular y eficiente de los entornos temporales, como end-to-end los entornos de pruebas de aceptación por parte de los usuarios, ayuda a evitar que los recursos se agoten durante más tiempo del necesario. Esto puede reducir considerablemente los costos.

  • Seguridad: la limpieza automática de los recursos obsoletos o no utilizados reduce la superficie de ataque y ayuda a mantener un entorno seguro. AWS

  • Eficiencia operativa: la limpieza periódica y automatizada puede proporcionar los siguientes beneficios operativos:

    • Los scripts automatizados que eliminan grupos de registros antiguos o depósitos vacíos de Amazon S3 pueden mejorar la eficiencia operativa al mantener el entorno limpio y manejable.

    • Eliminar y volver a crear pilas con rapidez permite una iteración rápida para el diseño y la implementación, lo que puede conducir a una arquitectura más sólida y resiliente.

    • Eliminar y reconstruir entornos con regularidad puede ayudarle a identificar y solucionar posibles problemas. Gracias a esto, puede garantizar que la infraestructura pueda soportar situaciones del mundo real.

Requisitos previos y limitaciones

Requisitos previos 

Limitaciones

  • Se utiliza una convención de nomenclatura para identificar los recursos que se deben eliminar. El código de ejemplo de este patrón usa un prefijo para el nombre del recurso, pero puede definir su propia convención de nomenclatura. Los recursos que no utilicen esta convención de nomenclatura no se identificarán ni se eliminarán posteriormente.

Arquitectura

El siguiente diagrama muestra cómo este marco identifica la CloudFormation pila de destino y los recursos adicionales asociados a ella.

Las fases que descubren, procesan y eliminan las CloudFormation pilas y sus recursos asociados.

En el diagrama, se muestra el siguiente flujo de trabajo:

  1. Reúna recursos: el marco de automatización utiliza una convención de nomenclatura para devolver todas las CloudFormation pilas relevantes, los repositorios de Amazon Elastic Container Registry (Amazon ECR), las tablas de DynamoDB y los buckets de Amazon S3.

    nota

    Las funciones de esta etapa utilizan paginadores, una característica de Boto3 que resume el proceso de iteración sobre un conjunto de resultados de API truncado. Esto garantiza que se procesen todos los recursos. Para optimizar aún más el rendimiento, considere la posibilidad de aplicar un filtrado del lado del servidor o de utilizarlo para realizar un filtrado del lado del cliente. JMESPath

  2. Procesamiento previo: el marco de automatización identifica y aborda las restricciones del servicio que deben anularse para poder eliminar los recursos. CloudFormation Por ejemplo, cambia la configuración DeletionProtectionEnabled de las tablas de DynamoDB a False. En la interfaz de línea de comandos de cada recurso, recibirá una petición en la que se le preguntará si desea anular la restricción.

  3. Eliminar pila: el marco de automatización elimina la pila. CloudFormation En la interfaz de línea de comandos, recibirá una petición en la que se le preguntará si desea anular la pila.

  4. Posprocesamiento: el marco de automatización elimina todos los recursos relacionados que no se hayan aprovisionado directamente CloudFormation como parte de la pila. Algunos ejemplos de estos tipos de recursos son los parámetros y los grupos de CloudWatch registros de Systems Manager. Las funciones independientes recopilan estos recursos, los procesan previamente y, a continuación, los eliminan. En la interfaz de línea de comandos de cada recurso, recibirá una petición en la que se le preguntará si desea eliminar el recurso.

    nota

    Las funciones de esta etapa utilizan paginadores, una característica de Boto3 que resume el proceso de iteración sobre un conjunto de resultados de API truncado. Esto garantiza que se procesen todos los recursos. Para optimizar aún más el rendimiento, considere la posibilidad de aplicar un filtrado del lado del servidor o de utilizarlo JMESPath para realizar un filtrado del lado del cliente.

Automatización y escala

Si tu CloudFormation pila incluye otros recursos que no están incluidos en el código de ejemplo o si la pila tiene una restricción que no se ha abordado en este patrón, puedes adaptar el marco de automatización a tu caso de uso. Siga la misma metodología de recopilación de recursos, procesamiento previo, eliminación de la pila y procesamiento posterior.

Tools (Herramientas)

Servicios de AWS

  • AWS CloudFormationle ayuda a configurar AWS los recursos, aprovisionarlos de forma rápida y coherente y gestionarlos a lo largo de su ciclo de vida a lo largo de todo Cuentas de AWS el ciclo de vida. Regiones de AWS

  • CloudFormation La interfaz de línea de comandos (CFN-CLI) es una herramienta de código abierto que le ayuda a desarrollar AWS y probar extensiones de terceros y luego registrarlas para su uso. CloudFormation

  • AWS SDK para Python (Boto3)es un kit de desarrollo de software que le ayuda a integrar su aplicación, biblioteca o script de Python con Servicios de AWS.

Otras herramientas

  • Click es una herramienta de Python que lo ayuda a crear interfaces de línea de comandos.

  • Poetry es una herramienta de empaquetado y administración de dependencias de Python.

  • Pyenv es una herramienta que lo ayuda a administrar y cambiar entre versiones de Python.

  • Python es un lenguaje de programación informático de uso general.

Repositorio de código

El código de este patrón está disponible en el GitHub cloudformation-stack-cleanuprepositorio.

Prácticas recomendadas

  • Etiquetado de recursos para una fácil identificación: implemente una estrategia de etiquetado para identificar los recursos que se crean para diferentes entornos y propósitos. Las etiquetas pueden simplificar el proceso de limpieza al ayudarte a filtrar los recursos en función de sus etiquetas.

  • Configuración de los ciclos de vida de los recursos: defina los ciclos de vida de los recursos para eliminarlos automáticamente después de un período determinado. Esta práctica lo ayuda a garantizar que los entornos temporales no se conviertan en pasivos de costos permanentes.

Epics

TareaDescripciónHabilidades requeridas

Clonar el repositorio.

  1. Cree una carpeta en su entorno virtual. Póngale el nombre del proyecto.

  2. Abra un terminal en la máquina local y vaya a la carpeta.

  3. Introduzca el siguiente comando para clonar el cloudformation-stack-cleanuprepositorio en el directorio de su proyecto:

    git clone https://github.com/aws-samples/cloudformation-stack-cleanup.git
DevOps ingeniero

Instale Poetry.

Siga las instrucciones (documentación de Poetry) para instalar Poetry en el entorno virtual de destino.

DevOps ingeniero

Instale las dependencias.

  1. Introduzca el siguiente comando para navegar al directorio del proyecto:

    cd cloudformation-stack-cleanup
  2. Introduzca el siguiente comando:

    poetry install

    Esto instala todas las dependencias necesarias, como Boto3, click y el código fuente de la CLI. CloudFormation

DevOps ingeniero

(Opcional) Instale Pyenv.

Siga las instrucciones (GitHub) para instalar Pyenv.

DevOps ingeniero
TareaDescripciónHabilidades requeridas

Cree funciones que recopilen, procesen previamente y eliminen los recursos de destino.

  1. En el repositorio clonado, introduzca el siguiente comando para acceder al directorio de la cli.

    cd cfncli/cli
  2. Abra el archivo cleanup_enviornment.py.

  3. Cree una nueva función de Python que recopile el tipo de recurso que desee modificar. Para ver un ejemplo, consulte la función de gather_ddb_tables en este archivo.

  4. Cree una nueva función de Python que anule las restricciones de servicio del recurso de destino. Para ver un ejemplo, consulte la función de remove_ddb_deletion_protection en este archivo.

  5. Cree una nueva función de Python que recopile los recursos de destino no administrados. Para ver un ejemplo, consulte la función de gather_log_groups en este archivo.

  6. Cree una nueva función de Python que elimine los recursos de destino no administrados. Para ver un ejemplo, consulte la función de delete_log_group en este archivo.

  7. Guarde y cierre el archivo cleanup_enviornment.py.

DevOps ingeniero, Python
TareaDescripciónHabilidades requeridas

Crea una CloudFormation pila.

  1. Desplácese hasta el directorio del proyecto .

  2. Introduzca el siguiente comando para crear una CloudFormation pila que aprovisione una tabla de DynamoDB y un grupo de seguridad. Anote el valor de <VPCID>.

    aws cloudformation create-stack \ --stack-name sampleforcleanup-Stack \ --template-body file://samples/sample-cfn-stack.yaml \ --parameters ParameterKey=VpcId,ParameterValue=<VPCID> \ --region us-east-1
AWS DevOps

Cree un parámetro de Systems Manager.

Introduzca el siguiente comando para crear un parámetro de Systems Manager que no se aprovisione mediante CloudFormation:

aws ssm put-parameter \ --name "/sampleforcleanup/database/password" \ --value "your_db_password" \ --type "SecureString" \ --description "Database password for my app" \ --tier "Standard" \ --region "us-east-1"
AWS DevOps

Crear un bucket de Amazon S3.

Introduce el siguiente comando para crear un bucket de Amazon S3 que no esté aprovisionado: CloudFormation

aws s3api create-bucket \ --bucket samplesorcleanup-unmanagedbucket-<UniqueIdentifier> \ --region us-east-1 \ --create-bucket-configuration LocationConstraint=us-east-1
AWS DevOps
TareaDescripciónHabilidades requeridas

Elimine la CloudFormation pila.

  1. Introduzca el siguiente comando para eliminar la CloudFormation pila de muestras, el parámetro de Systems Manager y el bucket de Amazon S3 que creó:

    cfncli --region us-east-1 \ dev cleanup-env \ --prefix-list sampleforcleanup
  2. Escriba Y para continuar cuando se le solicite.

AWS DevOps

Valide la eliminación de recursos.

En el resultado, confirme que se hayan eliminado todos los recursos de muestra. Para ver un resultado de ejemplo, consulte la sección Información adicional de este patrón.

AWS DevOps

Recursos relacionados

Información adicional

A continuación, se muestra un resultado de ejemplo del comando cfncli:

cfncli --region aus-east-1 dev cleanup-env --prefix-list sampleforcleanup https://sts.us-east-1.amazonaws.com Cleaning up: ['sampleforcleanup'] in xxxxxxxxxx:us-east-1 Do you want to proceed? [Y/n]: Y No S3 buckets No ECR repositories No Lambda functions in VPC The following DynamoDB tables will have their deletion protection removed: sampleforcleanup-MyDynamoDBTable Do you want to proceed with removing deletion protection from these tables? [Y/n]: Y Deletion protection disabled for DynamoDB table 'sampleforcleanup-MyDynamoDBTable'. The following CloudFormation stacks will be deleted: sampleforcleanup-Stack Do you want to proceed with deleting these CloudFormation stacks? [Y/n]: Y Initiated deletion of CloudFormation stack: `sampleforcleanup-Stack` Waiting for stack `sampleforcleanup-Stack` to be deleted... CloudFormation stack `sampleforcleanup-Stack` deleted successfully. The following ssm_params will be deleted: /sampleforcleanup/database/password Do you want to proceed with deleting these ssm_params? [Y/n]: Y Deleted SSM Parameter: /sampleforcleanup/database/password Cleaned up: ['sampleforcleanup']