awscliを使ったRoute53のトラフィックポリシーの作成方法
本来はマネジメントコンソールから設定すると早いのですが、エンドポイントが異なるアカウントの場合、コンソールからリソースを選択できなかったためcliで設定を行ってみました。
とりあえず使いたいコマンドは route53 の create-traffic-policy っぽかったのでhelpを確認。
$ aws route53 create-traffic-policy
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:
aws help
aws <command> help
aws <command> <subcommand> help
aws: error: the following arguments are required: --name, --document
name と document の情報が必要らしい。
document オプションのフォーマットがわからないので、とりあえずドキュメントを読むことに…。
{
"AWSPolicyFormatVersion": "2015-10-01",
"RecordType": "DNS type for all resource record sets created by this traffic policy",
"StartEndpoint | StartRule": "ID that you assign to an endpoint or rule",
"Endpoints": {
"Endpoint ID that you assign": {
Endpoint definition
},
...
},
"Rules": {
"Rule ID that you assign": {
Rule definition
},
...
}
}
Endpoints でエンドポイントを指定して、Rules内でどのような動作をするか記述するみたいです。
RecordType はドキュメントの記述を見ると CNAME以外は大体 Aレコードで大丈夫そう。
CloudFront distribution – Choose A: IP address in IPv4 format.
ELB load balancer – Choose either A: IP address in IPv4 format or AAAA: IP address in IPv6 format.
Amazon S3 bucket configured as a website endpoint: Choose A: IP address in IPv4 format.
Beanstalkの場合の記載などはありませんでしたが、試して見た所こちらも Aレコードで良さそうでした。
とりあえず 70:30 で2つのエンドポイントに対して、レコードを返すweighted recordの設定を行なってみました。
※例のendpointのValueは適当に記載
{
"AWSPolicyFormatVersion": "2015-10-01",
"RecordType": "A",
"Endpoints": {
"endpoint-elb-a": {
"Type": "elastic-load-balancer",
"Value": "dualstack.lb-hoge.ap-northeast-1.elb.amazonaws.com"
},
"endpoint-elb-b": {
"Type": "elastic-load-balancer",
"Value": "dualstack.lb-piyo.ap-northeast-1.elb.amazonaws.com"
}
},
"Rules": {
"weighted-record": {
"RuleType": "weighted",
"Items": [
{
"Weight": "70",
"EvaluateTargetHealth": true,
"EndpointReference": "endpoint-elb-a"
},
{
"Weight": "30",
"EvaluateTargetHealth": true,
"EndpointReference": "endpoint-elb-b"
}
]
}
},
"StartRule": "weighted-record"
}
最後に以下のコマンドで、トラフィックポリシーを作成。
aws route53 create-traffic-policy --name sample-weighted-policy --document file://document.json
動作も問題無さそうでした。