동일한 AWS 리전의 AWS 계정 간에 여러 탄력적 IP 주소를 이전하고 싶습니다.
간략한 설명
탄력적 IP 주소를 이전할 때는 소스 계정과 이전 계정 간에 2단계 핸드셰이크가 이루어집니다. 소스 계정은 표준 AWS 계정 또는 AWS 조직 계정일 수 있습니다. 소스 계정에서 이전을 시작하면 이전 계정은 7일 이내에 이를 수락해야 합니다. 그렇지 않으면 탄력적 IP 주소가 원래 소유자에게 반환됩니다.
AWS에서는 이전 계정에 보류 중인 탄력적 IP 주소 이전 요청을 알리지 않습니다. 기한 내에 이전이 원활하게 이루어지도록 하려면 소스 계정 소유자가 이 요청을 이전 계정 소유자에게 전달해야 합니다.
여러 탄력적 IP 주소를 한 번에 이전하려면 Linux에서 bash 스크립트를 사용하세요.
참고: 계정 간에 단일 탄력적 IP 주소를 이전하려면 동일한 리전의 AWS 계정 간에 탄력적 IP 주소를 이전하려면 어떻게 해야 하나요?를 참조하세요.
해결 방법
참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 버전의 AWS CLI를 사용하고 있는지 확인하세요.
IP 주소 이전(소스 계정 소유자)
1. 원본 계정에 대한 AWS CLI 자격 증명을 구성했는지 확인합니다. 또한 ec2:DescribeAddresses 및ec2:EnableAddressTransfer API 호출을 허용할 수 있는AWS Identity and Access Management(IAM) 권한이 있는지 확인합니다.
2. 탄력적 IP 주소를 한 줄당 하나의 주소로 텍스트 파일에 추가합니다. 다음 예제 bash 스크립트에서 이 텍스트 파일의 이름은 eips.txt입니다.
3. 다음 예제와 비슷한 EIPTransfer.sh라는 배쉬 스크립트를 만듭니다.
#! /bin/bash
ARRAY=()
while read line
do
ARRAY+=($line)
done < $1
now_start="$(date)"
echo "Starting the loop to enable transfer of the provided EIPs in Region: $2 from AWS account: $3 to AWS account: $4 at $now_start" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
for i in "${ARRAY[@]}"
do
echo "Trying to get the AllocationId for ${i}" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
EIPAlloc=`aws ec2 describe-addresses --filters "Name=public-ip,Values=${i}" --query "Addresses[].AllocationId" --region $2 --output text`
if [[ "$EIPAlloc" == *"eipalloc"* ]]; then
echo "Trying to enable transfer for ${i} with allocation-id $EIPAlloc" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
aws ec2 enable-address-transfer --allocation-id ${EIPAlloc} --transfer-account-id $4 --region $2 --output text >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt 2>&1
else
echo "No allocation-id found for EIP ${i}" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
fi
done
now_end="$(date)"
echo "All done! Exiting the script at $now_end!" >> EIPTransfer-results-"`date +"%d-%m-%Y"`".txt
## usage sh EIPTransfer.sh eips.txt xx-region-y srcaccount dstaccount
4. 이 스크립트를 실행하려면 다음 명령을 실행합니다.
sh EIPTransfer.sh eips.txt xx-region-y srcaccount dstaccount
5. EIPTransfer 로그에 오류가 있는지 검토합니다. 로그의 이름은 EIPTransfer-results-DATE.txt입니다.
참고: 이 파일 이름에서 DATE는 스크립트를 실행한 날짜입니다.
이전 수락(이전 계정 소유자)
1. 이전 계정에 대한 AWS CLI 자격 증명을 구성했는지 확인합니다. 또한 ec2:AcceptAddressTransfer API 호출을 허용할 수 있는 IAM 권한이 있는지 확인합니다.
2. 탄력적 IP 주소를 한 줄당 하나의 주소로 텍스트 파일에 추가합니다. 다음 예제 bash 스크립트에서 이 텍스트 파일의 이름은 eips.txt입니다.
3. 다음 예제와 비슷한 EIPAccept.sh라는 배쉬 스크립트를 만듭니다.
#! /bin/bash
ARRAY=()
while read line
do
ARRAY+=($line)
done < $1
now_start="$(date)"
echo "Starting the loop to accept transfer of the provided EIPs in Region: $2 from AWS account: $3 to AWS account: $4 at $now_start" >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt
for i in "${ARRAY[@]}"
do
echo "Trying to accept the EIP transfer for ${i} from account $3" >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt
aws ec2 accept-address-transfer --address ${i} --region $2 --output text >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt 2>&1
done
now_end="$(date)"
echo "All done! Exiting the script at $now_end!" >> EIPAccept-results-"`date +"%d-%m-%Y"`".txt
## usage sh EIPAccept.sh eips.txt xx-region-y srcaccount dstaccount
4. 이 스크립트를 실행하려면 다음 명령을 실행합니다.
sh EIPAccept.sh eips.txt xx-region-y srcaccount dstaccount
5. EIPAccept 로그에 오류가 있는지 검토합니다. 이 로그의 이름은 EIPAccept-results-DATE.txt입니다.
참고: 이 파일 이름에서 DATE는 스크립트를 실행한 날짜입니다.