Prácticas recomendadas de AWS CloudFormation - AWS CloudFormation

Prácticas recomendadas de AWS CloudFormation

Las prácticas recomendadas son recomendaciones que pueden ayudarle a usar AWS CloudFormation de forma más eficaz y segura a lo largo de todo su flujo de trabajo. Aprenda a planificar y organizar pilas, crear plantillas que describen los recursos y las aplicaciones de software que se ejecutan en ellas, y a administrar sus pilas y sus recursos. Las siguientes prácticas recomendadas se basan en experiencias reales de clientes de CloudFormation actuales.

Reduzca el bucle de retroalimentación para mejorar la velocidad de entrega

Adopte prácticas y herramientas que le ayuden a acortar el bucle de retroalimentación de la infraestructura que describe con las plantillas de CloudFormation. Esto incluye realizar análisis y pruebas iniciales de las plantillas en su estación de trabajo. Cuando lo haga, tendrá la oportunidad de descubrir posibles problemas de sintaxis y configuración incluso antes de enviar sus contribuciones a un repositorio de código fuente. El descubrimiento temprano de estos problemas ayuda a evitar que lleguen a los entornos del ciclo de vida formal, como el desarrollo, el control de calidad y la producción. Este enfoque de pruebas tempranas y respuestas rápidas a errores le ofrece las ventajas de reducir el tiempo de espera para volver a trabajar, reducir las posibles áreas de impacto y aumentar su nivel de confianza a la hora de realizar operaciones de aprovisionamiento satisfactorias.

Las opciones de herramientas que lo ayudarán a desarrollar prácticas de respuesta rápida a los errores incluyen las herramientas de línea de comandos AWS CloudFormation Linter (cfn-lint) y TaskCat. La herramienta cfn-lint le permite validar sus plantillas de CloudFormation con la especificación de recursos de AWS CloudFormation. Esto incluye comprobar los valores válidos de las propiedades de los recursos, así como las prácticas recomendadas. Los complementos para cfn-lint están disponibles para varios editores de código; esto le permite visualizar los problemas en su editor y obtener comentarios directos de linter. También puede optar por integrar cfn-lint en la configuración de su repositorio de código fuente, de modo que pueda realizar la validación de la plantilla cuando confirme sus contribuciones. Para obtener más información, consulte Validación previa a la confirmación de plantillas de AWS CloudFormation de Git con cfn-lint. Una vez que haya realizado el lint inicial (y solucionado cualquier problema que pudiera haber encontrado cfn-lint), puede usar TaskCat para probar sus plantillas al crear pilas mediante programación en las regiones de AWS que elija. TaskCat también genera un informe con calificaciones de aprobación/reprobación para cada región que elija.

Para ver un tutorial práctico y paso a paso sobre cómo utilizar ambas herramientas para acortar el bucle de retroalimentación, siga el Laboratorio de lint y pruebas del Taller de AWS CloudFormation.

Organice sus pilas por ciclo de vida y titularidad

Utilice el ciclo de vida y la titularidad de sus recursos de AWS para ayudarlo a decidir qué recursos deberían ir en cada pila. Inicialmente, se pueden incluir todos los recursos en una sola pila, pero a medida que la pila crece en escala y su ámbito se amplía, administrar una sola pila puede ser tedioso y consumir mucho tiempo. Al agrupar los recursos con titularidad y ciclos de vida comunes, los propietarios pueden realizar cambios a su conjunto de recursos usando su propio proceso y programación sin que eso afecte a otros recursos.

Por ejemplo, imagine un equipo de desarrolladores e ingenieros que posee un sitio web alojado en instancias de escalado automático detrás de un balanceador de carga. Dado que el sitio web tiene su propio ciclo de vida y lo mantiene su propio equipo, puede crear una pila para el sitio web y sus recursos. Ahora imagine que el sitio web también usa bases de datos de back-end, donde las bases de datos se encuentran en una pila aparte, bajo la titularidad y el mantenimiento de los administradores de bases de datos. Siempre que el equipo del sitio web o de la base de datos tengan que actualizar sus recursos, pueden hacerlo sin afectar a sus pilas mutuamente. Si todos los recursos estuvieran en una sola pila, coordinar y comunicar actualizaciones puede ser difícil.

Si desea obtener instrucciones adicionales sobre cómo organizar pilas, puede utilizar dos marcos de trabajo comunes: una arquitectura de varias capas y arquitectura orientada a servicios (SOA, por sus siglas en inglés).

Una arquitectura multicapa organiza pilas en varias capas horizontales apiladas unas sobre otras, y cada capa depende de la capa directamente inferior. Puede tener una o más pilas en cada capa, pero dentro de cada una, las pilas deberían tener recursos de AWS con ciclos de vida y titularidad similares.

