Creación de su primera pila - AWS CloudFormation

Creación de su primera pila

En este tema se explica cómo crear su primera pila de CloudFormation con la AWS Management Console. Si sigue este tutorial, obtendrá información sobre cómo aprovisionar recursos básicos de AWS, supervisar los eventos de la pila y generar resultados.

Para este ejemplo, la plantilla de CloudFormation está escrita en YAML. YAML es un formato legible por humanos que se usa ampliamente para definir la infraestructura como código. Al obtener más información sobre CloudFormation, es posible que también encuentre otras plantillas en formato JSON, pero para este tutorial, se elige YAML por su legibilidad.

Si tiene interés en un curso guiado y práctico para probar CloudFormation, consulte el taller Introducción a AWS CloudFormation.

nota

CloudFormation es gratuito, pero se le cobrarán los recursos de Amazon EC2 y Amazon S3 que cree. Sin embargo, si es la primera vez que utiliza AWS, puede aprovechar el nivel gratuito para minimizar o eliminar los costos durante este proceso de aprendizaje.

Requisitos previos

  • Debe tener acceso a una Cuenta de AWS con un usuario o rol de IAM que tenga permisos para usar Amazon EC2, Amazon S3 y CloudFormation, o acceso de usuario administrativo.

  • Debe tener una nube privada virtual (VPC) que tenga acceso a Internet. Para simplificar, puede usar la VPC predeterminada que se incluye automáticamente con su cuenta. La VPC predeterminada y las subredes predeterminadas bastan para este ejercicio.

Creación de una pila de CloudFormation con la consola

