Как вы указали, вы можете использовать сценарий пользовательских данных для запуска конфигурации, чтобы при запуске автоматического масштабирования нового экземпляра сценарий повторно присоединял IP-адрес Elasti c или обновлял DNS-имя Route 53.
Чтобы присоединить IP-адрес Elasti c, сценарию потребуется получить собственный идентификатор экземпляра, а затем выполнить команду присоединения:
#!/bin/bash
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id/)
aws ec2 associate-address --allocation-id xxx --instance-id $INSTANCE_ID
В качестве альтернативы вы можете указать имя DNS. связан с экземпляром, и при запуске экземпляра обновите DNS-имя, чтобы оно указывало на экземпляр.
С Amazon Route 53: Как автоматически обновлять IP-адреса без использования Elasti c IPs - DEV Сообщество :
#!/bin/bash
# Extract information about the Instance
INSTANCE_ID=$(curl -s http://169.254.169.254/latest/meta-data/instance-id/)
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone/)
MY_IP=$(curl -s http://169.254.169.254/latest/meta-data/public-ipv4/)
# Extract tags associated with instance
ZONE_TAG=$(aws ec2 describe-tags --region ${AZ::-1} --filters "Name=resource-id,Values=${INSTANCE_ID}" --query 'Tags[?Key==`AUTO_DNS_ZONE`].Value' --output text)
NAME_TAG=$(aws ec2 describe-tags --region ${AZ::-1} --filters "Name=resource-id,Values=${INSTANCE_ID}" --query 'Tags[?Key==`AUTO_DNS_NAME`].Value' --output text)
# Update Route 53 Record Set based on the Name tag to the current Public IP address of the Instance
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_TAG --change-batch '{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"'$NAME_TAG'","Type":"A","TTL":300,"ResourceRecords":[{"Value":"'$MY_IP'"}]}}]}'
Не существует "элегантного" способа автоматического выполнения этого типа операции для группы автоматического масштабирования.