EC2起動時にパブリックIPをRoute53に自動登録(ElasticIP不要)

Ubuntu
スポンサーリンク


AWSのEC2インスタンスの料金は使用時間によって課金されるサブスクリプションなので、利用しない時はインスタンスを停止させておきたいです。

ただEC2インスタンスは停止させてしまうと割り当てられていたパブリックIPが解放されて、次の起動時には別のパブリックIPが割り振られてしまいます。

そうするとRoute53で独自ドメインのレコードセットを毎回書き換える必要があります。
もちろんElastic IPを使用すればグローバルIPを固定することが出来ますが、お金がかかってきます。

これをAWS CLIを使用してShell Scriptで自動更新してしまおうというのが今回のお話です。

Ubuntu20での設定となります。

スポンサーリンク

AWS CLI v2をインストール

まずはAWS CLI v2を使用できるようにインストールしておきます。
インストール方法はこちらです。(Ubuntu環境)

AWSで構築したUbuntuにAWS CLI v2をインストール
AWS CLI バージョン2をインストールしてみたので、その方法についてメモ書きです。 AWSを運用管理していく中では必須の機能となり、何かを「自動化したい」場合に役立ちます。 AWS CLI(コマンドラインインターフェース)について...

サーバ内でAWS CLIを使用するための設定はこちらです。(Ubuntu環境)

AWS CLI v2を使ってEC2インスタンスの情報を取得
AWS CLI バージョン2を使って特定のインスタンスの情報を取得してみます。 AWS CLIのインストールがまだできていない場合はこちらから実施してください。(Ubuntu環境で実施しています。) AWS CLI設定 AWS C...

ShellScriptを作成

起動中のEc2インスタンスのパブリックIPを取得する際にjqを使用するので、インストールしておきます。

$ sudo apt install jq -y

取得したパブリックIPを変数publicIPに保存して、Route53のchange-resource-record-setsでAレコードを更新するShell Scriptを作成します。
/home/ubuntuに「updateIP.sh」というファイル名で作成した事とします。

#!/bin/bash
publicIP=$(aws ec2 describe-instances --instance-ids "インスタンスID" | jq '.Reservations[].Instances[] | .PublicIpAddress' | cut -c 2- | rev | cut -c 2- | rev)

aws route53 change-resource-record-sets --hosted-zone-id "ホストゾーンID" --change-batch '{ "Comment": "Update A Record", "Changes": [ { "Action": "UPSERT", "ResourceRecordSet": { "Name": "レコード名", "Type": "A", "TTL": 300, "ResourceRecords": [ { "Value": "'"$publicIP"'" } ] } } ] }'

exit 0

実行権限を付与します。

$ sudo chmod +r ./updateIP.sh

EC2起動時にShell Script実行

EC2インスタンスの起動時に作成したShell Scriptを自動起動するようにしておきます。

Systemdで起動時にShellScriptを実行する方法
Ubuntuで独自に作成したShellScriptをサーバ起動時に自動実行させたい場合の設定です。 Ubuntuの環境はこちらです。 $ cat /etc/os-release NAME="Ubuntu" VERSION="2...

EC2の起動と停止をスケジュール

EC2を使用しない時間帯に自動でインスタンスの停止、起動を行うようにします。

Amazon EventBridgeのスケジュールでEC2の起動、停止を自動化
以前、Amazon EventBridgeの「ルール」を使ってEC2の起動と停止を自動化しました。 この「ルール」機能の一部が「スケジュール」に統合され、構築方法が変わったので、再度試してみました。 IAMロールの作成 まずはId...

これで全てを自動化することが出来ました。