aws cli で 自動的にドメインをDNSに登録する。

必要なもの

EC2 を使って立てたインスタンス、またそのサーバーで作成したドメイン .tk だったりフリーのドメインでもいいと思います。

環境

OS Amazon linux 2 使用言語 bash

スクリプト

vim registry_dns.sh

#!/bin/bash
SCRIPT_DIR=$(cd $(dirname $0); pwd)
DOMAIN_NAME="$1"
ZONE_ID=`aws route53 list-hosted-zones --output json | jq -c -r '.HostedZones[].Id' | sed 's/\/hostedzone\///'`
INSTANCE_NAME="$2"
PUBLIC_IP=`aws ec2 describe-instances ---profile develop --output json --filter "Name=tag:Name,Values=$INSTANCE_NAME" "Name=instance-state-name,Values=running" | jq ".Reservations[].Instances[].PublicIpAddress" | tr -d "\""`
cat << EOT > $SCRIPT_DIR/$DOMAIN_NAME\.json
{
 "Changes": [
  {
   "Action": "CREATE",
   "ResourceRecordSet": {
    "Name": "$DOMAIN_NAME",
    "Type": "A",
    "TTL": 300,
    "ResourceRecords": [
     {
      "Value": "$PUBLIC_IP"
     }
    ]
   }
  }
 ]
}
EOT
aws route53 change-resource-record-sets --hosted-zone-id $ZONE_ID --change-batch file://$SCRIPT_DIR/$DOMAIN_NAME\.json
rm -f $SCRIPT_DIR/$DOMAIN_NAME\.json

実行例 (第一引数に ドメイン名 第二引数に インスタンス名を指定してください。)

./registry_dns.sh hogehoge.com this_is_instance_name