概要
普段、Terraformを使用している私にとって、EC2を起動した際などに使用するEIPは
ドメインを割り振る関係上、簡単に変更できないように
Terraformのライフサイクルに含めたくないケースが多い。
そんなときに便利な
EIPを作成し、EC2へそのEIPを自動で割り当ててくれるシェルスクリプトを紹介する。
動作環境
- Linux
- Debian [v10.8]
- Windows
- WSL の Ubuntu [v20.04]
- WSLの構築については以下を参照
シェルスクリプト
#!/bin/bash
set -eu
create_and_set_eip () {
# サーバ用Elastic IP作成 and EC2連携
aws ec2 allocate-address --domain vpc --tag-specifications "ResourceType=elastic-ip,Tags=[{Key=Name,Value=${AWS_PROFILE}}]"
aws ec2 associate-address \
--allocation-id `aws ec2 describe-addresses --filter "Name=tag:Name,Values=${AWS_PROFILE}" --query 'Addresses[*].AllocationId[]' --output text` \
--instance `aws ec2 describe-instances --filter "Name=tag:Name,Values=${AWS_PROFILE}" "Name=instance-state-name,Values=running" --query 'Reservations[*].Instances[*].InstanceId[]' --output text`
}
# [source set_aws_profile.sh] を実行し、デプロイ先を指定しているか確認
if [ ${AWS_PROFILE} = '******(アプリ名など)' ]; then
create_and_set_eip
echo '----- Elastic IP作成 and EC2連携完了 -----'
else
echo '[source set_aws_profile.sh] を実行し、デプロイ先を指定して下さい。'
fi
説明
1. 事前準備
-
AWS CLI
のインストール - AWSのクレデンシャル情報などを保存する、名前付きプロファイルの名前を
EC2のNAMEタグと一致させるようにする。(以下コマンドで設定するやつ)
aws configure --profile ******(アプリ名など)
- 上記の名前付きプロファイルの名前を環境変数(
AWS_PROFILE
)に設定しておく
export AWS_PROFILE=******(アプリ名など)
2. ポイント解説
-
1. 事前準備
で設定したように、名前付きプロファイルの名前を
EC2のNAMEタグと一致させるようにすることで、デプロイ先が変わっても
上記シェルスクリプトをそのまま流用することができる - 間違って操作するとヤバいことになるEIPの操作を自動化できる
- 以前紹介した、私のTerraform運用オペレーションに組み込むことができる