AWS is functionally very nice, but the docs are…improvable. Thus the need for me to write down things which should be simple but are not:
Updating DNS Records
Very easy to do in the GUI. Tricky the first time you try this from the aws CLI.
I got a delegated zone aws.XXX. (I own XXX and i delegated aws.XXX. to AWS Route53) and when I boot my (special) EC2 instance, I’d like it to update the DNS record ec2.aws.XXX. accordingly.
Here the needed batch file (stored in the file “dnsupdate.json”)
{
"Comment": "Updating my EC2 instance DNS record",
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "ec2.aws.XXX.",
"Type": "A",
"TTL": 300,
"ResourceRecords": [
{
"Value": "34.207.167.92"
}
]
}
}
]
}
Pitfall 1: “Name” is the full FQDN. Get your current IP via
curl http://169.254.169.254/latest/meta-data/public-ipv4
Then update via aws CLI:
aws route53 change-resource-record-sets --hosted-zone-id Z1KXXXXXXXXXX \
--change-batch file:///home/ec2-user/dnsupdate.json
Pitfall 2: The batch file location MUST NOT be the simple “dnsupdate.json” but it MUST BE “file://absolute/path/to/the/file.json”. Otherwise you get the totally unhelpful error message
aws route53 change-resource-record-sets --hosted-zone-id Z1KXXXXXXXXXX \
--change-batch dnsupdate.json
Error parsing parameter '--change-batch': Expected: '=', received: 'EOF' for input:
dnsupdate.json
^