Con una arquitectura orientada a los servicios, puede organizar grandes problemas empresariales en partes controlables. Cada una de estas partes es un servicio con una finalidad claramente definida y que representa una unidad autónoma de funcionalidad. Puede asignar estos servicios a una pila, de modo que cada pila tiene su propio ciclo de vida y propietarios. Estos servicios (pilas) pueden conectarse para que puedan interactuar.

Utilice referencias de pila cruzadas para exportar recursos compartidos

Al organizar recursos de AWS en función del ciclo de vida y la titularidad, es posible que desee crear una pila que utiliza los recursos que están en otra pila. Puede codificar valores de forma predeterminada o usar parámetros de entrada para transferir ID y nombres de recursos. Sin embargo, con estos métodos las plantillas pueden ser difíciles de reutilizar o puede aumentar la sobrecarga para ejecutar una pila. En su lugar, utilice referencias de pila cruzadas para exportar recursos de una pila para que las demás pilas puedan utilizarlos. Las pilas pueden utilizar los recursos exportados llamándolos con la función Fn::ImportValue.

Por ejemplo, podría tener una pila de red que incluya una VPC, un grupo de seguridad y una subred. Le interesan todas las aplicaciones web públicas para utilizar estos recursos. Al exportar los recursos, permite que los usen todas los pilas con aplicaciones web públicas. Para obtener más información, consulte Tutorial: Consulte las salidas de recursos en otra pila de AWS CloudFormation.

Verifique las cuotas de todos los tipos de recursos

Antes de lanzar una pila, asegúrese de que puede crear todos los recursos que desee sin llegar a los límites de su cuenta de AWS. En caso de llegar a un límite, CloudFormation no creará la pila de forma satisfactoria hasta que aumente su cuota o elimine recursos adicionales. Cada servicio puede tener varios límites que se deben tener en cuenta antes de lanzar una pila. Por ejemplo, de forma predeterminada, únicamente puede lanzar 2000 pilas de CloudFormation por región en su Cuenta de AWS. Para obtener más información acerca de los límites predeterminados, consulte AWS Service Quotas en la Referencia general de AWS.

Reutilice plantillas para replicar pilas en varios entornos

Después de configurar pilas y recursos, puede volver a utilizar las plantillas para replicar su infraestructura en varios entornos. Por ejemplo, puede crear entornos para desarrollo, pruebas y producción y así probar los cambios antes de implementarlos en la producción. Para que las plantillas sean reutilizables, utilice las secciones de parámetros, mapeos y condiciones para poder personalizar las pilas al crearlas. Por ejemplo, en el caso de los entornos de desarrollo, puede especificar un tipo de instancia de menor costo que la de su entorno de producción, pero el resto de configuraciones y valores seguirá igual. Para obtener más información acerca de los parámetros, mappings y condiciones, consulte Anatomía de la plantilla.

Uso de módulos para reutilizar configuraciones de recursos

A medida que crece su infraestructura, pueden surgir patrones comunes donde usted declara los mismos componentes en cada plantilla. Losmódulos son una forma de empaquetar configuraciones de recursos para su inclusión en plantillas de pila, de forma transparente, administrable y repetible. Los módulos pueden encapsular configuraciones de servicios comunes y prácticas recomendadas como componentes esenciales modulares y personalizables para que pueda incluirlos en las plantillas de pila.

Estos bloques de construcción pueden destinarse a un único recurso, como las prácticas recomendadas para definir una instancia de Amazon Elastic Compute Cloud (Amazon EC2), o pueden servir para varios recursos, con el fin de definir patrones comunes de arquitectura de aplicaciones. Estos bloques de creación pueden anidarse en otros módulos, por lo que puede apilar prácticas recomendadas en bloques de creación de nivel superior. Los módulos de CloudFormation están disponibles en el registro de CloudFormation para que pueda usarlos como un recurso nativo. Cuando utiliza un módulo de CloudFormation, la plantilla del módulo se expande en la plantilla consumidora, lo que le permite acceder a los recursos dentro del módulo mediante Ref o Fn::GetAtt. Para obtener más información, consulte Módulos.

Uso de tipos de parámetros específicos de AWS

Si la plantilla requiere entradas para unos valores específicos de AWS existentes, como los ID de Amazon Virtual Private Cloud existentes o el nombre de un par de claves de Amazon EC2, use los tipos de parámetros específicos de AWS. Por ejemplo, puede especificar un parámetro como tipo AWS::EC2::KeyPair::KeyName, que adopta un nombre de par de claves existente que esté en su cuenta de AWS y en la región donde creó la pila. AWS CloudFormation puede validar rápidamente valores para tipos de parámetros específicos de AWS antes de crear la pila. Además, si usa la consola de CloudFormation, mostrará una lista desplegable de valores válidos, lo que elimina la necesidad de buscar o memorizar los ID de VPC o nombres de pares de claves correctos. Para obtener más información, consulte Parámetros.

