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.
- Planificación y organización
- Creación de plantillas
-
- Gestión de pilas
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 para responder rápido a los errores incluyen las herramientas de línea de comandos AWS CloudFormation Lintercfn-lint
) y TaskCatcfn-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ódigocfn-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
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
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 Amazon EC2 Auto Scaling detrás de un equilibrador 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 Obtención de salidas exportadas de una pila implementada de 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 Secciones de la plantilla de CloudFormation.
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 Creación de configuraciones de recursos reutilizables que se puedan incluir en las plantillas con los módulos de CloudFormation.
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 Referencia a los recursos existentes y a los parámetros de Systems Manager con los tipos de parámetros proporcionados por CloudFormation.
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 Referencia sintáctica de la sección Parameters para las plantillas de CloudFormation.
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:123456789012: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 compartir recursos o configuraciones entre varias pilas. 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 de AWS y región. En otra pila, hace referencia al valor exportado del ID de subred al describir una instancia de Amazon EC2. Para ver un ejemplo detallado del uso del campo de salida Export
y la función intrínseca Fn::ImportValue
, consulte Consulta de las salidas de recursos en otra pila de CloudFormation.
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.
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 de Amazon EC2 mediante 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.
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 auxiliares más recientes, consulte la 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 validate-template de la CLI 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
Administre todos los recursos de pila a través de AWS CloudFormation
Después de lanzar una pila, use la consola
Para obtener más información sobre derivación, consulte ¿Qué es una desviación?.
Para obtener más información sobre la actualización de pilas, 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 de CloudFormation 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.