Introducción a AWS CloudFormation
AWS CloudFormation es un servicio que te permite modelar y configurar tus recursos de AWS para que puedas pasar menos tiempo gestionando esos recursos y más tiempo enfocándote en tus aplicaciones. Con CloudFormation, puedes usar un archivo de texto simple para modelar y aprovisionar todos los recursos necesarios para tus aplicaciones en todas las regiones y cuentas de AWS de manera automatizada y segura.
Conceptos Clave
- Plantillas (Templates): Son archivos JSON o YAML que describen los recursos de AWS que deseas aprovisionar.
- Stacks: Son las unidades de implementación de CloudFormation. Un stack es un conjunto de recursos de AWS que CloudFormation crea y gestiona como una sola unidad.
- Change Sets: Permiten ver cómo los cambios en una plantilla afectarán los recursos existentes antes de aplicar esos cambios.
- Drift Detection: Permite detectar si los recursos de un stack han cambiado de su configuración original.
Ventajas de usar CloudFormation
- Automatización: Provisión y gestión de recursos de manera automatizada.
- Reproducibilidad: Las plantillas permiten reproducir entornos de manera consistente.
- Gestión de cambios: Facilita la gestión de cambios y actualizaciones en los recursos.
- Seguridad: Integración con IAM para controlar el acceso a los recursos.
Creación de una Plantilla Básica
Estructura de una Plantilla
Una plantilla de CloudFormation se compone de varias secciones, aunque no todas son obligatorias. Las secciones más comunes son:
- AWSTemplateFormatVersion: Especifica la versión de la plantilla.
- Description: Proporciona una descripción de la plantilla.
- Parameters: Define los parámetros que puedes pasar a la plantilla.
- Mappings: Define valores estáticos que puedes usar para configurar tus recursos.
- Resources: Especifica los recursos de AWS que deseas crear.
- Outputs: Proporciona información de salida sobre los recursos creados.
Ejemplo de Plantilla en YAML
AWSTemplateFormatVersion: '2010-09-09' Description: Plantilla básica de CloudFormation para crear una instancia EC2 Parameters: InstanceType: Description: Tipo de instancia EC2 Type: String Default: t2.micro AllowedValues: - t2.micro - t2.small - t2.medium ConstraintDescription: Debe ser un tipo de instancia EC2 válido. Resources: MyEC2Instance: Type: 'AWS::EC2::Instance' Properties: InstanceType: !Ref InstanceType ImageId: ami-0c55b159cbfafe1f0 # Amazon Linux 2 AMI Outputs: InstanceId: Description: ID de la instancia EC2 Value: !Ref MyEC2Instance
Explicación del Ejemplo
- Parameters: Define un parámetro
InstanceType
que permite al usuario especificar el tipo de instancia EC2. - Resources: Define un recurso
MyEC2Instance
de tipoAWS::EC2::Instance
con propiedades comoInstanceType
yImageId
. - Outputs: Proporciona el ID de la instancia EC2 creada.
Implementación de un Stack
Paso a Paso
- Crear la Plantilla: Guarda la plantilla YAML en un archivo, por ejemplo,
ec2-instance.yaml
. - Subir la Plantilla a S3 (opcional): Si la plantilla es grande, puedes subirla a un bucket de S3.
- Crear el Stack:
- Ve a la consola de CloudFormation.
- Haz clic en "Create stack".
- Selecciona "With new resources (standard)".
- Sube el archivo de la plantilla o proporciona la URL de S3.
- Proporciona un nombre para el stack.
- Configura los parámetros si es necesario.
- Revisa y crea el stack.
Ejemplo de Creación de Stack usando AWS CLI
aws cloudformation create-stack --stack-name MyEC2Stack --template-body file://ec2-instance.yaml --parameters ParameterKey=InstanceType,ParameterValue=t2.micro
Ejercicio Práctico
Ejercicio 1: Crear una Plantilla para un Bucket S3
Objetivo: Crear una plantilla de CloudFormation que cree un bucket de S3 con una política de acceso público.
Pasos
- Crear la Plantilla: Escribe una plantilla YAML que defina un bucket de S3 y una política de acceso público.
- Implementar el Stack: Usa la consola de CloudFormation o AWS CLI para crear el stack.
Solución
AWSTemplateFormatVersion: '2010-09-09' Description: Plantilla para crear un bucket S3 con acceso público Resources: MyS3Bucket: Type: 'AWS::S3::Bucket' Properties: BucketName: my-public-bucket BucketPolicy: Type: 'AWS::S3::BucketPolicy' Properties: Bucket: !Ref MyS3Bucket PolicyDocument: Version: '2012-10-17' Statement: - Effect: Allow Principal: '*' Action: 's3:GetObject' Resource: !Sub 'arn:aws:s3:::${MyS3Bucket}/*' Outputs: BucketName: Description: Nombre del bucket S3 Value: !Ref MyS3Bucket
Ejemplo de Creación de Stack usando AWS CLI
Conclusión
En esta sección, hemos aprendido los conceptos básicos de AWS CloudFormation, cómo crear una plantilla básica y cómo implementar un stack. AWS CloudFormation es una herramienta poderosa para automatizar la provisión y gestión de recursos en AWS, permitiendo a los desarrolladores y administradores de sistemas enfocarse en tareas más críticas y menos repetitivas. En el siguiente tema, exploraremos AWS Elastic Beanstalk, que simplifica la implementación y gestión de aplicaciones en la nube.
Curso de AWS
Módulo 1: Introducción a AWS
- ¿Qué es AWS?
- Configuración de tu cuenta de AWS
- Infraestructura global de AWS
- Consola de administración de AWS