Tutorial: creación de su primera pila - AWS CloudFormation

Tutorial: creación de su primera pila

En este tutorial, creará una pila de CloudFormation con una plantilla de ejemplo que crea recursos para alojar un sitio de blog de WordPress en una instancia EC2.

La plantilla de ejemplo crea una instancia de EC2. AWS CloudFormation es gratuito, pero los recursos de AWS que CloudFormation crea son reales y no se ejecutan en un entorno de pruebas. Usted incurrirá en las tarifas estándar de uso de Amazon EC2 desde el momento en que inicie la instancia hasta que elimine la pila y termine la instancia (que es la tarea final en este tutorial), incluso si permanece inactiva. Para obtener más información acerca de los precios de Amazon EC2, consulte la página Precios de Amazon EC2.

Paso 1: visualización de la plantilla

Puede ver la plantilla de ejemplo de WordPress en JSON. No es necesario descargarla porque utilizará la URL de la plantilla más adelante en esta guía.

La plantilla de ejemplo crea un blog de WordPress básico que utiliza una sola instancia Amazon EC2 con una base de datos de MySQL local para el almacenamiento. También crea un grupo de seguridad de Amazon EC2 para controlar los ajustes del firewall de la instancia de Amazon EC2.

La plantilla de ejemplo incluye seis secciones de nivel superior: AWSTemplateFormatVersion, Description, Parameters, Mappings, Resources y Outputs. Sin embargo, solo se requiere la sección Resources.

La sección Resources contiene las definiciones de los recursos de AWS que desea crear con la plantilla. Cada recurso se muestra por separado y especifica las propiedades necesarias para la creación de ese recurso en particular. La siguiente declaración de recursos es la configuración de la instancia de EC2, que en este ejemplo tiene el nombre lógico WebServer:

