AWS Route 53: Как полностью перенести хостинг-зону из одной учетной записи в другую?

Вопрос или проблема

У меня есть два аккаунта AWS: старый и новый.

У меня есть размещенная ЗОНА в старом аккаунте под управлением сервиса Route 53.

Я хочу полностью мигрировать ее из старого аккаунта в новый.

Как я могу это сделать? Есть ли заранее определенные шаги для такого случая?

Обратите внимание, что размещенная зона используется в рабочей среде. Я не могу слишком рисковать с пробами и ошибками.

Вы также можете использовать jq (“sed для JSON”), чтобы преобразовать JSON-вывод list-resource-record-sets в JSON-вход для change-resource-record-sets:

jq '.ResourceRecordSets 
  |{"Changes":[.[] 
  |select(.Type!="SOA") 
  |select(.Type!="NS") 
  |{"Action":"CREATE","ResourceRecordSet":.}]}' 

Это предполагает, что вы уже создали новую размещенную зону и что она пуста, кроме записей SOA и NS, которые, следовательно, удаляются из JSON-файла. (Переносы строк для удобочитаемости; удалите их при использовании команды.)

Это тривиально с использованием AWS CLI. Сначала получите идентификатор вашей размещенной зоны:

$ aws route53 list-hosted-zones
{
    "HostedZones": [
         {
            "ResourceRecordSetCount": 15,
            "CallerReference": "A5A5A3AF-C239-39FB-DA4C-556BA9FD1767",
            "Config": {},
            "Id": "/hostedzone/Z1LVCQHJBJUCM5",
            "Name": "example.com."
        }
    ]
}

Затем экспортируйте список ресурсов для этой размещенной зоны:

$ aws route53 list-resource-record-sets --hosted-zone Z1LVCQHJBJUCM5

Это выдаст JSON-блок ваших записей, который очень близок к формату, необходимому для повторного импорта в новую зону, используя команду change-resource-record-sets. Просмотрите документацию, изучая формат вывода list-resource-record-sets и входной формат change-resource-record-sets, и будет ясно, что нужно сделать для импорта записей.

Как только у вас будут записи в новой зоне, обновите регистратора домена, чтобы указать на набор серверов имен Route53 для этой зоны.

Я только что создал инструмент для этой проблемы.

https://github.com/andersjanmyr/route53copy


$ route53copy
Использование: route53copy-linux <source_profile> <dest_profile> <domain>

Более актуальный ответ. Вот как я это сделал без внешних инструментов, только с aws и текстовым редактором.

Сначала, согласно документации CLI: “Вы не можете создать размещенную зону для верхнего уровня домена (TLD), такого как .com” (или .org, .net и т.д.).

Ничего страшного, перейдите в новый аккаунт и создайте его вручную, это простая задача:

введите описание изображения здесь

Теперь, когда вы создали размещенную зону, нужно только заполнить ее записями. Итак, получите записи из старого аккаунта в .json файл для удобства:

$ aws route53 list-resource-record-sets --hosted-zone YOURHOSTZONEID --output json --profile account1 > records.json

Вы можете получить свой YOURHOSTZONEID непосредственно из веб-консоли (“Hosted Zone ID” столбец на предыдущем изображении) или из терминала: $ aws route53 list-hosted-zones --profile account1.

Этот параметр --profile account1 является ссылкой на потенциально множественную конфигурацию аккаунтов, хранящуюся изначально в папке ~/.aws: файлы config и credentials. Если вы не настроили их, вы можете отредактировать оба файла вручную (добавив все аккаунты, которые хотите, включая IAM), но я рекомендую использовать $ aws configure, как объяснено здесь.

Теперь, когда вы используете любую команду aws с конкретным --profile, она будет знать, какой аккаунт вы хотите использовать.

JSON, который мы скачали, необходимо “адаптировать” к фактической структуре JSON, которую ожидает change-resource-record-sets. По какой-то причине использование --generate-cli-skeleton должно предоставить вам образец, чтобы знать, какая структура ожидается. Тем не менее, в этом случае она отличается (и, следовательно, неверна) от ожидаемой (которую вы можете найти здесь, первый пример JSON). Это уменьшенная и немного скрытая версия, но с правильной структурой:

