AWS EIP 서브넷별 고정할당

아마존을 운영하다보면 상태 유지를 위한 오토스케일링으로 desire & Min/Max 수치를 고정하여,

해당 서버를 유지해야 할 필요가 있다.

 

이런 경우, Nat가 아닌 해당 서버의 고정아이피를 할당하는 방법이 필요하게 되어 아래와 같이 스크립트를 진행하게 되었다.

 

상황은 두개의 AZ 에 각각 서버가 위치하고, 인스턴스 헬스체크가 실패하는 경우 신규 인스턴스로 교체 되며, 기존에 사용하던 EIP를 고정적으로 할당하는 방법에 대한 설명이다.

 

#!/bin/bash -ex
## made by hong

# Enable AWS account
export AWS_ACCESS_KEY_ID=”아마존 엑세스 키”
export AWS_SECRET_ACCESS_KEY=”아마존 시크릿 키”

# Availability Zone Elastic IP Azone Bzone DEFINE
EIPA=”서브넷 A에 할당할  EIP아이디 (eipalloc-xxxx1234)”
EIPB=”서브넷 B에 할당할  EIP아이디 (eipalloc-xxxx5678)”

# Get Self Instance infomation
INSTANCEID=$(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/.$//’)
AZ=$(curl -s http://169.254.169.254/latest/meta-data/placement/availability-zone)

if [ “$AZ” == “ap-northeast-1a” ]
then
    aws –region ${REGION} ec2 associate-address –instance-id ${INSTANCEID} –allocation-id ${EIPA}
elif [“$AZ” == “ap-northeast-1b” ]
then
    aws –region ${REGION} ec2 associate-address –instance-id ${INSTANCEID} –allocation-id ${EIPB}
else 
    echo “no define AZ your zone is ${AZ}”
    exit 2
fi

exit 0

 

위와 같은 스크립트가, POST로 실행되도록 설정을 해놓는다.

서버가 배포되면서 해당 스크립트가 실행되면 기존에 제거된 인스턴스에서 반환된 EIP를 다시 고정적으로 받아오게 된다.

글쓴이