やりたいこと
オートスケールしているEC2に対してIPを固定して運用させたい。
.ebextensions
yaml
1#!/usr/bin/env bash 2 3 env=$(/opt/elasticbeanstalk/bin/get-config optionsettings -n aws:elasticbeanstalk:application:environment -o RACK_ENV) 4 5 # プールしているEIPのAllocationIDを環境毎に用意 6 if [ ${env} = "production" ]; then 7 eipalloc_ids="eipalloc-aaaaaaaa eipalloc-bbbbbbbb eipalloc-cccccccc eipalloc-dddddddd" 8 elif [ ${env} = "test" ]; then 9 eipalloc_ids="eipalloc-xxxxxxxx eipalloc-yyyyyyyy" 10 fi 11 12 if [ -z ${eipalloc_ids} ]; then 13 echo Not exist AllocationID in the ${env} environment 14 else 15 instance_id=$(curl -s http://169.254.169.254/latest/meta-data/instance-id) 16 region=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone | sed -e 's/.$//') 17 18 export AWS_DEFAULT_REGION=${region} 19 20 available_alloc_id=$(aws ec2 describe-addresses --allocation-ids ${eipalloc_ids} | jq -r '[.Addresses[] | select(.InstanceId == null)][0] | .AllocationId') 21 22 echo available_alloc_id=${available_alloc_id} 23 24 if [ ${available_allocid} = null ]; then 25 echo "Already associated" 26 else 27 aws ec2 associate-address --instance-id ${instance_id} --allocation-id ${available_alloc_id} 28 fi 29 fi
上記のものでやるとうまく動作が起きません。
また、すでにプールしているEIPがある場合エラーになります。
参考ページ
https://dev.classmethod.jp/cloud/aws/choose-eip-from-addresspool/
https://qiita.com/3104k/items/6bad6d2d527b51a0e723