¿Cómo abrir instancias de AWS EC2 con Terraform?

La automatización puede ahorrarle tiempo, dinero y disminuir los errores. Una herramienta popular destinada a ayudar en ese objetivo es Terraform.

Terraform está destinado a la creación de versiones de la infraestructura a través de la configuración como código. Otra práctica común es trasladar las cargas de trabajo locales a la nube, y una de las más importantes es Amazon Web Services (AWS).

Además de ofrecer un sólido servicio de máquina virtual (VM) llamado Amazon Elastic Compute Cloud tiene la capacidad de automatizar la implementación de instancias EC2 a través de Terraform.

En este artículo, exploramos un ejemplo práctico de implementación de una instancia EC2 utilizando la herramienta Terraform en AWS.

Terraform

Para automatizar la infraestructura, una herramienta que puede construir, cambiar y versionar esa configuración es crucial para el éxito, en lo que Terraform sobresale.

Hay cuatro pasos para crear e implementar una instancia EC2:

  • Instalar e inicializar Terraform
  • Definir las credenciales y crear la configuración de Terraform
  • Planificar la configuración de Terraform (es decir, validar)
  • Aplicar la configuración de Terraform

Configuración de Terraform

Antes de hacer cualquier otra cosa, debes descargar Terraform y colocarlo en una ubicación que esté dentro de la variable ambiental de ruta del sistema (o modificar la ruta para incluir la ubicación binaria de Terraform).

Afortunadamente, Terraform se distribuye como un solo binario, ¡Lo que también hace que sea muy fácil de actualizar!

Cartas credenciales

Primero, debes definir las credenciales o cómo Terraform accederá realmente a tu entorno de AWS. Existen algunas opciones para almacenar tus credenciales, pero se recomienda enfáticamente que no codifiques las credenciales en tu archivo de configuración.

Existen formas más seguras, que revisaremos a continuación y las mantienen fuera del control de tu versión.

Dos posibles opciones son definir las claves de acceso dentro de las variables ambientales o dentro de un archivo de secretos en el disco. Ambos se mantienen fuera de tu control de versiones.

Veamos cómo definir las credenciales a través de las variables ambientales.

$ export AWS_ACCESS_KEY_ID="AWSAccessKey"
$ export AWS_SECRET_ACCESS_KEY="AWSSecretKey"
$ export AWS_DEFAULT_REGION="us-west-2"

Si quieres usar las credenciales anteriores dentro de un archivo de configuración, define al proveedor awssin ninguna opción. La ventaja de usar variables ambientales es que no se almacenan credenciales en el disco.

Terraform sabe buscar esos nombres ambientales cuando se ejecuta para el proveedor de aws, la desventaja es que las credenciales solo están disponibles mientras se ejecuta la sesión.

provider "aws" {}

Más comúnmente, las credenciales se almacenan en disco en una ubicación predeterminada. En Linux, esa ubicación es ~/.aws/credentials.

Si quieres crear el archivo por tu propia cuenta, debes seguir el siguiente formato:

[default]
aws_access_key_id=AWSAccessKey
aws_secret_access_key=AWSSecretKey

Si tienes la CLI de AWS instalada, puede ejecutarla aws configure y generar ese archivo por tu cuenta. Como puedes ver, en el archivo se define la región dentro del proveedor de aws y el perfil por default que debe coincidir con lo definido en el archivo de credentials.

Además, también debes definir una región para que Terraform sepa dónde crear los recursos.

provider "aws" {
  region                  = "us-west-2"
  profile                 = "default"
}

Iniciando Terraform