ejemplo JSON
"Resources" : { ... "WebServer": { "Type" : "AWS::EC2::Instance", "Properties": { "ImageId" : { "Fn::FindInMap" : [ "AWSRegionArch2AMI", { "Ref" : "AWS::Region" }, { "Fn::FindInMap" : [ "AWSInstanceType2Arch", { "Ref" : "InstanceType" }, "Arch" ] } ] }, "InstanceType" : { "Ref" : "InstanceType" }, "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], "KeyName" : { "Ref" : "KeyName" }, "UserData" : { "Fn::Base64" : { "Fn::Join" : ["", [ "#!/bin/bash -xe\n", "yum update -y aws-cfn-bootstrap\n", "/opt/aws/bin/cfn-init -v ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServer ", " --configsets wordpress_install ", " --region ", { "Ref" : "AWS::Region" }, "\n", "/opt/aws/bin/cfn-signal -e $? ", " --stack ", { "Ref" : "AWS::StackName" }, " --resource WebServer ", " --region ", { "Ref" : "AWS::Region" }, "\n" ]]}} }, ... }, ... "WebServerSecurityGroup" : { "Type" : "AWS::EC2::SecurityGroup", "Properties" : { "GroupDescription" : "Enable HTTP access via port 80 locked down to the load balancer + SSH access", "SecurityGroupIngress" : [ {"IpProtocol" : "tcp", "FromPort" : 80, "ToPort" : 80, "CidrIp" : "0.0.0.0/0"}, {"IpProtocol" : "tcp", "FromPort" : 22, "ToPort" : 22, "CidrIp" : { "Ref" : "SSHLocation"}} ] } }, ... },

Si ha creado antes instancias de EC2, puede reconocer propiedades como, por ejemplo ImageId, InstanceType y KeyName, que determinan la configuración de la instancia. 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 utilizando la plantilla para crear una pila. Cree una nueva pila que utiliza la misma plantilla para lanzar la misma configuración de recursos.

La declaración de recursos comienza con una cadena que especifica el nombre lógico para el recurso. Como verá, es posible utilizar el nombre lógico para hacer referencia a los recursos de la plantilla.

Puede utilizar la sección Parameters para declarar valores que se pueden transferir a la plantilla cuando crea la pila. Un parámetro también constituye una forma eficaz de especificar información confidencial, como los nombres y contraseñas de los usuarios, que no desea almacenar en la propia plantilla. También es una forma de especificar información que podría ser única de la configuración o de la aplicación específica que está implementando, por ejemplo, un nombre de dominio o tipo de instancia. Al crear la pila de WordPress más adelante en esta sección, verá que el conjunto de parámetros declarados en la plantilla aparece en la página Especificar los detalles de la pila del asistente Crear pila, donde puede especificar los parámetros antes de crear la pila.

Los siguientes parámetros se utilizan en la plantilla para especificar valores que se utilizan en las propiedades de la instancia de EC2:

ejemplo JSON
"Parameters" : { ... "KeyName": { "Description" : "Name of an existing EC2 KeyPair to enable SSH access to the instances", "Type": "AWS::EC2::KeyPair::KeyName", "ConstraintDescription" : "must be the name of an existing EC2 KeyPair." }, "InstanceType" : { "Description" : "WebServer EC2 instance type", "Type" : "String", "Default" : "t2.small", "AllowedValues": [ "t1.micro", "t2.nano", "t2.micro", "t2.small", "t2.medium", "t2.large", "m1.small", "m1.medium", "m1.large", "m1.xlarge", "m2.xlarge", "m2.2xlarge", "m2.4xlarge", "m3.medium", "m3.large", "m3.xlarge", "m3.2xlarge", "m4.large", "m4.xlarge", "m4.2xlarge", "m4.4xlarge", "m4.10xlarge", "c1.medium", "c1.xlarge", "c3.large", "c3.xlarge", "c3.2xlarge", "c3.4xlarge", "c3.8xlarge", "c4.large", "c4.xlarge", "c4.2xlarge", "c4.4xlarge", "c4.8xlarge", "g2.2xlarge", "g2.8xlarge", "r3.large", "r3.xlarge", "r3.2xlarge", "r3.4xlarge", "r3.8xlarge", "i2.xlarge", "i2.2xlarge", "i2.4xlarge", "i2.8xlarge", "d2.xlarge", "d2.2xlarge", "d2.4xlarge", "d2.8xlarge", "hi1.4xlarge", "hs1.8xlarge", "cr1.8xlarge", "cc2.8xlarge", "cg1.4xlarge" ], "ConstraintDescription" : "must be a valid EC2 instance type." }, ...

En la declaración de recursos WebServer, es posible ver la propiedad KeyName especificada en el parámetro KeyName:

ejemplo JSON
"WebServer" : { "Type": "AWS::EC2::Instance", "Properties": { "KeyName" : { "Ref" : "KeyName" }, ... } },

Las llaves contienen una llamada a la función intrínseca Ref con KeyName como su entrada. La función Ref devuelve el valor del objeto al que se refiere. En este caso, la función Ref establece la propiedad KeyName al valor especificado para KeyName cuando se creó la pila.

La función Ref también puede establecer la propiedad de un recurso en el valor de otro recurso. Por ejemplo, la declaración de recursos WebServer contiene la siguiente declaración de propiedad:

ejemplo JSON
"WebServer" : { "Type": "AWS::EC2::Instance", "Properties": { ... "SecurityGroups" : [ {"Ref" : "WebServerSecurityGroup"} ], ... } },

La propiedad SecurityGroups toma una lista de los grupos de seguridad de EC2. La función Ref tiene una entrada de WebServerSecurityGroup, que es el nombre lógico de un grupo de seguridad en la plantilla y agrega el nombre de WebServerSecurityGroup a la propiedad SecurityGroups.

En la plantilla, también podrá encontrar una sección denominada Mappings. Puede utilizar asignaciones para declarar valores condicionales que se evalúan de manera similar a una declaración de tabla de búsqueda. La plantilla utiliza asignaciones para seleccionar la imagen de máquina de Amazon (AMI) correcta para la Región y el tipo de arquitectura para el tipo de instancia. Outputs defina los valores personalizados devueltos por el comando describe-stacks de la CLI y en la pestaña Salidas de la consola de CloudFormation, una vez que se ha creado la pila. Puede utilizar valores de salida para devolver información de los recursos de la pila, como la URL de un sitio web que se creó en la plantilla. Se abarcan mapeos, salidas y otros aspectos sobre las plantillas de forma más detallada en Secciones de la plantilla de CloudFormation.

Esto es suficiente, por ahora, con respecto a la plantillas. Comencemos creando una pila.

Paso 2: preparación para lanzar la pila

Antes de crear una pila a partir de una plantilla, debe asegurarse de que todos los recursos dependientes que necesita la plantilla están disponibles. Una plantilla puede utilizar o referirse a recursos de AWS existentes y a recursos declarados en la plantilla misma. CloudFormation se encarga de verificar las referencias a los recursos en la plantilla y también comprueba las referencias a los recursos existentes para asegurarse de que existan en la Región de AWS donde se crea la pila. Si la plantilla se refiere a un recurso dependiente que no existe, la creación de la pila falla.

La plantilla de WordPress de ejemplo contiene un parámetro de entrada, KeyName, que especifica el par de claves utilizado para la instancia Amazon EC2 declarada en la plantilla. La plantilla depende del usuario que crea una pila a partir de la plantilla para suministrar un par de claves de Amazon EC2 válido para el parámetro KeyName. Si proporciona un nombre de par de claves válido, la pila se crea correctamente. Si no proporciona un nombre de par de claves válido, se restaura la pila.

Asegúrese de que tiene un par de claves de Amazon EC2 válido y registre el nombre del par de claves antes de crear la pila.

Para ver los pares de claves, abra la consola de Amazon EC2 y, a continuación, haga clic en Key Pairs (Pares de claves) en el panel de navegación. Si no tiene un par de claves de Amazon EC2, debe crear el par de claves en la misma Región de AWS donde se crea la pila. Para obtener más información sobre la creación de un par de claves, consulte la sección Creación de un par de claves para la instancia de Amazon EC2 en la Guía del usuario de Amazon EC2.

Paso 3: Crear la pila

Creará la pila en función del archivo WordPress-1.0.0 del que hemos hablado anteriormente. La plantilla contiene varios recursos de AWS, como una instancia de EC2.

Creación de la pila de WordPress
  1. Inicie sesión en la AWS Management Console y abra la consola de AWS CloudFormation en https://console.aws.amazon.com/cloudformation.

  2. Elija Crear pila.

  3. En la sección Especificar plantilla, seleccione Especificar una URL de plantilla de Amazon S3 para escribir o pegar la URL de la plantilla de WordPress de ejemplo y, a continuación, elija Siguiente:

    https://s3.us-west-2.amazonaws.com/cloudformation-templates-us-west-2/WordPress_Single_Instance.template

    nota

    Las plantillas de CloudFormation que se almacenan en un bucket de S3 deben ser accesibles para el usuario que crea la pila.

  4. En la sección Especificar detalles de pila, introduzca un nombre de pila en el campo Nombre de pila. Para este ejemplo, use MyWPTestStack. El nombre de la pila no debe contener espacios.

  5. En la sección Parámetros debe proporcionar valores para todos los parámetros que no tengan valores predeterminados, incluidos DBUser, DBPassword, DBRootPassword y KeyName. En el campo KeyName, ingrese el nombre de un par válido de Amazon EC2 en la misma Región de AWS donde se crea la pila.

  6. Elija Siguiente.

  7. En esta situación, no añada ninguna etiqueta. Elija Siguiente. Las etiquetas, que son pares clave-valor, pueden ayudarle a identificar las pilas. Para obtener más información, consulte Configurar las opciones la pila.

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

La pila podría tardar varios minutos en crearse, pero lo más probable es que no desee sentarse a esperar. Si es como nosotros, probablemente quiera saber cómo va la creación de la pila.

Paso 4: Monitorizar el progreso de creación de la pila

Después de completar el asistente para Create Stack (Crear pilas), CloudFormation comienza a crear los recursos que se especifican en la plantilla. La nueva pila, MyWPTestStack, aparece en la lista en la parte superior de la consola de CloudFormation. Su estado debe 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 MyWPTestStack 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:

2013-04-24 18:54 UTC-7 CREATE_IN_PROGRESS AWS::CloudFormation::Stack MyWPTestStack 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:

2013-04-24 18:59 UTC-7 CREATE_COMPLETE AWS::EC2::Instance...

2013-04-24 18:54 UTC-7 CREATE_IN_PROGRESS AWS::EC2::Instance...

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 ha creado el recurso de manera correcta.

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

2013-04-24 19:17 UTC-7 CREATE_COMPLETE AWS::CloudFormation::Stack MyWPTestStack

Si CloudFormation no puede crear un recurso, informa un evento CREATE_FAILED y, por defecto, revierte la pila y elimina cualquier recurso que haya sido creado. La columna Status Reason (Motivo del estado) muestra el problema que ha provocado el error.

Paso 5: Utilizar los recursos de la pila

Cuando la pila MyWPTestStack tiene un estado de CREATE_COMPLETE, CloudFormation ha terminado de crear la pila y puede comenzar a utilizar sus recursos.

La pila de WordPress de ejemplo crea un sitio web de WordPress. Puede continuar con la configuración de WordPress mediante la ejecución del script de instalación de WordPress.

Para completar la instalación de WordPress
  1. En la pestaña Outputs (Salidas), en la fila WebsiteURL, elija el enlace de la columna Value (Valor).

    El valor de salida WebsiteURL es la URL del script de instalación del sitio web de WordPress que creó con la pila.

  2. En la página web para la instalación de WordPress, siga las instrucciones en pantalla para completar la instalación de WordPress. Para obtener más información acerca de la instalación de WordPress, consulte https://wordpress.org/support/article/how-to-install-wordpress/.

    Después de completar la instalación e iniciar sesión, se le dirige al panel donde puede establecer opciones adicionales para su blog de WordPress. A continuación, puede comenzar a escribir publicaciones para el blog que ha creado correctamente mediante una plantilla de CloudFormation.

Paso 6: limpiar

Ha completado las tareas de introducción de CloudFormation. Para asegurarse de que no se le cobra por ningún servicio no deseado, puede realizar una limpieza eliminando la pila y sus recursos.

Eliminación de la pila y sus recursos
  1. Desde la consola de CloudFormation, seleccione la pila MyWPTestStack.

  2. Elija Delete Stack.

  3. En el mensaje de confirmación que aparece, elija Yes, Delete (Si, Eliminar).

El estado de MyWPTestStack cambia a DELETE_IN_PROGRESS. La eliminación de la pila se puede monitorizar en la pestaña Event (Evento) igual que su creación. Cuando CloudFormation completa la eliminación de la pila, quita la pila de la lista.

¡Enhorabuena! Ha seleccionado una plantilla, ha creado una pila, ha visto y utilizado sus recursos, y ha eliminado la pila y los recursos correctamente. Ha llegado el momento de obtener más información acerca de las plantillas para poder modificar fácilmente plantillas existentes o crear las propias: Trabajo con plantillas de CloudFormation.