{
  "Comment": "",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "domain.org.",
        "Type": "A",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "11.111.111.111"
          }
        ]
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "domain.org.",
        "Type": "MX",
        "TTL": 300,
        "ResourceRecords": [
          {
            "Value": "20 mx1.domain.com"
          },
          {
            "Value": "10 mx2.domain.com"
          },
          {
            "Value": "50 mx3.domain.com"
          }
        ]
      }
    },
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "domain.org.",
        "Type": "NS",
        "TTL": 172800,
        "ResourceRecords": [
          {
            "Value": "number.awsdns-28.com."
          },
          {
            "Value": "number.awsdns-23.org."
          },
          {
            "Value": "number.awsdns-31.co.uk."
          },
          {
            "Value": "number.awsdns-49.net."
          }
        ]
      }
    }
  ]
}

Как видите, вам нужно вставить каждый ResourceRecordSets‘ JSON из account1 в каждый объект, начиная с "Action" в JSON, который нужно отправить в account2. Затем мы отправим это так:

$ aws route53 change-resource-record-sets --hosted-zone-id Z3IVB20ZV4QU6O --change-batch file://adaptedfile.json --profile account2

Обратите внимание, что файлы в aws CLI ссылаются с помощью схемы file://.

Бонусный совет: если вы столкнетесь с ошибками, вы можете добавить параметр --debug, который может помочь вам выяснить, что не так.

Здесь вы можете найти решение для автоматизации этого:

https://repost.aws/articles/ART6hB9UmXR46LVC7CjwzV-Q

Наслаждайтесь! 🙂

Ответ или решение

Для миграции хостинговой зоны из одной учетной записи AWS в другую вам потребуется следовать ряду четких шагов, поскольку процесс требует внимательности, особенно если хостинговая зона используется в рабочей среде. Рассмотрим этот процесс детально и поэтапно.

Шаг 1: Подготовьте новую учетную запись

Перед тем как начинать миграцию, убедитесь, что в вашей новой учетной записи AWS создана пустая хостинговая зона. Обратите внимание, что вы не сможете создать хостинговую зону для верхнеуровневого домена (TLD) через AWS CLI; это необходимо сделать через веб-интерфейс консоли AWS.

  1. Зайдите в консоль AWS в новую учетную запись.
  2. Перейдите к Route 53 и создайте новую хостинговую зону, указав имя домена.

Шаг 2: Получите данные из старой учетной записи

Теперь вам нужно извлечь записи DNS из существующей хостинговой зоны. Для этого выполните следующие команды в AWS CLI:

  1. Найдите идентификатор хостинговой зоны в старой учетной записи:

    aws route53 list-hosted-zones --profile old_account
  2. Получите все ресурсы (записи) из хостинговой зоны:

    aws route53 list-resource-record-sets --hosted-zone-id <YOUR_HOSTED_ZONE_ID> --output json --profile old_account > records.json
  3. Откройте файл records.json в текстовом редакторе для редактирования.

Шаг 3: Подготовьте данные для загрузки

Вам необходимо адаптировать полученные данные для правильного формата команд change-resource-record-sets. Используйте jq для фильтрации и преобразования записей, исключая записи типа SOA и NS, которые не следует добавлять в новую хостинговую зону:

jq '.ResourceRecordSets | {"Changes":[.[] | select(.Type!="SOA") | select(.Type!="NS") | {"Action":"CREATE","ResourceRecordSet": .}]}' records.json > adapted_records.json

Шаг 4: Импортируйте записи в новую учетную запись

Теперь, когда у вас есть файл с записями в правильном формате, вы можете загрузить их в новую учетную запись:

  1. Выполните команду для добавления записей в новую хостинговую зону:
    aws route53 change-resource-record-sets --hosted-zone-id <NEW_HOSTED_ZONE_ID> --change-batch file://adapted_records.json --profile new_account

Шаг 5: Обновите DNS-серверы у регистратора доменов

После успешного переноса записей DNS, вам нужно обновить записи Name Server (NS) у вашего регистратора доменов, чтобы они соответствовали NS-записям новой хостинговой зоны. Это ключевой шаг, так как он позволит вашему домену использовать новую инфраструктуру DNS.

Шаг 6: Тестирование

После обновления NS-записей проверьте, что все записи DNS работают корректно:

  • Используйте инструменты, такие как dig или nslookup, чтобы убедиться, что записи правильно разрешаются.
  • Убедитесь, что ваше приложение функционирует как ожидалось.

Вывод

Миграция хостинговой зоны в AWS требует внимательности и точности, особенно когда речь идет о рабочей среде. Следуя вышеописанным шагам, вы сможете без проблем перенести вашу хостинговую зону. Обязательно протестируйте все изменения и обновления, чтобы убедиться в бесперебойной работе вашего веб-сервиса.

Оцените материал
Добавить комментарий

Капча загружается...