Creación de una pila de CloudFormation Hello world con la consola
  1. Abra la Consola de CloudFormation.

  2. Elija Crear pila.

  3. En la página Crear pila, seleccione Crear a partir de Infrastructure Composer y, a continuación, Cree en Infrastructure Composer. De esta forma, accederá a Infrastructure Composer en el modo de consola de CloudFormation, donde puede cargar y validar la plantilla de ejemplo.

  4. Para cargar y validar la plantilla de ejemplo, haga lo siguiente:

    1. Elija Plantilla. A continuación, copie y pegue la siguiente plantilla de CloudFormation en el editor de plantillas:

      AWSTemplateFormatVersion: 2010-09-09 Description: CloudFormation Template for WebServer with Security Group and EC2 Instance Parameters: LatestAmiId: Description: The latest Amazon Linux 2 AMI from the Parameter Store Type: 'AWS::SSM::Parameter::Value<AWS::EC2::Image::Id>' Default: '/aws/service/ami-amazon-linux-latest/amzn2-ami-hvm-x86_64-gp2' InstanceType: Description: WebServer EC2 instance type Type: String Default: t2.micro AllowedValues: - t3.micro - t2.micro ConstraintDescription: must be a valid EC2 instance type. MyIP: Description: Your IP address in CIDR format (e.g. 203.0.113.1/32). Type: String MinLength: '9' MaxLength: '18' Default: 0.0.0.0/0 AllowedPattern: '^(\d{1,3}\.){3}\d{1,3}\/\d{1,2}$' ConstraintDescription: must be a valid IP CIDR range of the form x.x.x.x/x. Resources: WebServerSecurityGroup: Type: AWS::EC2::SecurityGroup Properties: GroupDescription: Allow HTTP access via my IP address SecurityGroupIngress: - IpProtocol: tcp FromPort: '80' ToPort: '80' CidrIp: !Ref MyIP WebServer: Type: AWS::EC2::Instance Properties: ImageId: !Ref LatestAmiId InstanceType: !Ref InstanceType SecurityGroupIds: - !Ref WebServerSecurityGroup UserData: !Base64 | #!/bin/bash yum update -y yum install -y httpd systemctl start httpd systemctl enable httpd echo "<html><body><h1>Hello World!</h1></body></html>" > /var/www/html/index.html Outputs: WebsiteURL: Value: !Join - '' - - http:// - !GetAtt WebServer.PublicDnsName Description: Website URL

      Antes de avanzar al siguiente paso, dediquemos un momento a echar un vistazo a la plantilla y comprender algunos conceptos clave de CloudFormation.

      • En la sección Parameters se declaran valores que se pueden transferir a la plantilla cuando crea la pila. Los recursos especificados más adelante en la plantilla hacen referencia a estos valores y utilizan los datos. Los parámetros son un método efectivo para especificar información que no desea almacenar en la propia plantilla. También sirven para especificar información que podría ser única de la configuración o de la aplicación específica que está implementando.

      • La plantilla define los siguientes parámetros:

        • LatestAmiId: recupera el ID de la AMI de Amazon Linux 2 más reciente del Almacén de parámetros de AWS Systems Manager.

        • InstanceType: permite seleccionar el tipo de instancia de EC2 (valor predeterminado: t2.micro, valores permitidos: t3.micro, t2.micro).

        • MyIP: especifica el rango de direcciones IP para el acceso HTTP (el valor predeterminado es 0.0.0.0/0, que permite acceder desde cualquier IP).

      • La sección Resources contiene las definiciones de los recursos de AWS que desea crear con la plantilla. Las declaraciones de recursos son una forma eficaz de especificar todos estos ajustes de configuración a la vez. Cuando incluye declaraciones de recursos en una plantilla, puede crear y configurar todos los recursos declarados si utiliza la plantilla para crear una pila. También puede crear nuevas pilas a partir de la misma plantilla para lanzar configuraciones de recursos idénticas.

      • Esta plantilla crea los siguientes recursos:

        • WebServerSecurityGroup: grupo de seguridad de EC2 que permite el tráfico HTTP de entrada en el puerto 80 desde el rango de IP especificado.

        • WebServer: instancia de EC2 con la siguiente configuración:

          • Usa la AMI de Amazon Linux 2 más reciente.

          • Aplica el tipo de instancia seleccionado.

          • Agrega WebServerSecurityGroup a la propiedad SecurityGroupIds.

          • Incluye un script de datos de usuario para instalar Apache HTTP Server.

      • Se especifica un nombre lógico al principio de cada declaración de recursos y parámetros. Por ejemplo, WebServerSecurityGroup es el nombre lógico asignado al recurso del grupo de seguridad de EC2. A continuación, la función Ref se utiliza para hacer referencia a los recursos y parámetros mediante sus nombres lógicos en otras partes de la plantilla. Cuando un recurso hace referencia a otro, se crea una dependencia entre ellos.

      • En la sección Outputs se definen los valores personalizados que se devuelven después de crear la pila. Puede usar los valores de salida para devolver información de los recursos de la pila, como identificadores de recursos o URL.

      • La plantilla define una salida:

        • WebsiteURL: URL del servidor web implementado, que se crea con el nombre de DNS público de la instancia de EC2. La función Join ayuda a combinar el parámetro fijo http:// con el parámetro variable PublicDnsName en una sola cadena, lo que facilita la obtención de la URL completa del servidor web.

    2. Seleccione Validate para asegurarse de que el código YAML sea válido antes de cargar la plantilla.

    3. A continuación, seleccione Create template para crear la plantilla y agregarla a un bucket de S3.

    4. Tome nota del nombre del bucket de S3 que aparecen en el cuadro de diálogo que se abre para poder eliminarlo posteriormente. A continuación, seleccione Confirm and continue to CloudFormation. De esta forma, accede a la consola de CloudFormation, donde ahora se especifica la ruta de S3 a su plantilla.

  5. En la página Crear pila, seleccione Siguiente.

  6. En la página Especificar los detalles de la pila, escriba un nombre en el campo Nombre de la pila. El nombre de la pila no debe contener espacios. Para este ejemplo, use MyTestStack.

  7. En Parámetros, especifique los valores de los parámetros de la siguiente manera:

    • LatestAmiId: se define de forma predeterminada en la AMI de Amazon Linux 2 más reciente.

    • InstanceType: elija t2.micro o t3.micro para el tipo de instancia de EC2.

      nota

      Si es la primera vez que utiliza AWS, puede usar el nivel gratuito para lanzar y usar una instancia t2.micro de forma gratuita durante 12 meses (en regiones donde t2.micro no esté disponible, puede usar una instancia t3.micro del nivel gratuito).

    • MyIP: especifique su dirección IP pública real con un sufijo /32. El sufijo /32 se usa en la notación CIDR para especificar que se permite una sola dirección IP. Básicamente, esto significa permitir el tráfico solo hacia y desde esta dirección IP específica.

  8. Seleccione Siguiente dos veces para ir a la página Revisar y crear. Para este tutorial, puede dejar los valores predeterminados en la página Configurar opciones de pila tal y como están.

  9. Revisión de la información de la pila. Cuando esté satisfecho con la configuración, haga clic en Submit (Enviar).

Supervisión de la creación de una pila

Al seleccionar Enviar, CloudFormation comienza a crear los recursos que se especifican en la plantilla. La nueva pila, MyTestStack, aparece en la lista en la parte superior de la consola de CloudFormation. El estado debería ser CREATE_IN_PROGRESS. Puede ver el estado detallado de una pila visualizando sus eventos.

