#!/bin/bash
# 确保脚本以错误退出方式运行
set -e
# 用户需要配置的变量
# 请输入您的目标实例 ID
INSTANCE_ID="i-080a5478b1443441d" # 替换为您的 EC2 实例 ID
# 获取当前关联的 Elastic IP 的 Allocation ID
CURRENT_EIP_ALLOC_ID=$(aws ec2 describe-addresses --filters "Name=instance-id,Values=$INSTANCE_ID" --query "Addresses[0].AllocationId" --output text)
if [ "$CURRENT_EIP_ALLOC_ID" != "None" ]; then
echo "当前实例 ($INSTANCE_ID) 关联的 Elastic IP Allocation ID: $CURRENT_EIP_ALLOC_ID"
echo "正在释放当前的 Elastic IP..."
aws ec2 release-address --allocation-id $CURRENT_EIP_ALLOC_ID
echo "当前的 Elastic IP 已释放。"
else
echo "实例 ($INSTANCE_ID) 没有关联的 Elastic IP。"
fi
# 分配新的 Elastic IP
echo "正在分配新的 Elastic IP..."
NEW_EIP_ALLOC_ID=$(aws ec2 allocate-address --domain vpc --query "AllocationId" --output text)
NEW_EIP_PUBLIC_IP=$(aws ec2 describe-addresses --allocation-ids $NEW_EIP_ALLOC_ID --query "Addresses[0].PublicIp" --output text)
echo "新的 Elastic IP Allocation ID: $NEW_EIP_ALLOC_ID"
echo "新的 Elastic IP Public IP: $NEW_EIP_PUBLIC_IP"
# 关联新的 Elastic IP 到实例
echo "正在将新的 Elastic IP 关联到实例 ($INSTANCE_ID)..."
aws ec2 associate-address --instance-id "$INSTANCE_ID" --allocation-id "$NEW_EIP_ALLOC_ID"
echo "新的 Elastic IP 已成功关联到实例 ($INSTANCE_ID)。"
echo "新的 Public IP: $NEW_EIP_PUBLIC_IP"
以下是更换运营商IP(Wavelength)
#!/bin/bash
# 确保脚本以错误退出方式运行
set -e
# 用户需要配置的变量
INSTANCE_ID="i-04cdc286300c68ee8" # 替换为您的 EC2 实例 ID
REGION="us-east-1" # 替换为您的 AWS 区域
NETWORK_BORDER_GROUP="us-east-1-wl1-atl-wlz-1" # 替换为您的网络边界组
# 定义一个函数来执行 EIP 更换操作
change_eip() {
echo "-----------------------------"
echo "开始更换 Carrier IP 于实例 ($INSTANCE_ID)"
echo "-----------------------------"
# 获取当前关联的 Elastic IP 的 Allocation ID 和 Association ID
CURRENT_EIP_ALLOC_ID=$(aws ec2 describe-addresses --filters "Name=instance-id,Values=$INSTANCE_ID" --query "Addresses[0].AllocationId" --output text --region "$REGION")
ASSOCIATION_ID=$(aws ec2 describe-addresses --filters "Name=instance-id,Values=$INSTANCE_ID" --query "Addresses[0].AssociationId" --output text --region "$REGION")
if [ "$CURRENT_EIP_ALLOC_ID" != "None" ]; then
echo "当前实例 ($INSTANCE_ID) 关联的 Elastic IP Allocation ID: $CURRENT_EIP_ALLOC_ID"
# 解除当前 Elastic IP 的关联
if [ "$ASSOCIATION_ID" != "None" ]; then
echo "正在解除当前的 Elastic IP 关联..."
aws ec2 disassociate-address --association-id "$ASSOCIATION_ID" --region "$REGION"
echo "当前的 Elastic IP 已解除关联。"
fi
# 释放当前的 Elastic IP,确保使用 network-border-group
echo "正在释放当前的 Elastic IP..."
aws ec2 release-address --allocation-id "$CURRENT_EIP_ALLOC_ID" --network-border-group "$NETWORK_BORDER_GROUP" --region "$REGION"
echo "当前的 Elastic IP 已释放。"
else
echo "实例 ($INSTANCE_ID) 没有关联的 Elastic IP。"
fi
# 分配新的 Elastic IP,并指定 Network Border Group 为 us-east-1-wl1-atl-wlz-1
echo "正在分配新的 Elastic IP..."
NEW_EIP_ALLOC_ID=$(aws ec2 allocate-address --domain vpc --network-border-group "$NETWORK_BORDER_GROUP" --query "AllocationId" --output text --region "$REGION")
echo "新的 Elastic IP Allocation ID: $NEW_EIP_ALLOC_ID"
# 关联新的 Elastic IP 到实例
echo "正在将新的 Elastic IP 关联到实例 ($INSTANCE_ID)..."
aws ec2 associate-address --instance-id "$INSTANCE_ID" --allocation-id "$NEW_EIP_ALLOC_ID" --region "$REGION"
echo "新的 Elastic IP 已成功关联到实例 ($INSTANCE_ID)。"
# 获取并展示分配的 Carrier IP 通过 Allocation ID 查询
NEW_CARRIER_IP=$(aws ec2 describe-addresses --allocation-ids "$NEW_EIP_ALLOC_ID" --query "Addresses[0].CarrierIp" --output text --region "$REGION")
echo "新的 Carrier IP 已分配并关联到实例 ($INSTANCE_ID): $NEW_CARRIER_IP"
echo "-----------------------------"
}
# 主循环
while true; do
change_eip
# 提示用户按回车键以继续或按 Ctrl+C 退出
read -p "按回车键以重新运行脚本,或按 Ctrl+C 退出..."
done