Рубрики
Без рубрики

Amazon Route 53: Как автоматически обновлять IP -адреса без использования Elastic IPS

Вот удобный способ автоматического обновления A-записи в Amazon Route 53 всякий раз, когда экземпляр EC2 CH … Tagged с AWS, Cloud, Python, DNS.

Вот удобный способ автоматического обновления A-записи в Amazon Route 53 всякий раз, когда экземпляр EC2 меняет IP-адрес.

Сценарий: У вас есть доменное имя в Amazon Route 53, указывающем на экземпляр Amazon EC2. Однако, если экземпляр останавливается и запускается, его общедоступный IP -адрес изменяется. Это нарушает рекорд, поскольку он указывает на неправильный IP-адрес.

“Ждать!” Вы можете сказать: «Почему бы просто не использовать упругой IP -адрес?»

(Эластичный IP -адрес это Статический IP -адрес Это может быть назначено ресурсам в Amazon VPC. IP -адрес остается прежним, пока вы не вернете упругой IP -адрес AWS.)

Да, использование упругого IP-адреса в экземпляре предотвратит нарушение A-рекордной. Тем не менее, AWS дает ограничение по умолчанию 5 упругих IP -адресов на регион. Вы можете запросить ограничение ограничения, но что, если вам нужно лоты из них?

Например, сервис может предоставить отдельный экземпляр Amazon EC2 для каждого клиента, чтобы обеспечить безопасное разделение данных. Каждому клиенту дается доменное имя для доступа к своему серверу ( acme.example.com ). Требуемое количество упругих IP -адресов может быть Огромный Анкет

К счастью, существует довольно простой способ достичь цели без необходимости любой Упругие IP -адреса.

Архитектура

Архитектура довольно проста:

  • Когда экземпляр EC2 запускается, он должен получить свой новый общедоступный IP -адрес и обновить свою собственную запись на маршруте 53
  • Имя DNS для обновления хранится в Тег в экземпляре EC2
  • Скрипт должен выполняться каждый раз, когда начинается экземпляр EC2 (то есть каждый Время начинается, а не только первый ботинок)

Реализация

Во -первых, должен быть Установка записей в Amazon Route 53 Это определяет существующее доменное имя.

В настоящее время он указывает на публичный IP -адрес экземпляра EC2.

Затем добавьте несколько тегов в экземпляр EC2, который будет использоваться сценарием:

  • DNS имя: Имя DNS связать с экземпляром
  • Идентификатор размещения зоны: Уникально идентифицирует запись зоны на маршруте 53, которую необходимо обновить (получите ее из записи о размещении зоны маршрута 53)

Всякий раз, когда начинается экземпляр EC2, он будет запускать сценарий, который будет:

  • Возьмите информацию из вышеуказанных тегов
  • Получить текущий общедоступный IP -адрес экземпляра
  • Обновите набор записей Route 53 с новым IP -адресом
#!/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'"}]}}]}'

Чтобы автоматически выполнять скрипт каждый раз, когда начинается экземпляр (в отличие от сценариев пользовательских данных, которые работают только на First Boot), поместите вышеупомянутый скрипт в этом каталоге:

/var/lib/cloud/scripts/pey boot/

Наконец, экземпляр EC2 потребуется назначенная роль IAM, которая имеет разрешение на выполнение вышеуказанных команд:

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "ec2:DescribeTags",
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": "route53:ChangeResourceRecordSets",
            "Resource": "arn:aws:route53:::hostedzone/HOSTED-ZONE-ID"
        }
    ]
}

Как проверить

Чтобы проверить сценарий, просто Стоп экземпляр тогда Старт снова.

Это приведет к тому, что новый публичный IP -адрес будет назначен экземпляру. Сценарий позвонит Amazon Route 53, чтобы обновить набор записей. Это может занять минуту, чтобы обновить.

Затем вернитесь к маршруту 53 и посмотрите на IP-адрес, назначенный A-рекорду. Это должно быть обновлено с помощью нового IP -адреса.

Оригинал: “https://dev.to/aws/amazon-route-53-how-to-automatically-update-ip-addresses-without-using-elastic-ips-h7o”