LoginSignup
0
0

EC2のAutoScaling時にEIPを自動で付与する(IMDSv2版)

Posted at

この記事を書いたきっかけ

  • EC2へのアクセス元のネットワークがIPホワイトリスト形式でアクセス制限を行っていたため、EIPで固定化する必要があった
  • 既存の記事で紹介されている実装はインスタンスメタデータv1が前提となっており、v2では稼働しなかった

前提知識

事前に用意するもの

  • EC2 Auto Scaling設定
  • EIP

必要な設定

  • 以下のポリシーを含めたIAMロールにEC2に付与し、EC2自身が空いているEIPの参照と割り当てが行えるようにする
  • 起動テンプレートのUser Dataに以下のスクリプトを記載し、起動時に空いているEIPの参照と割り当てを行わせる。その際、メタデータを参照するためのトークンを取得する
#!/bin/bash

## EIPの自動割り当て処理
TOKEN=`curl -X PUT "http://169.254.169.254/latest/api/token" -H "X-aws-ec2-metadata-token-ttl-seconds: 21600"`
curl http://169.254.169.254/latest/meta-data/instance-id -H "X-aws-ec2-metadata-token: $TOKEN
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

参考記事

0
0
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
0
0