A continuación, debes inicializar Terraform. Si no lo has hecho, crea un archivo [provision.tf](http://provision.tf) en tu directorio de trabajo.

Dentro del archivo, coloca la información provider como se creó anteriormente, utilizando cualquier método que conozcas.

Ejecuta el comando terraform init en la misma ubicación donde se definió la configuración. Terraform configura algunos archivos y configuraciones locales para permitir que se ejecute correctamente.

Ahora, puedes continuar con la definición de tus credenciales y configuración.

Esto instalará los proveedores, a saber (AWS) pero solo si tienes un archivo .tf que contiene el proveedor básico dentro del directorio en el que estás trabajando.

Definición de tu configuración

Ahora que has configurado tus credenciales, estás listo para definir tu instancia EC2. Vas a crear una instancia t2.micro bastante simple con la última imagen de Ubuntu.

Debes tener un par de cosas a tener en cuenta en la siguiente configuración. Primero, está la sección data donde se está extrayendo la AMI que deseas usar.

Cuando se ejecuta Terraform, utilizarás esta información para buscar realmente en el catálogo de AMI de AWS, deberás encontrar la AMI y devolver el ID para usarlo dentro de la variable data.aws_ami.ubuntu.id.

Para desglosar la búsqueda que estás haciendo dentro de la sección de datos, consulta los siguientes pasos:

  1. Usando most_recent = true devuelva el resultado más reciente si se devuelven varias AMI.
  2. Filtra el namede la AMI para que coincida con ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*
  3. Finalmente, asegúrate de que owners sea el de la propia AMI, en este caso, 099720109477 data “aws_ami” “ubuntu” { most_recent = truefilter { name = “name” values = [“ubuntu/images/hvm-ssd/ubuntu-bionic-18.04-amd64-server-*”] }owners = [“099720109477”] }.

Ahora que has recuperado una AMI para su uso, define la instancia EC2 que vas a crear. Usando una configuración muy simple, usa la ID que se definió dentro de tu sección data, usa una instance_typede t2.micro y etiqueta la instancia como LinuxVM.

Eso es todo lo que se necesita para una implementación muy básica de una instancia.

resource "aws_instance" "web" {
  ami           = data.aws_ami.ubuntu.id
  instance_type = "t2.micro"

  tags = {
    Name = "LinuxVM"
  }
}

Muchos ejemplos muestran ${data.aws_ami.ubuntu.id} pero en versiones recientes, si tienes un valor de solo interpolación (es decir, solo un valor envuelto ${} es el valor), entonces puedes omitir el ajuste ${} y dejar las comillas.

Planificación de tu configuración

Ahora que tus secciones de datos y recursos están definidas, necesitas ver cuál es el plan para este cambio de configuración.

Al ejecutar el comando terraform plan, puedes verificar cómo se verá realmente la salida. La salida se trunca para facilitar la lectura.

user@computer# ./terraform plan
Refreshing Terraform state in-memory prior to plan...
...

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.web will be created
  + resource "aws_instance" "web" {
      + ami                          = "data.aws_ami.ubuntu.id"
      + arn                          = (known after apply)
      + associate_public_ip_address  = (known after apply)
...

Plan: 1 to add, 0 to change, 0 to destroy.

Aplicar tu configuración

Si todo lo anterior se ve bien, continúa y aplica tus cambios de configuración y aprovisiona tu instancia EC2 usando el comando terraform apply.

Como puedes ver en el siguiente resultado, Terraform muestra las acciones que se están realizando y los errores que se producen. La salida se trunca para facilitar la lectura.

user@computer:~/work# ./terraform apply
data.aws_ami.ubuntu: Refreshing state...

An execution plan has been generated and is shown below.
Resource actions are indicated with the following symbols:
  + create

Terraform will perform the following actions:

  # aws_instance.web will be created
  + resource "aws_instance" "web" {
      + ami                          = "ami-0a7d051a1c4b54f65"
...
      + instance_type                = "t2.micro"
...
      + tags                         = {
          + "Name" = "LinuxVM"
        }
...
Plan: 1 to add, 0 to change, 0 to destroy.

Do you want to perform these actions?
  Terraform will perform the actions described above.
  Only 'yes' will be accepted to approve.

  Enter a value: yes

aws_instance.web: Creating...
aws_instance.web: Still creating... [10s elapsed]
aws_instance.web: Still creating... [20s elapsed]
aws_instance.web: Still creating... [30s elapsed]
aws_instance.web: Creation complete after 35s [id=i-0b1758ce816b4d346]

Apply complete! Resources: 1 added, 0 changed, 0 destroyed.

Terraform y AWS

Mover la configuración de los recursos de AWS a Terraform permite realizar un seguimiento de tus cambios a través del control de versiones y crear configuraciones repetibles para facilitar la implementación de los recursos.

Muchos recursos y fuentes de datos están disponibles dentro del proveedor de AWS. Aún más útil es la capacidad de definir toda la infraestructura, AWS u otra, a través de una configuración de Terraform.

¡Con esta flexibilidad, encontrarás que Terraform ahorra una gran cantidad de tiempo y esfuerzo en el futuro!

Relacionado

Amazon anuncia 300.000 bases de datos migradas a través de su herramienta DMS

En el intento de Amazon por liderar el mundo de las bases de datos y ser capaz de superar a Oracle, Amazon anuncia que ha alcanzado las 300.000 migraciones de bases de datos. Desde Amazon Web Services anuncian que más de 300.000 bases de datos se han migrado a su plataforma en la nube utilizando AWS Database Migration Service. Amazon DMS se lanzó en marzo de ¡SEGUIR LEYENDO!

Amazon lanza una Nube Independiente para Europa buscando Abordar los Estrictos Estándares de Privacidad

La nueva nube de AWS permitirá a los clientes conservar todos los metadatos que creen en la Unión Europea y tendrá sus propios sistemas de facturación y medición de uso. Amazon está implementando una nube independiente para Europa, ya que busca abordar las estrictas regulaciones que enfrentan las empresas y el sector público en la Unión Europea. Amazon Web Services anunció recientemente que su AWS European ¡SEGUIR LEYENDO!

Amazon Web Services alcanza acuerdos con la NHL y el PGA Tour

Amazon Web Services está ampliando su alcance en el panorama deportivo profesional, anunciando dos importantes nuevas asociaciones desde que Andy Jassy, comenzó a ser el nuevo CEO de Amazon. Amazon alcanzó importantes acuerdos con el PGA Tour y la Liga Nacional de Hockey, para ser el proveedor oficial de sus infraestructura en la nube, la inteligencia artificial y el aprendizaje automático. Estos dos últimos acuerdos, se ¡SEGUIR LEYENDO!

Arrestado un hombre por intentar atentar contra Internet

El FBI arresta a un hombre con intenciones de explosionar uno de los centros de datos de Amazon Web Services más importantes del mundo. El hombre, arrestado en el estado de Texas el Jueves pasado, planificaba un ataque con bombas explosivas a un centro de AWS. El centro de datos elegido era el situado en Ashburn, Virginia. El terrorista, Seth Aaron Pendley de 28 años, fue ¡SEGUIR LEYENDO!

Amazon AWS lanza instancias específicas para trabajar sobre Apple

Amazon AWS anuncia nuevas instancia Mac EC2 M1 para trabajar con vistas previas y testing en sistemas iPhone, iPad, Mac, Apple Watch, y Apple TV. Las instancias Mac EC2 son computadoras Mac mini dedicadas conectadas a través de Thunderbolt al sistema AWS Nitro, que permite que la Mac mini aparezca y se comporte como otra instancia EC2. Se conecta a Amazon Virtual Private Cloud (VPC) y ¡SEGUIR LEYENDO!

Controladores de Amazon Web Services desde el contenedor de Kubernetes (ACK)

Los controladores de AWS para Kubernetes (ACK) son una nueva herramienta que permite administrar directamente los servicios de AWS desde Kubernetes. ACK simplifica la creación de aplicaciones de Kubernetes escalables y de alta disponibilidad que utilizan los servicios de Amazon Web Services. Hoy, ACK está disponible como una vista previa para los desarrolladores en GitHub. En esta publicación, vamos a dar una breve introducción a la ¡SEGUIR LEYENDO!

AWS invierte 100 millones de dólares de IA generativa

En un emocionante giro de los acontecimientos para la industria de la IA, la unidad de nube de Amazon, Amazon Web Services (AWS), ha anunciado su compromiso de 100 millones de dólares para establecer un centro dedicado a la inteligencia artificial generativa. Este movimiento estratégico, que puede parecer modesto dadas las importantes reservas de efectivo de Amazon, sin embargo, señala el reconocimiento de AWS de la ¡SEGUIR LEYENDO!

Deja un comentario

Salir de la versión móvil