Cómo automatizar tus recursos de AWS con plantillas de CloudFormation

AWS CloudFormation es un servicio que permite a los administradores de sistemas configurar y administrar toda una colección de recursos de AWS -incluidas sus configuraciones, dependencias e interrelaciones entre ellos- en una sola declaración. También pueden realizar cambios en la infraestructura existente sin detener ni volver a desplegar las aplicaciones que se ejecutan sobre ella.

AWS Cloudformation te permite configurar tu infraestructura como código. Se trata básicamente de un motor de infraestructura como código que funciona en la nube y ayuda a los usuarios a aprovisionar y administrar recursos informáticos, de almacenamiento y de otro tipo. Una plantilla de CloudFormation es un archivo JSON con directivas sobre cómo crear o actualizar recursos de AWS. Podemos utilizar AWS CLI, AWS SDKs como boto3, o el servicio AWS CloudFormation para crear plantillas.

CloudFormation proporciona muchas ventajas como

  • Facilidad de uso: CloudFormation utiliza un formato de plantilla que te permite describir todos los atributos y relaciones de tus recursos de AWS en un solo lugar.
  • Agilidad de salida al mercado: CloudFormation te permite construir e implementar tus recursos de AWS como código.
  • Alto nivel de automatización: CloudFormation transforma el código de alto nivel en un conjunto de plantillas sencillas que pueden utilizarse para crear o actualizar recursos de AWS.

Si buscas automatizar tus despliegues de cargas de trabajo en AWS, utilizar CloudFormation es una de las mejores formas de hacerlo.

En este artículo, te mostraremos una suave introducción a CloudFormation y utilizaremos CloudFormation para automatizar tus recursos de AWS. Esta guía utiliza recursos S3 para hacer una demostración. Después de este tutorial, serás capaz de crear, actualizar y eliminar una serie de recursos de AWS utilizando CloudFormation. También podrás aprender a empezar a crear tu propia plantilla de CloudFormation.

Requisitos previos

Para seguir este tutorial, necesitas los siguientes requisitos previos:

  • AWS CLI instalado en tu máquina local en la versión 1.6.1 o superior y configurado con una región por defecto. La misma versión también debe estar configurada para Python 2.6 o 3+.
  • Un conocimiento básico de los servicios de AWS y algo de experiencia en la consola de AWS.

Crear tu primera pila

Ahora que ya tienes listos los requisitos previos, vamos a empezar por configurar y crear tu primera pila.

1. Abre tu navegador favorito. Navega hasta este repositorio de GitHub y descarga tres archivos en tu disco duro local.

  • creapila.json
  • updatestack1.json
  • actualizapila2.json

descargar tres archivos

2. Ahora,navega a tu Consola de AWS —> CloudFormation.

navega hasta tu CloudFormation.

3. Verás la siguiente pantalla. Haz clic en Crear pila —> Con nuevos recursos.

crear una pila

4. Verás la siguiente pantalla. Haz clic en La plantilla está lista —> Sube un archivo de plantilla —> Elige Archivo —-> Elige tu archivocreatestack.json que descargaste antes—> Siguiente.

Cuando creas una nueva pila, debes proporcionar una plantilla para tu pila. Puedes hacerlo de tres formas:

  • La plantilla está lista: elige esta opción si ya tienes tu plantilla a mano. Si no, pasa a la siguiente opción.
  • Utilizar una plantilla de ejemplo: utiliza esta opción para tener una ventaja a la hora de crear tu plantilla. La guía del usuario de AWS proporciona varios ejemplos de plantillas de CloudFormation.
  • Crear una plantilla en Designer: AWS CloudFormation Designer es la forma más novedosa de crear tu pila. Utiliza una interfaz de arrastrar y soltar, similar a otras herramientas populares como Sharepoint, para ayudarte a crear tu plantilla.

Esta demo utiliza la primera opción, «La plantilla está lista», puesto que ya tienes las plantillas a mano (los archivos que descargaste en tu disco).

crear una pila