Visualización de los eventos de la pila
  1. En la consola de CloudFormation, seleccione la pila MyTestStack en la lista.

  2. En el panel de detalles de la pila, elija la pestaña Events (Eventos).

    La consola actualiza automáticamente la lista de eventos con los últimos eventos cada 60 segundos.

La pestaña Events (Eventos) muestra todos los pasos importantes de la creación de la pila ordenados por la hora de cada evento, con los últimos eventos en la parte superior.

El primer evento (en la parte inferior de la lista de eventos) es el comienzo del proceso de creación de la pila:

2024-12-23 18:54 UTC-7 MyTestStack CREATE_IN_PROGRESS User initiated

A continuación se encuentran los eventos que señalan el comienzo y la finalización de la creación de cada recurso. Por ejemplo, la creación de la instancia de EC2 produce las siguientes entradas:

2024-12-23 18:59 UTC-7 WebServer CREATE_COMPLETE

2024-12-23 18:54 UTC-7 WebServer CREATE_IN_PROGRESS Resource creation initiated

El evento CREATE_IN_PROGRESS se registra cuando CloudFormation informa que ha comenzado a crear el recurso. El evento CREATE_COMPLETE se registra cuando se crea correctamente el recurso.

Una vez que CloudFormation haya creado correctamente la pila, verá el siguiente evento en la parte superior de la pestaña Events (Eventos):

2024-12-23 19:17 UTC-7 MyTestStack CREATE_COMPLETE

Si CloudFormation no puede crear un recurso, informa de un evento de CREATE_FAILED y, de forma predeterminada, restaura la pila y elimina todos los recursos que se han creado. La columna Status Reason (Motivo del estado) muestra el problema que ha provocado el error.

Una vez creada la pila, puede ir a la pestaña Recursos para ver la instancia de EC2 y el grupo de seguridad que creó.

Prueba del servidor web

Una vez que la pila se haya creado correctamente, vaya a la pestaña Salidas de la consola de CloudFormation. Busque el campo WebsiteURL. Contendrá la URL pública de su instancia de EC2.

Abra un navegador y vaya a la URL que aparece en WebsiteURL. Debería ver un mensaje sencillo ("Hello World!") en el navegador.

De esta forma, se confirma que su instancia de EC2 ejecuta Apache HTTP Server y presenta una página web básica.

Limpieza

Para asegurarse de que no se le cobra por ningún servicio no deseado, puede realizar una limpieza eliminando la pila y sus recursos. También puede eliminar el bucket de S3 que almacena la plantilla de la pila.

Eliminación de la pila y sus recursos
  1. Abra la Consola de CloudFormation.

  2. En la página Pilas, seleccione la opción situada junto al nombre de la pila que ha creado (MyTestStack) y, a continuación, seleccione Eliminar.

  3. Cuando se le pida confirmación, seleccione Eliminar.

  4. Supervise el progreso del proceso de eliminación de la pila en la pestaña Evento. El estado de MyTestStack cambia a DELETE_IN_PROGRESS. Cuando CloudFormation completa la eliminación de la pila, quita la pila de la lista.

Si ha terminado de trabajar con la plantilla de ejemplo y ya no necesita el bucket de Amazon S3, elimínelo. Para eliminar un bucket, primero debe vaciarlo. Al vaciar un bucket, se eliminan todos los objetos que incluye.

Vaciado y eliminación del bucket de Amazon S3
  1. Abra la consola de Amazon S3.

  2. En el panel de navegación del lado izquierdo de la consola, elija Buckets (Buckets).

  3. En la lista Buckets, seleccione la opción situada junto al nombre del bucket que ha creado para este tutorial y, a continuación, seleccione Vaciar.

  4. En la página Vaciar bucket, confirme que desea vaciar el bucket escribiendo permanently delete en el campo de texto y, a continuación, elija Vaciar.

  5. Supervise el progreso del proceso de vaciado del bucket en la página Vaciado del bucket: estado.

  6. Para volver a la lista de buckets, seleccione Salir.

  7. Seleccione la opción situada junto al nombre del bucket y, a continuación, seleccione Eliminar.

  8. Cuando se le pida la confirmación, escriba el nombre del bucket y, a continuación, seleccione Eliminar bucket.

  9. Supervise el progreso del proceso de eliminación del bucket en la lista Buckets. Cuando Amazon S3 completa la eliminación del bucket, lo elimina de la lista.

Pasos a seguir a continuación

¡Enhorabuena! Ha creado correctamente una pila, ha supervisado su creación y ha utilizado su salida. Para obtener más información sobre las plantillas para que pueda crear la suya propia, consulte Trabajo con plantillas de CloudFormation.

Para ver más tutoriales que se centren en ejemplos más complejos del uso de CloudFormation, consulte Tutoriales de CloudFormation.