AWS Cloudshell一键更换EC2实例Elastic IP


#!/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
Next Post Previous Post
No Comment
Add Comment
comment url