如何在同一区域的 AWS 账户之间批量转移弹性 IP 地址?

2 分钟阅读
0

我想在同一 AWS 区域的 AWS 账户之间转移多个弹性 IP 地址。

简短描述

当您转移弹性 IP 地址时,源账户和目标账户之间会有一个两步握手操作。源账户可以是标准 AWS 账户或 AWS Organizations 账户。当源账户开始发起转移时,目标账户有 7 天的时间接受转移。否则,弹性 IP 地址将返回其原始所有者。

AWS 不会通知目标账户存在待处理的弹性 IP 地址转移请求。为了便于在规定时间内完成转移,源账户所有者必须告知目标账户所有者此请求。

要同时转移多个弹性 IP 地址,请在 Linux 中使用 bash 脚本。

**注意:**要在账户之间转移单个弹性 IP 地址,请参阅如何在同一区域的 AWS 账户之间转移弹性 IP 地址?

解决方法

**注意:**如果在运行 AWS 命令行界面(AWS CLI)命令时收到错误,请确保您使用的是最新版本的 AWS CLI

转移 IP 地址(源账户所有者)

1.    验证您是否为源账户配置了 AWS CLI 证书。此外,请确认您拥有 AWS Identity and Access Management(IAM)权限,以允许 ec2:DescribeAddressesec2:EnableAddressTransfer API 调用。

2.    将弹性 IP 地址添加到文本文件中,每行一个地址。在以下示例 bash 脚本中,此文本文件名为 eips.txt

3.    创建一个与以下示例类似的 bash 脚本,命名为 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 凭证。此外,请验证您是否拥有 IAM 权限,允许 ec2:AcceptAddressTransfer API 调用。

2.    将弹性 IP 地址添加到文本文件中,每行一个地址。在以下示例 bash 脚本中,此文本文件名为 eips.txt

3.    创建一个与以下示例类似的 bash 脚本,名为 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 是您运行脚本的日期。

AWS 官方
AWS 官方已更新 1 年前