IAMポリシーの設定
更新には route53:ChangeResourceRecordSets
アクションが必要。
進捗確認もするなら route53:GetChange
アクションが必要。
Route53のリソースレベルパーミッションでは、レコード単位の指定はできないのでホステッドゾーンまで指定。
Using IAM to Control Access to Amazon Route 53 Resources
AWS Services That Work with IAM
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": "route53:ChangeResourceRecordSets",
"Resource": "arn:aws:route53:::hostedzone/XXXXXXXXXXXXXX"
},
{
"Effect": "Allow",
"Action": "route53:GetChange",
"Resource": "arn:aws:route53:::change/*"
}
]
}
更新リクエスト用のJSONを用意
形式については aws route53 change-resource-record-sets help
か AWS CLIのドキュメント を参照。
UPSERT
があって便利。
r53.json
{
"Comment" : "",
"Changes" : [
{
"Action" : "UPSERT",
"ResourceRecordSet" : {
"Name" : "my.example.com",
"Type" : "A",
"TTL" : 300,
"ResourceRecords" : [
{
"Value": "0.0.0.0"
},
{
"Value": "0.0.0.0"
}
]
}
}
]
}
更新リクエストを送る
awscli
$ aws route53 change-resource-record-sets --hosted-zone-id XXXXXXXXXXXXXX --change-batch file://r53.json
リクエストが受け付けられると PENDING
ステータスになる。
Idは進捗確認に必要なのでメモっておく。
response
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "comment",
"SubmittedAt": "2015-08-05T00:00:00.000Z",
"Id": "/change/XXXXXXXXXXXXX"
}
}
進捗確認
awscli
$ aws route53 get-change --id /change/XXXXXXXXXXXXX
まだ PENDING
だが、この時点で一部更新されている可能性はある。
response
{
"ChangeInfo": {
"Status": "PENDING",
"Comment": "comment",
"SubmittedAt": "2015-08-05T00:00:00.000Z",
"Id": "/change/XXXXXXXXXXXXX"
}
}
INSYNC
ステータスになったら完了。
Route53のDNSサーバは全て更新されている。
response
{
"ChangeInfo": {
"Status": "INSYNC",
"Comment": "comment",
"SubmittedAt": "2015-08-05T00:00:00.000Z",
"Id": "/change/XXXXXXXXXXXXX"
}
}