LoginSignup
8
2

More than 3 years have passed since last update.

Auto Scaling で追加したEC2 インスタンスにEIP を自動で紐づける

Posted at

小ネタです。

困っていたこと

Auto Scaling でEC2 インスタンスが起動するたびに毎回EIPが外れてしまう。

EIP を関連づけし直す必要があるものの、手動でやるのはだるい。
なんとかしないと... :frowning2:と思い調べました。

解決策

Auto Scaling の起動テンプレート内のユーザーデータにスクリプトを仕込む

▼ 詳細
※ Auto Scaling の起動テンプレートは作成済みの前提
1. EC2 のサイドメニューから[Auto Scaling グループ] を選択
Screenshot 2020-12-26 13.39.17.png
2. 作成済みの起動テンプレートを選択
Screenshot 2020-12-26 13.39.56.png
3. [アクション] > [テンプレートを変更 (新しいバージョンを作成)] をクリック

4. [ユーザーデータ] にスクリプトを貼り付け、[テンプレートのバージョンを作成] をクリック
:warning: [高度な詳細] の項目に隠れているのでご注意ください
Screenshot 2020-12-26 22.37.11.png
▼ 貼り付けるスクリプト

#!/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を関連づけた状態にする)

参考

8
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2