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

  1. Plantillas (Templates): Son archivos JSON o YAML que describen los recursos de AWS que deseas aprovisionar.
  2. 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.
  3. Change Sets: Permiten ver cómo los cambios en una plantilla afectarán los recursos existentes antes de aplicar esos cambios.
  4. 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 tipo AWS::EC2::Instance con propiedades como InstanceType y ImageId.
  • Outputs: Proporciona el ID de la instancia EC2 creada.

Implementación de un Stack

Paso a Paso

  1. Crear la Plantilla: Guarda la plantilla YAML en un archivo, por ejemplo, ec2-instance.yaml.
  2. Subir la Plantilla a S3 (opcional): Si la plantilla es grande, puedes subirla a un bucket de S3.
  3. 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

  1. Crear la Plantilla: Escribe una plantilla YAML que defina un bucket de S3 y una política de acceso público.
  2. 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

aws cloudformation create-stack --stack-name MyS3Stack --template-body file://s3-bucket.yaml

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.

© Copyright 2024. Todos los derechos reservados