ElasticBeanstalk環境でEC2インスタンスが立ち上がった時、EIPを自動で割り当てるスクリプトを作ってみました。
オートスケーリングでEC2インスタンスが増えた場合、PublicIPが自動で割り当てられますが、
サービスによっては外部連携していて、許可されたIPのみ疎通が許可されているなどあるかと思います。
ElasticBeanstalk環境では.ebextensions
ディレクトリ配下にスクリプトを配置しておけば、EC2インスタンスが立ち上がったタイミングで実行されます。
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/00_associate_eipalloc.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
env=$(/opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:application:environment -o RACK_ENV)
# プールしているEIPのAllocationIDを環境毎に用意
if [ ${env} = "production" ]; then
eipalloc_ids="eipalloc-aaaaaaaa eipalloc-bbbbbbbb eipalloc-cccccccc eipalloc-dddddddd"
elif [ ${env} = "test" ]; then
eipalloc_ids="eipalloc-xxxxxxxx eipalloc-yyyyyyyy"
fi
if [ -z ${eipalloc_ids} ]; then
echo Not exist AllocationID in the ${env} environment
else
instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id)
region=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//')
export AWS_DEFAULT_REGION=${region}
available_alloc_id=$(aws ec2 describe-addresses --allocation-ids ${eipalloc_ids} | jq -r '[.Addresses[] | select(.InstanceId == null)][0] | .AllocationId')
echo available_alloc_id=${available_alloc_id}
if [ ${available_allocid} = null ]; then
echo "Already associated"
else
aws ec2 associate-address --instance-id ${instance_id} --allocation-id ${available_alloc_id}
fi
fi
参考
https://dev.classmethod.jp/cloud/aws/choose-eip-from-addresspool/