У меня две учетные записи AWS, старая и новая.
У меня есть размещенная ЗОНА на старой учетной записи в службе Route 53.
Я хочу полностью перенести его со старого на новый.
Как мне это сделать ? Есть ли какие-либо заранее определенные шаги для такого случая?
Обратите внимание, что размещенная зона используется в реальной среде. Я не могу рисковать методом проб и ошибок.
Вы также можете использовать jq ("sed for 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 blob ваших записей, который очень близок к формату, который вам понадобится повторно импортировать в новую зону, используя change-resource-record-sets
команда. Просмотрите документацию, изучив выходной формат list-resource-record-sets
и формат ввода change-resource-record-sets
и будет понятно, что вам нужно сделать, чтобы импортировать записи.
После того, как у вас есть записи в новой зоне, обновите регистратора доменов, чтобы он указывал на набор серверов имен Route53 для этой зоны.
Я только что создал инструмент для этой самой проблемы.
https://github.com/andersjanmyr/route53copy
$ route53copy
Usage: 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 непосредственно из веб-консоли (столбец «Идентификатор размещенной зоны» на предыдущем изображении) или с вашего терминала: $ aws route53 list-hosted-zones --profile account1
.
это --profile account1
option - это ссылка на конфигурацию потенциально нескольких учетных записей, изначально хранящуюся в папке ~ / .aws: files 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 из учетной записи1 в каждый объект, начиная с "Action"
в JSON для отправки на аккаунт 2. Затем отправляем его так:
$ aws route53 change-resource-record-sets --hosted-zone-id Z3IVB20ZV4QU6O --change-batch file://adaptedfile.json --profile account2
Обратите внимание, что файлы в интерфейсе командной строки aws ссылаются на file: // схема.
Бонусный совет: если вы столкнетесь с ошибками, вы можете добавить --debug
вариант, который может помочь вам понять, что не так.