ec2 instance 開機更新 Route 53

有一 ec2 instance 僅需要在每天工作時間開機就好,其他時間則是關機的狀態
Lambda 設好後就一直在找如何開機自動去更新 Route 53 的 A record,但不知道是不是這個太過於基礎,所以沒什麼人寫(但還是被我找到了~haha)

需要一個 shellscript,一個 json 以及 IAM 權限

shellscript 如下:
#!/bin/sh

if [ -z "$1" ]; then
    echo "IP not given...trying EC2 metadata...";
    IP=$( curl http://169.254.169.254/latest/meta-data/public-ipv4 )
else
    IP="$1"
fi
echo "IP to update: $IP"

INPUT_JSON=$( cat /home/ubuntu/update-route53-A.json | sed "s/127\.0\.0\.1/$IP/" )

# http://docs.aws.amazon.com/cli/latest/reference/route53/change-resource-record-sets.html
# We want to use the string variable command so put the file contents (batch-changes file) in the following JSON
INPUT_JSON="{ \"ChangeBatch\": $INPUT_JSON }"

/path/aws route53 change-resource-record-sets --hosted-zone-id "HOSTED_ZONE_ID" --cli-input-json "$INPUT_JSON" --profile profilename


這邊的 "/path/aws" 要注意一下,要改成你的環境中的所在路徑
可以執行 which aws 去看


json 如下:
{
  "Comment": "Update the A record set",
  "Changes": [
    {
      "Action": "UPSERT",
      "ResourceRecordSet": {
        "Name": "dev.explame.com",
        "Type": "A",
        "TTL": 30,
        "ResourceRecords": [
          {
            "Value": "127.0.0.1"
          }
        ]
      }
    }
  ]
}


基本做法是參考以下這篇
https://www.lambrospetrou.com/articles/aws-update-route53-recordset-diy-load-balancer/

但他做的取得 HOSTED_ZONE_ID 這部份我這邊有問題,看起來應該是輸出格式個問題(我的輸出是 json)
所以我直接把 HOSTED_ZONE_ID 填入,之後把它放到 crontab 去

crontab 新增下列那行
@reboot /path/shellscript.sh

這樣就會在reboot之後執行

留言