Funcionamiento de CloudFormation
Este tema describe el funcionamiento de CloudFormation y le presenta los conceptos clave que necesitará conocer a medida que lo utilice.
Conceptos clave
Cuando utiliza CloudFormation, trabaja con plantillas y pilas. Puede crear plantillas para describir los recursos de AWS y sus propiedades. Cuando se crea una pila, CloudFormation aprovisiona los recursos que se describen en su plantilla.
Plantillas
Una plantilla CloudFormation es un archivo de texto con formato JSON o YAML. Puede guardar estos archivos con cualquier extensión, como .json
, .yaml
, .template
o .txt
. CloudFormation usa estas plantillas como proyectos para crear sus recursos de AWS. Por ejemplo, en una plantilla, puede describir una instancia Amazon EC2, como el tipo de instancia, el ID de AMI, mapeos de dispositivos de bloques y el nombre de su par de claves de Amazon EC2. Cuando se crea una pila, debe especificarse una plantilla que CloudFormation utiliza para crear lo que se describe en la plantilla.
Por ejemplo, si creó una pila con la siguiente plantilla, CloudFormation aprovisiona una instancia con un ID de AMI ami-0ff8a91507f77f867
, un tipo de instancia t2.micro
, el nombre del par de claves testkey
y un volumen de Amazon EBS.
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20
También puede especificar varios recursos en una única plantilla y configurar dichos recursos para que funcionen conjuntamente. Por ejemplo, puede modificar la plantilla anterior para que incluya una dirección IP elástica (EIP) y asociarla a la instancia de Amazon EC2, tal y como se muestra en el ejemplo siguiente:
JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A sample template", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro", "KeyName": "testkey", "BlockDeviceMappings": [ { "DeviceName": "/dev/sdm", "Ebs": { "VolumeType": "io1", "Iops": 200, "DeleteOnTermination": false, "VolumeSize": 20 } } ] } }, "MyEIP": { "Type": "AWS::EC2::EIP", "Properties": { "InstanceId": { "Ref": "MyEC2Instance" } } } } }
YAML
AWSTemplateFormatVersion: 2010-09-09 Description: A sample template Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro KeyName: testkey BlockDeviceMappings: - DeviceName: /dev/sdm Ebs: VolumeType: io1 Iops: 200 DeleteOnTermination: false VolumeSize: 20 MyEIP: Type: 'AWS::EC2::EIP' Properties: InstanceId: !Ref MyEC2Instance
Las plantillas anteriores se centraron en una única instancia Amazon EC2; sin embargo, las plantillas de CloudFormation tienen capacidades adicionales que puede utilizar para crear conjuntos complejos de recursos y reutilizar esas plantillas en múltiples contextos. Por ejemplo, puede agregar parámetros de entrada cuyos valores se especifican al crear una pila de CloudFormation. En otras palabras, puede especificar un valor como el tipo de instancia al crear una pila en lugar de al crear la plantilla, lo que hace a la plantilla más fácil de reutilizar en diferentes situaciones.
Para obtener más información, consulte Trabajo con plantillas de CloudFormation.
Pilas
Al utilizar CloudFormation, los recursos relacionados se administran 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. Todos los recursos de una pila se definen mediante la plantilla de CloudFormation de la pila. Supongamos que ha creado una plantilla que incluye un grupo de Auto Scaling, un balanceador de carga Elastic Load Balancing y una instancia de base de datos Amazon Relational Database Service (Amazon RDS). Para crear esos recursos, debe crear una pila enviando la plantilla que ha creado y CloudFormation aprovisiona todos esos recursos para usted. También puede trabajar con pilas por medio de la consola
Para obtener más información, consulte Administrar los recursos de AWS como una sola unidad con pilas AWS CloudFormation.
Conjuntos de cambios
Si necesita realizar cambios en los recursos que están ejecutándose en una pila, actualice la pila. Antes de realizar cambios en los recursos, puede generar un conjunto de cambios, que es un resumen de los cambios propuestos. Los conjuntos de cambios le permiten ver cómo afectan los cambios a sus recursos en ejecución, en especial para los recursos críticos, antes de implementarlos.
Por ejemplo, si cambia el nombre de una instancia de base de datos Amazon RDS, CloudFormation creará una nueva base de datos y eliminará la antigua. Se perderán los datos de la antigua base de datos a menos que ya haya hecho una copia de seguridad. Si genera un cambio conjunto, verá que el cambio provocará la sustitución de la base de datos y usted podrá planificar en consecuencia antes de actualizar la pila.
Para obtener más información, consulte Actualización de pilas de CloudFormation con conjuntos de cambios.
Funcionamiento de CloudFormation
Cuando crea una pila, CloudFormation hace llamadas de servicio subyacentes a AWS para aprovisionar y configurar sus recursos. CloudFormation solo puede llevar a cabo acciones para las cuales tiene permiso. Por ejemplo, para crear instancias de EC2 mediante CloudFormation, necesita permisos para crear instancias. Necesitará permisos similares para terminar instancias al eliminar pilas con instancias. Use AWS Identity and Access Management (IAM) para administrar permisos.
Su plantilla declara todas las llamadas que CloudFormation hace. Por ejemplo, suponga que tiene una plantilla que describe una instancia de EC2 con un tipo de instancia t2.micro
. Cuando utiliza la plantilla para crear una pila, CloudFormation llama a la API de creación de instancias Amazon EC2 y especifica el tipo de instancia como t2.micro
. En el siguiente diagrama se resume el flujo de trabajo de CloudFormation para la creación de pilas.
-
Use Infrastructure Composer o su propio editor de texto para crear o modificar una plantilla de CloudFormation en formato JSON o YAML. También puede optar por utilizar una plantilla proporcionada. La CloudFormation plantilla describe los recursos que desea y sus ajustes. Por ejemplo, suponga que desea crear una instancia de EC2. La plantilla puede indicar una instancia de Amazon EC2 y describir sus propiedades, tal y como se muestra en el ejemplo siguiente:
ejemplo JSON
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "A simple EC2 instance", "Resources": { "MyEC2Instance": { "Type": "AWS::EC2::Instance", "Properties": { "ImageId": "ami-0ff8a91507f77f867", "InstanceType": "t2.micro" } } } }
ejemplo YAML
AWSTemplateFormatVersion: 2010-09-09 Description: A simple EC2 instance Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: ImageId: ami-0ff8a91507f77f867 InstanceType: t2.micro
-
Guarde la plantilla de manera local o en un bucket de Amazon S3. Si creó una plantilla, guárdela con un archivo de extensión como
.json
,.yaml
o.txt
. -
Cree una pila de CloudFormation especificando la ubicación del archivo de la plantilla; por ejemplo, una ruta en el equipo local o una URL de Amazon S3. Si la plantilla contiene parámetros, puede especificar los valores de entrada al crear la pila. Los parámetros le permiten pasar valores a la plantilla para poder personalizar sus recursos cada vez que crea una pila.
Puede crear pilas mediante la consola de CloudFormation, la operación de API CreateStack o el comando de la AWS CLI create-stack.
nota
Si especifica un archivo de plantilla almacenado localmente, CloudFormation lo carga a un bucket de S3 en su cuenta de AWS. CloudFormation crea un bucket para cada región en la que carga un archivo de plantilla. Cualquiera con permisos de Amazon Simple Storage Service (Amazon S3) en su cuenta de AWS puede acceder a los buckets. Si ya hubiera un bucket creado por CloudFormation, la plantilla se añade a dicho bucket.
Puede utilizar su propio bucket y administrar sus permisos cargando manualmente las plantillas a Amazon S3. Entonces, siempre que cree o actualice una pila, especifique la URL de Amazon S3 de un archivo de plantilla.
CloudFormation aprovisiona y configura recursos llamando a los servicios de AWS que se describen en su plantilla.
Una vez que se han creado todos los recursos, CloudFormation informa que se ha creado su pila. A continuación, puede comenzar a utilizar los recursos de la pila. Si se produce un error durante la creación de la pila, CloudFormation revierte los cambios eliminando los recursos que creó.
Actualización de una pila con conjuntos de cambios
Cuando tenga que actualizar los recursos de su pila, puede modificar la plantilla de los recursos. No es necesario crear una nueva pila y eliminar la antigua. Para actualizar una pila, cree un conjunto de cambios enviando una versión modificada de la plantilla de pila original, diferentes valores de parámetros de entrada o ambos. CloudFormation compara la plantilla modificada con la original y genera un conjunto de cambios. El conjunto de cambios enumera las modificaciones propuestas. Tras revisar los cambios, puede iniciar el conjunto de cambios para actualizar la pila o puede crear un nuevo conjunto de cambios. En el siguiente diagrama se resume el flujo de trabajo para la actualización de una pila.
importante
Las actualizaciones pueden causar interrupciones. Dependiendo del recurso y de las propiedades que esté actualizando, una actualización podría interrumpir o incluso sustituir un recurso existente. Para obtener más información, consulte Comprensión de los comportamientos de actualización de los recursos de la pila.
-
Puede modificar una plantilla de pila de CloudFormation por medio de Infrastructure Composer o un editor de texto. Por ejemplo, si desea cambiar el tipo de instancia de una instancia de EC2, deberá cambiar el valor de la propiedad
InstanceType
en la plantilla original de la pila. Para obtener más información, consulte Actualizar la plantilla de pila. -
Guarde la plantilla de CloudFormation localmente o en un bucket de S3.
-
Cree un conjunto de cambios especificando la pila que desea actualizar y la ubicación de la plantilla modificada, como por ejemplo una ruta en su equipo local o una dirección URL de Amazon S3. Si la plantilla contiene parámetros, puede especificar valores al crear el conjunto de cambios.
Para obtener más información sobre la creación de conjuntos de cambios, consulte Actualización de pilas de CloudFormation con conjuntos de cambios.
nota
Si especifica una plantilla almacenada en su equipo local, CloudFormation cargará automáticamente su plantilla a un bucket de S3 en su Cuenta de AWS.
-
Vea el conjunto de cambios para comprobar que CloudFormation realizará los cambios que espera. Por ejemplo, compruebe si CloudFormation reemplazará cualquier recurso crítico de la pila. Puede crear tantos conjuntos de cambios como necesite hasta que haya incluido los cambios que desea.
importante
Los conjuntos de cambios no indican si la actualización de la pila se realizará correctamente. Por ejemplo, un conjunto de cambios no comprueba si se va a sobrepasar una cuota de cuenta, si actualizará un recurso que no admite actualizaciones o si no tiene suficientes permisos para modificar un recurso. Todo esto puede causar errores en la actualización de una pila.
-
Inicia el conjunto de cambios que desea aplicar a la pila. CloudFormation actualiza la pila mediante la actualización exclusiva de los recursos que ha modificado y señala que la pila se actualizó correctamente. Si se produce un error en la actualización de la pila, CloudFormation revierte los cambios para restaurar la pila al último estado de funcionamiento conocido.
Eliminar una pila
Al eliminar una pila, debe especificar la pila que se debe eliminar, y CloudFormation elimina la pila y todos los recursos en dicha pila. Puede eliminar pilas mediante la consola de CloudFormation, la operación de API DeleteStack o el comando de la AWS CLI delete-stack.
Si desea eliminar una pila, pero desea conservar algunos recursos de la pila, puede usar una política de eliminación para conservar dichos recursos.
Una vez que se han eliminado todos los recursos, CloudFormation señala que se ha eliminado correctamente su pila. Si CloudFormation no puede eliminar un recurso, no se eliminará la pila. Cualquier recurso que no se haya eliminado permanecerá hasta que pueda eliminar correctamente la pila.