Uso de limitaciones de los parámetros

Con limitaciones, puede describir los valores de entrada permitidos para que CloudFormation capture los valores no válidos antes de crear una pila. Puede establecer limitaciones como una longitud mínima, longitud máxima y patrones permitidos. Por ejemplo, puede establecer limitaciones en un valor de nombre de usuario de la base de datos, por lo que debe tener una longitud mínima de ocho caracteres y contener únicamente caracteres alfanuméricos. Para obtener más información, consulte Parámetros.

Utilice pseudoparámetros para promover la portabilidad

Puede utilizar pseudoparámetros en las plantillas como argumentos para funciones intrínsecas, como Ref y Fn::Sub. Los pseudoparámetros son parámetros predefinidos por CloudFormation. No los declara en su plantilla. El uso de pseudoparámetros en las funciones intrínsecas aumenta la portabilidad de las plantillas de pilas entre regiones y cuentas.

Por ejemplo, imagine que desea crear una plantilla en la que, para una propiedad de recurso determinada, necesita especificar el nombre de recurso de Amazon (ARN) de otro recurso existente. En este caso, el recurso existente es un recurso del almacén de parámetros de AWS Systems Manager con el siguiente ARN: arn:aws:ssm:us-east-1:111122223333:parameter/MySampleParameter. Deberá adaptar el formato del ARN a su partición, región e ID de cuenta de AWS de destino. En lugar de realizar una codificación rígida de estos valores, puede usar los pseudoparámetros AWS::Partition, AWS::Region y AWS::AccountId para que su plantilla sea más portátil. En este caso, el siguiente ejemplo muestra cómo concatenar elementos de un ARN con CloudFormation: !Sub 'arn:${AWS::Partition}:ssm:${AWS::Region}:${AWS::AccountId}:parameter/MySampleParameter.

Para otro ejemplo, suponga que desea utilizar Tutorial: Consulte las salidas de recursos en otra pila de AWS CloudFormation para hacer referencia a las salidas de recursos de otra pila de CloudFormation. En este ejemplo, suponga que ha creado una subred para la VPC y, a continuación, ha exportado su ID para usarlo con otras pilas de la misma cuenta y región. En otra pila, hace referencia al valor exportado del ID de subred al describir una instancia de Amazon EC2.

Las exportaciones de pilas deben ser únicas por cuenta y por región. Por lo tanto, en este caso, puede usar el pseudoparámetro AWS::StackName para crear un prefijo para la exportación. Dado que los nombres de las pilas también deben ser únicos por cuenta y por región, el uso de este pseudoparámetro como prefijo aumenta la posibilidad de tener un nombre de exportación único y, al mismo tiempo, promueve un enfoque reutilizable en todas las pilas desde las que se exportan los valores. Otra alternativa es utilizar un prefijo de su elección.

Para ver un ejemplo detallado del uso del campo de salida Export y la función intrínseca Fn::ImportValue, consulte Tutorial: Consulte las salidas de recursos en otra pila de AWS CloudFormation.

Use AWS::CloudFormation::Init para implementar aplicaciones de software en las instancias de Amazon EC2

Al lanzar las pilas, puede instalar y configurar las aplicaciones de software en instancias Amazon EC2 con el script auxiliar cfn-init y el recurso AWS::CloudFormation::Init. Al utilizar AWS::CloudFormation::Init, puede describir las configuraciones que desee en lugar de unos pasos de procedimientos de scripts. También puede actualizar configuraciones sin volver a crear instancias. Y si algo no funciona con la configuración, CloudFormation genera registros que puede utilizar para investigar problemas.

En la plantilla, especifique los estados de instalación y configuración en el recurso AWS::CloudFormation::Init. Para obtener una explicación detallada que muestra cómo utilizar cfn-init y AWS::CloudFormation::Init, consulte Implementación de aplicaciones en Amazon EC2 con AWS CloudFormation.

Utilice los scripts auxiliares más recientes

Los scripts auxiliares se actualizan periódicamente. Asegúrese de incluir el siguiente comando en la propiedad UserData de la plantilla antes de llamar a los scripts auxiliares para garantizar que las instancias lanzadas reciban los últimos scripts auxliar:

yum install -y aws-cfn-bootstrap

Para obtener más información acerca de cómo recibir los scripts auxliares más recientes, consulte Referencia de scripts auxiliares de CloudFormation.

Validar plantillas antes de usarlas

