Amazon EC2インスタンスのPublic IPをAPI経由でValue DomainのDNSレコード設定に登録する。

EC2インスタンスのPublic IPは起動するたびに変わるため、通常Elastic IPで固定しますが、対象のインスタンスが停止中の間は料金が発生する仕様になっています。
Elastic IP の料金を理解する

インスタンスを止めていてもお金を取れるようにするなんて狡い賢いですね。なおElastic IPに無料期間は存在しません。
(すべて無料で済ませたいので)Elastic IPは使わずにPublic IPのみで運用したいが、/etc/hostsを修正できないマシンからFQDNを使ってアクセスしたい場合、Aレコードに設定が必要です。
(すでに使用していませんが、)EC2インスタンスでWordPressをヘッドレスCMSとして使用していたときにこの運用をしたかったので、当時どうしていたかをメモとして残しておきます。

AWS CLIの導入

Public IPをコマンドラインから取得するので、AWS CLIを導入します。
AWS CLI のインストール、更新、アンインストール - AWS コマンドラインインターフェイス

インスタンスのIPアドレス取得用のIAMを作成

ルートアカウントのアクセスキーを使うわけにはいかないので、IP取得用のIAMユーザーを作成します。「プログラムによるアクセス」を選択しておきます。
AWS アカウントでの IAM ユーザーの作成 - AWS Identity and Access Management

IAMポリシーは以下。

作成したIAMユーザーからアクセスキーを発行し、~/.aws/credentialsに設定します。
AWSアカウントとアクセスキー - AWS Tools for PowerShell
名前付きプロファイル - AWS コマンドラインインターフェイス

インスタンスの起動とPublic IPの取得

以下でインスタンスの起動とIPの取得ができます。

#!/bin/bash
aws ec2 start-instances --instance-ids {インスタンスのID}
IP=$(aws ec2 describe-instances --filter "Name=tag-value,Values={インスタンスのタグ}" --query 'Reservations[0].Instances[0].{PublicIp:PublicIpAddress}' --output text)
echo ${IP}

Value DomainのDNSレコードの変更

Value DomainのREST APIを使います。あらかじめAPI KEYを発行しておく必要があります。

DNS設定の変更を使用してDNSのAレコードを追加できます。ただし、予めDNS設定の取得で既存設定も取得した上でrecordsフィールドを更新しないと、既存のレコード設定が飛びます。

以下はリクエスト例です。

#!/bin/bash
curl -XPUT https://api.value-domain.com/v1/domains/{domain}/dns \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer {token}" \
  -d @- <<EOS
{
  "ns_type": "valuedomain1",
  "records": "{既存設定}\na {対応させたいドメイン} ${IP}\n",
  "ttl": "1200"
}
EOS

Value DomainのREST API、以前はIDとパスワードを直で送信するすごい仕様だったのですが、ちゃんとtokenを使う仕様になっていて驚きました。