¿Qué es CloudFormation?
CloudFormation es el servicio de Amazon AWS que permite crear recursos de manera automática a partir de una plantilla escrita en JSON o YAML. Yo voy a utilizar JSON para añadir una nueva instancia EC2 dentro de un VPC que ya existe para no complicarlo demasiado y que se entienda mejor.
Podemos complicar las plantillas de CloudFormation todo lo que queramos.
Conocer el ID del VPC de AWS
Primero de todo, voy a mostrar el ID del VPC que ya tengo creado, así como los IDs del grupo de seguridad, subred a la que va a pertenecer la nueva instancia y la AMI que voy a utilizar para crearla.
Creación de la plantilla JSON para Cloud Formation
Una vez que ya tenemos los IDs de todos los recursos donde vamos a ubicar nuestra instancia, vamos a proceder a crear la plantilla en JSON para automatizar su creación con CloudFormation:
{
Pasamos como parámetro el ID del VPC
«Parameters» : {
«VPCID» : {
«Type» : «AWS::EC2::VPC::Id»,
«Description» : «Select Virtual Private Cloud ID»,
«Default» : «vpc-1c99ee7b«
},
Indicamos la subred donde va a estar ubicada la instancia
«Subnet» : {
«Type» : «List<AWS::EC2::Subnet::Id>»,
«Description» : «Availables subnets»,
«Default» : «subnet-a1a9dde8«
}
},
Creamos la instancia EC2 a partir de una AMI existente
«Resources» : {
«ec2prt53ws1test»: {
«Type»: «AWS::EC2::Instance»,
«Properties»: {
«AvailabilityZone»: «eu-west-1a»,
«ImageId»: «ami-0f787c3b4e39b11e7«,
«InstanceType»: «t2.small»,
«Tags»: [
{
«Key»: «Customer»,
«Value»: «Puerto53.com»
}
],
Definimos el grupo de seguridad
«NetworkInterfaces» : [{
«AssociatePublicIpAddress» : «true»,
«DeviceIndex» : «0»,
«DeleteOnTermination» : «true»,
«SubnetId» : «subnet-a1a9dde8»,
«GroupSet» : [ «sg-341e2b4c» ]
}]
}
}
}
}
Esta es una plantilla muy sencilla y faltan algunas cosas pero el objetivo es entender el funcionamiento de CloudFormation.
Despliegue de la plantilla de CloudFormation para crear los recursos de EC2 automáticamente
Una vez la tenemos creada, la subimos a un bucket S3 y lanzamos el Stack, que se encarga de crear en paralelo todos los recursos de AWS que acabamos de definir.
Entramos en el servicio CloudFormation y hacemos click en el botón «Create Stack».
Seleccionamos la URL de la plantilla que hemos subido al bucket S3.
Aparecen los parámetros por defecto que hemos definido en la plantilla.
Cuando hacemos click en el botón de creación del stack, vemos en la pestaña de eventos como se empiezan a crear cada uno de los recursos.
Si vamos a la consola de EC2, veremos cómo nuestra instancia ya se está creando con los parámetros que hemos configurado.
Finalmente, como esto sólo era un test de aprendizaje, elimino el stack, el cual, también elimina los recursos que hemos creado.
Uso de variables con CloudFormation
Imaginemos que ahora queremos poder elegir el tipo de instancia que queremos crear desde un desplegable con una serie de tipos de instancias a elegir:
La plantilla JSON quedaría de la siguiente manera (marco en rojo donde definimos las variables y la referenciamos):
{
«Parameters» : {
«VPCID» : {
«Type» : «AWS::EC2::VPC::Id»,
«Description» : «Select Virtual Private Cloud ID»,
«Default» : «vpc-1c99ee7b»
},
«Subnet» : {
«Type» : «List<AWS::EC2::Subnet::Id>»,
«Description» : «Availables subnets»,
«Default» : «subnet-a1a9dde8»
},
«InstanceTypeParameter» : {
«Type» : «String»,
«Default» : «t2.small»,
«AllowedValues» : [«t2.small», «t2.micro», «m1.small», «m1.large»],
«Description» : «Enter t2.small, t2.micro, m1.small, or m1.large. Default is t2.small.»
}
},
«Resources» : {
«ec2prt53ws1test»: {
«Type»: «AWS::EC2::Instance»,
«Properties»: {
«ImageId»: «ami-0f787c3b4e39b11e7»,
«InstanceType»: { «Ref» : «InstanceTypeParameter» },
«Tags»: [
{
«Key»: «Customer»,
«Value»: «Puerto53.com»
}
],
«NetworkInterfaces» : [{
«AssociatePublicIpAddress» : «true»,
«DeviceIndex» : «0»,
«DeleteOnTermination» : «true»,
«SubnetId» : «subnet-a1a9dde8»,
«GroupSet» : [ «sg-341e2b4c» ]
}]
}
}
}
}
Mi pasión por la tecnología me lleva constantemente a explorar las últimas tendencias y aplicaciones, buscando siempre formas de implementar soluciones innovadoras que mejoren la eficiencia. En puerto53.com comparto contenido valioso para ayudar a otros profesionales y entusiastas de la informática a navegar y dominar el complejo mundo de la tecnología. Mi especialidad en Linux RedHat.
Más sobre mí en el este enlace,