Puedes abrir el archivo createstack.json en tu editor para echarle un vistazo. Verás las siguientes líneas en el archivo createstack. json.

  • «Recursos»: { es la sección que crea AWS CloudFormation. Es una agrupación de todos los recursos físicos que vas a crear.
  • «catpics»: es el recurso lógico, siendo su tipo un Bucket de S3.
  • «Tipo»: «AWS::S3::Bucket»: es el recurso físico que creará AWS CloudFormation.

abre el archivo createstack.json en tu editor

5. En la siguiente pantalla, proporciona un nombre para tu pila(htf) y haz clic en Siguiente. Cada pila requiere un nombre único dentro de la región de AWS para que puedas diferenciarlas. Aquí no puedes utilizar caracteres especiales, sólo letras, números y guiones bajos (sin espacios). AWS genera automáticamente un ID de pila único para facilitar su identificación.

crear una pila

6. En la siguiente pantalla, mantén los valores predeterminados y haz clic en Siguiente.

crear una pila

7. En la siguiente pantalla, mantén los valores predeterminados yhaz clic en Crear pila.

crear una pila

En este punto, AWS CloudFormation carga la plantilla y crea la pila por ti. CloudFormation recorre todas y cada una de las secciones de la plantilla y crea un recurso físico correspondiente para ella. En algunos casos, AWS CloudFormation realizará varias comprobaciones en tu plantilla para asegurarse de que todo está en su sitio. Si encuentra algo incorrecto, recibirás un mensaje de error que describe cuál es el problema y cómo solucionarlo.

El proceso de creación tarda unos 4-5 minutos en crearse. Puedes ver lo que está pasando mirando el estado de la pila en tu panel de CloudFormation, como se muestra a continuación. Puedes ver los recursos lógicos catpics en la parte izquierda, y en cada uno de estos recursos, puedes ver los recursos físicos que AWS CloudFormation está creando para ellos(CREATE_IN_PROGRESS).

crear una pila

Puedes navegar a la pestaña de recursos para ver los recursos físicos que se están creando para esta pila. En este caso, se trata de unBucket S3 llamado catpics con ID de recursos físicos de htf-catpics-1roqn54xwm3of, como se muestra a continuación.

crear una pila

8. Ahora, navega a tu panel de control de S3. En tu panel de control de S3, puedes ver los objetos que se están creando en el bucket. En este caso, el nombre de la pila para el cubo de S3 es htf-catpics-1roqn54xwm3of, como puedes ver a continuación.

 navega a tu panel S3

Puedes ver que el nombre del cubo sigue este patrón: tu nombre de pila(htf)-tu nombre lógico de pila(catpics)-una cadena aleatoria(1roqn54xwm3de). Es muy importante que conozcas este patrón. Cuando no especificas los ID de tus recursos físicos en la plantilla, AWS CloudFormation utiliza este patrón para crear el nombre de tus recursos. El poder de esto es que ahora puedes utilizar la misma plantilla para crear varias pilas; ¡AWS CloudFormation se encargará automáticamente de darles un nombre único por ti!

Para un servicio como S3, un nombre único es muy importante; el nombre del bucket debe ser globalmente único para que puedas almacenar datos en él. Los nombres de tus cubos no pueden ser iguales. No podrás introducir objetos en el cubo si intentas nombrarlo con el mismo nombre.

Es importante entender por qué esto es importante. Porque con CloudFormation, se recomienda no nombrar explícitamente el ID del recurso físico en tu plantilla. En su lugar, deja que AWS CloudFormation cree uno automáticamente por ti. Esto significa que puedes reutilizar tu plantilla para crear varias pilas con diferentes recursos sin preocuparte por conflictos de nombres. Puedes utilizar tu plantilla una vez, diez veces o cien, y CloudFormation gestionará los cambios de nombre en consecuencia.

Actualizar tu pila

Ahora que has creado tu primera pila utilizando AWS CloudFormation, vamos a examinar cómo actualizar la pila. Cómo actualizar una pila es un concepto muy importante de entender, tanto para el uso en producción como para tu examen. Probablemente te pedirán en el examen que cambies algo en tu plantilla, o quizás necesites actualizar algo en tu pila.

En esta sección, vas a hacer algunos cambios en la plantilla, y utilizarás esas plantillas actualizadas para actualizar tu pila y evaluar qué cambios se hacen en tus recursos.

Generalmente, al actualizar pilas en CloudFormation. Tomarás la plantilla que utilizaste para crear una pila y añadirás nuevos recursos, actualizarás los existentes o los eliminarás.

1. Abre el archivo updatestack1.json que descargaste anteriormente en tu editor, verás los siguientes bloques de código. Comparemos esta plantilla con la plantilla createstack. json que utilizaste antes. Puedes ver que añadiremos un recurso lógico adicional llamado dogpics. Y lo que es más importante, no se han realizado cambios en ningún recurso lógico existente, que es el ya existente catpics. Los recursos catpics no se han modificado ni eliminado. Sólo voy a añadir un recurso lógico adicional, que es dogpics.

 Abre el archivo updatestack1.json

2. Navega a tu panel de CloudFormation. Selecciona tu stack(htf) y haz clic en Actualizar.

Actualizar tu pila

3. En la siguiente pantalla, selecciona Reemplazar plantilla actual —> Subir un archivo de plantilla —> Elegir archivo —> Selecciona tu archivo updatestack1.json —> Siguiente.

Actualizar tu pila

4. En la siguiente pantalla, haz clic en Siguiente —> Siguiente —> Actualizar pila, como se muestra a continuación. Puedes ver que CloudFormation te muestra los cambios que se van a realizar. En este caso, hemos añadido un ID lógico llamado dogpics. CloudFormation también nos muestra la acción que se va a realizar(Añadir), y el tipo de Recurso Lógico(AWS::S3::Bucket). La columna Reemplazo está en blanco.

Actualizar tu pila

Al igual que cuando creas una pila, puedes ver los eventos de actualización desde la página de la pila. Todas las actualizaciones se están realizando desde CloudFormation. En este caso, se le pasa un ID de recurso lógico adicional, que es dogpics.

Actualizar tu pila

Una vez finalizado el proceso de actualización, puedes ver a continuación que tenemos tanto el recurso catpics como el dogpics en nuestra pila.

Actualizar tu pila

Navega a tu panel de control de S3, y podrás ver que se ha creado un bucket dogpics adicional llamado htf-dogpics-4qesklu84ugq. Puedes ver que la nomenclatura del cubo sigue el mismo patrón nombre de pila-nombre lógico de pila-cadena aleatoria.

Actualizar tu pila

En este punto, sólo añadimos nuevos recursos lógicos a nuestros recursos, lo que es bastante sencillo y de bajo riesgo. Ahora te mostraremos cómo eliminar recursos de tu pila.

Eliminaremos el recurso dogpics de nuestra pila. Esto es más arriesgado que añadir, porque eliminar recursos podría romper tu pila. Como aún estamos aprendiendo, vamos a practicar borrando nuestro recurso dogpics para ver qué ocurre

5. Ve a tu panel de CloudFormation. Selecciona tu pila htf, haz clic en Actualizar —> Reemplazar plantilla actual —> Elegir archivo —> esta vez seleccionaremos de nuevo el archivo createstack.json —> Siguiente —> Siguiente —> Siguiente.

Actualizar tu pila

6. En la siguiente pantalla, haz clic en Actualizar pila. Bajo la Vista Previa del Conjunto de Cambios, puedes ver que la columna Acción ahora es: Eliminar. En este caso, CloudFormation elimina el recursodogpics y los recursos físicos correspondientes(htf-dogpics-4qesklu84ugq).

Actualizar tu pila

Navega a tu panel de control de S3, podrás ver que el bucket dogpics ya no está en tu panel de control de S3.

Actualizar tu pila

Verás el evento DELETE_COMPLETE en tu evento Stack.

Actualizar tu pila

Eliminar recursos lógicos es un poco arriesgado porque puede borrar cosas, pero ese riesgo sólo está asociado a los recursos lógicos que hayas eliminado de la plantilla (los recursos dogpics). Hasta ahora, no hemos hecho ningún cambio en ninguno de los otros recursos lógicos existentes, como los recursos catpics. Así que los recursos físicos catpics no pueden verse afectados por ninguna actualización de la pila. Existe otra opción para actualizar la pila. Utilizando esta opción, podríamos cambiar la configuración de un recurso lógico existente.

7. Abre el archivo updatestack2.jsonque descargaste antes en tu editor, verás el siguiente bloque de código.

El archivo updatestack2.json tiene un aspecto muy similar a la plantilla createstack.json que utilizaste antes, salvo por dos diferencias importantes. Volvemos a añadir el segundo recurso lógico, dogpics. Pero también hemos hecho un cambio en catpics.

Hemos añadido una sección adicional de la configuración, que se llama Propiedades, donde podemos definir propiedades adicionales para un determinado recurso lógico. En este caso, crearemos un bucket S3. Establecemos explícitamente el nombre del bucket del recurso físico como catsareawesome-howtoforge.

Actualizar tu pila

8. Navega a tu panel de CloudFormation. Selecciona tuhtfy haz clic enActualizar—>Sustituir la plantilla actual—>Eligearchivo—> esta vez seleccionaremos el archivoupdatestack2.json—>Siguiente —> Siguiente —> Siguiente.

Actualizar tu pila

9. En la siguiente pantalla, haz clic en Actualizar pila . Fíjate en el panel Vista previa del conjunto de cambios , puedes ver cuál va a ser el efecto de esta actualización.

El primer cambio parece familiar. Vamos a añadir un recurso lógico adicional para dogpicsque será un bucket S3. Pero también vemos una acción Modificar. Y modificar es en realidad lo más arriesgado que puedes hacer a una pila de CloudFormation.

La razón es que los recursos existentes, que están en su lugar y potencialmente en uso por otros entornos, podrían ser modificados por la actualización de la pila. Así que modificar los recursos lógicos existentes es potencialmente más arriesgado.

Hay 3 posibilidades de que un recurso físico se vea afectado cuando actualizas una pila de esta forma. La primera posibilidad es que el recurso se actualice sin ninguna interrupción del servicio.

La segunda posibilidad es que el recurso se actualice y el servicio se vea interrumpido por algún nivel de perturbación. Por ejemplo, cuando actualizas tu pila para cambiar el tamaño de tu instancia EC2. Cuando hagas esto, tendrás que reiniciar tu instancia EC2 manualmente. Se lanzará una nueva AMI y puede que experimentes algún tiempo de inactividad. Pero una vez lanzada la nueva AMI, tu servicio estará disponible inmediatamente.

La última posibilidad es que la actualización elimine todo tu recurso físico existente y lo sustituya por unonuevo. Esta es la posibilidad más arriesgada al actualizar tu pila de CloudFormation. Debes prestar mucha atención cuando hagas esto. Cuando se produzca este tipo de sustitución, la columna Sustitución será Verdadera, como se muestra en la siguiente captura de pantalla.

Actualizar tu pila

En tu panel de Pilas de CloudFormation, puedes ver que dice «La actualización solicitada requiere la creación de un nuevo recurso físico; por lo tanto, crea uno». Así que CloudFormation elimina el recurso existente y crea uno nuevo.

Actualizar tu pila

Navega a tu panel de control de S3 y verás que el bucket catpics ha desaparecido y se ha creado uno nuevo, catsareawesome-howtoforge. Ten en cuenta que proporcionamos explícitamente el nombre físico(catsareawesome-howtoforge) para un recurso dentro de una plantilla de CloudFormation, no aplica ningún carácter aleatorio al nombre del recurso.

Actualizar tu pila

El problema es que si utilizamos esta plantilla para crear otra pila de CloudFormation, fallaría porque intentaría crear otro cubo exactamente con el mismo nombre. Y no puedes tener 2 buckets con el mismo nombre en ninguna cuenta de AWS. Obtendrás el siguiente error cuando intentes crear otro bucket con exactamente el mismo nombre.

Borrar tus pilas de CloudFormation

Ahora que hemos cambiado la plantilla y actualizado nuestra pila, tenemos que asegurarnos de que borramos la pila cuando hayamos terminado de trabajar en ella. Si no borramos la pila no utilizada, permanecerá indefinidamente en nuestro panel de Pila de CloudFormation. Tendríamos que entrar manualmente y borrarla.

En tu panel de CloudFormation, selecciona tu pila y, a continuación, Eliminar. Cuando CloudFormation elimina la pila, también elimina todos los recursos de esa pila. No hay forma de eliminar sólo un recurso, como el cubo S3 o la instancia EC2. Esta acción se realiza por diseño.

Borrar tus pilas de CloudFormation

Conclusión

En esta guía hemos visto cómo se crean y modifican las pilas de CloudFormation. Hemos visto algunas de las formas de cambiar las plantillas y cómo actualizar las pilas existentes. Después hemos visto algunas de las posibilidades asociadas a la actualización de pilas. Y por último, vimos cómo eliminar las pilas de CloudFormation después de haber terminado de trabajar en ellas.

Deja un comentario a continuación si tienes alguna pregunta o sugerencia. ¡Gracias por leernos!

También te podría gustar...