小ネタです。
困っていたこと
Auto Scaling でEC2 インスタンスが起動するたびに毎回EIPが外れてしまう。
EIP を関連づけし直す必要があるものの、手動でやるのはだるい。
なんとかしないと... と思い調べました。
解決策
Auto Scaling の起動テンプレート内のユーザーデータにスクリプトを仕込む
▼ 詳細
※ Auto Scaling の起動テンプレートは作成済みの前提
1. EC2 のサイドメニューから[Auto Scaling グループ] を選択
2. 作成済みの起動テンプレートを選択
3. [アクション] > [テンプレートを変更 (新しいバージョンを作成)] をクリック
4. [ユーザーデータ] にスクリプトを貼り付け、[テンプレートのバージョンを作成] をクリック
[高度な詳細] の項目に隠れているのでご注意ください
▼ 貼り付けるスクリプト
#!/bin/bash
## EIPの自動割り当て処理
INSTANCE_ID=`curl http://169.254.169.254/latest/meta-data/instance-id`
REGION=`curl http://169.254.169.254/latest/dynamic/instance-identity/document | grep region | awk -F\" '{print $4}'`
for ALLOC_ID in `aws ec2 describe-addresses --region=$REGION --filter "Name=domain,Values=vpc" --output text | grep -v eipassoc- | awk '{print $2}'`
do
CMD="aws ec2 associate-address --instance-id $INSTANCE_ID --allocation-id $ALLOC_ID --no-allow-reassociation --region=$REGION"
$CMD
STATUS=$?
if [ 0 = $STATUS ] ; then
exit 0
fi
done
exit 1
たった今できたバージョンをテンプレートのデフォルトバージョンに設定しておくと、次回Auto Scaling が起動した際に適用されます。
余談 (なぜこれを解決したかったのか)
以下の条件を満たしたかったためです。
- 平日の定時時間内は1台起動・それ以外の時間は起動しない (費用節約のため)
- 起動したEC2 インスタンスのIP は常に固定 (EIPを関連づけた状態にする)