Antes de utilizar una plantilla para crear o actualizar una pila, puede usar CloudFormation para validarla. Validar una plantilla puede ayudarle a identificar errores de sintaxis y algunos de semántica, como las dependencias circulares, antes de que CloudFormation cree recursos. Si usa la consola de CloudFormation, esta valida automáticamente la plantilla después de especificar parámetros de entrada. Para la AWS CLI o la API de CloudFormation, use el comando aws cloudformation validate-template o la operación ValidateTemplate de API.

Durante la validación, CloudFormation comprueba primero si la plantilla es un JSON válido. Si no lo es, CloudFormation comprueba si la plantilla es un YAML válido. Si ambas comprobaciones fallan, CloudFormation devuelve un error de validación de plantilla.

Validar plantillas para la conformidad de políticas de organización

También puede validar su plantilla para comprobar el cumplimiento de las directrices de la política de la organización. AWS CloudFormation Guard (cfn-guard) es una herramienta de interfaz de línea de comandos (CLI) de código abierto que proporciona un lenguaje de políticas como código para definir reglas que pueden comprobar las configuraciones de recursos obligatorias y prohibidas. A continuación, le permite validar sus plantillas en función de esas reglas. Por ejemplo, los administradores pueden crear reglas para asegurarse de que los usuarios siempre creen buckets de Amazon S3 cifrados.

Puede utilizar cfn-guard localmente, mientras edita plantillas o automáticamente como parte de una canalización CI/CD para parar la implementación de recursos no conformes.

Además, cfn-guard incluye una característica, rulegen, que permite extraer reglas de plantillas de CloudFormation compatibles existentes.

Para obtener más información, consulte el repositorio cfn-guard de GitHub.

Administre todos los recursos de pila a través de AWS CloudFormation

Después de lanzar una pila, use la consola de CloudFormation, la API o la CLI de AWS para actualizar los recursos de la pila. No realice cambios en los recursos de la pila fuera de CloudFormation. Eso puede crear una discrepancia entre la pila de la plantilla y el estado actual de los recursos de la pila, lo que puede producir errores si actualiza o elimina la pila. Para obtener más información, consulte Tutorial: Actualización de una pila.

Cree conjuntos de cambios antes de actualizar las pilas

Los conjuntos de cambios permiten ver cómo afectarían los cambios propuestos a una pila a los recursos que ya estén en ejecución, antes de implementarlos. CloudFormation no hace ningún cambio en la pila hasta que se ejecuta el conjunto de cambios, lo que le permite decidir si desea continuar con los cambios propuestos o crear otro conjunto de cambios.

Utilice conjuntos de cambio para comprobar cómo podrían afectar los cambios a los recursos en ejecución, especialmente para recursos de vital importancia. Por ejemplo, si cambia el nombre de una instancia de base de datos de Amazon RDS, CloudFormation creará una nueva base de datos y eliminará la antigua; se perderán los datos de la base antigua salvo que ya tenga una copia de seguridad. Si genera un conjunto de cambios, verá que el cambio sustituirá a la base de datos. Esto puede ayudarle a planificar antes de actualizar la pila. Para obtener más información, consulte Actualización de pilas con conjuntos de cambios.

Utilice políticas de pila

Las políticas de pila ayudan a proteger los recursos de pila vitales de actualizaciones involuntarias que podrían interrumpir o incluso sustituir los recursos. Una política de pilas es un documento de JSON que describe qué acciones de actualización pueden realizarse en unos recursos designados. Especifique una política de pilas cada vez que cree una pila que tenga recursos de vital importancia.

Durante una actualización de pilas, debe especificar de forma explícita los recursos protegidos que desea actualizar; de lo contrario, no se producen cambios en los recursos protegidos. Para obtener más información, consulte Impida actualizaciones en los recursos de la pila.

Utilice revisiones de código y controles de revisión para administrar las plantillas

Sus plantillas de pila describen la configuración de los recursos de AWS, como los valores de las propiedades. Para revisar los cambios y mantener una historia exacta de los recursos, utilice revisiones de código y controles de revisión. Estos métodos pueden ayudarle a realizar un seguimiento de los cambios entre diferentes versiones de las plantillas, que pueden ayudarle a realizar un seguimiento de los cambios en los recursos de la pila. Además, al mantener un historial, siempre puede devolver la pila a una versión concreta de la plantilla.

Actualice sus instancias de Amazon EC2 regularmente

En todas sus instancias de Windows de Amazon EC2 y las instancias de Linux de Amazon EC2 creadas con CloudFormation ejecute el comando yum update con regularidad para actualizar el paquete RPM. Esto garantiza la obtención de las últimas correcciones y actualizaciones de seguridad.