AWS Группа автоматического масштабирования с одним желаемым экземпляром и без балансировщика нагрузки - PullRequest
0 голосов
/ 12 марта 2020

Запуск системы, разработанной с CloudFormation, которая недавно пережила серию неудачных аппаратных сбоев. Для экономической эффективности этой не очень используемой системы она поддерживается только одним экземпляром и не использует балансировщик нагрузки. Я хочу добавить группу автоматического масштабирования, чтобы убедиться, что по крайней мере не требуется ручного вмешательства для реагирования на подобные ошибки в будущем. Однако, поскольку система общедоступна, экземпляр должен иметь связанный elasti c IP, с чем я и борюсь. Моя идея состояла в том, что IP будет просто повторно привязан к новому экземпляру после его запуска. Не нужно заботиться о пользовательских сеансах, и т. Д. c здесь.

Насколько я знаю, невозможно настроить один elasti c IP для повторного использования в группе автоматического масштабирования (которая Я понимаю, я знаю, что это нишевый вариант использования). Поэтому я попытался повторно связать IP во время CloudFormation :: Init. Есть ли более элегантное решение?

1 Ответ

1 голос
/ 13 марта 2020

Как вы указали, вы можете использовать сценарий пользовательских данных для запуска конфигурации, чтобы при запуске автоматического масштабирования нового экземпляра сценарий повторно присоединял 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'"}]}}]}'

Не существует "элегантного" способа автоматического выполнения этого типа операции для группы автоматического масштабирования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...