En el siguiente artículo se explica cómo automatizar la asignación de una Elastic IP (EIP) en una instancia Spot Request de AWS, mediante la creación de una política de IAM y la adición de un simple comando en el campo de «user data» al lanzar la instancia. Este procedimiento también puede ser útil para instancias que no sean Spot, pero se destaca por su eficacia al automatizar despliegues de este tipo (Spot Instances) sin tener que preocuparse por si AWS requiere nuestra EC2. De esta manera, la instancia se levantará automáticamente con la IP correcta.

El primer paso consiste en crear una política de IAM que permita el acceso de AWS para modificar las direcciones IP:

podemos utilizar el siguiente JSON al momento de crear la política de IAM:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "AllowEC2AssociateAddress",
            "Effect": "Allow",
            "Action": [
                "ec2:AssociateAddress"
            ],
            "Resource": [
                "*"
            ]
        }
    ]
}

Una vez creada la política, debemos incluirla en nuestra solicitud de Spot (Spot Request) o en la EC2 que deseamos lanzar:

Además, es necesario agregar el siguiente comando en la configuración del campo «user data», el cual se ejecutará al lanzar la EC2:

#!/bin/bash
aws ec2 associate-address --instance-id $(curl -s http://169.254.169.254/latest/meta-data/instance-id) --public-ip <IP> --region us-east-2 

En este comando, debemos reemplazar «<IP>» por la dirección IP elástica (EIP) que deseamos asignar.

El comando anterior recupera el ID de instancia de la EC2 recién creada utilizando metadatos a través de «curl -s http://169.254.169.254/latest/meta-data/instance-id» y le asigna la dirección IP pública definida.

Mediante esta configuración, podemos lograr un gran ahorro al utilizar instancias Spot para nuestros despliegues, asegurándonos de que, en caso de que AWS requiera la instancia, la EC2 que se levante automáticamente contará con la EIP correcta.