You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何优化Bash脚本并行执行AWS CLI命令批量修改EC2实例规格

EC2实例批量调整规格并行执行方案

完全可以通过并行执行AWS CLI命令大幅缩短操作耗时,以下是可直接使用的优化后脚本,兼顾并发效率和API限流风险:

优化后并行脚本(原生Bash实现,无需额外依赖)

#!/bin/bash
my_file='test.txt'
# 调整为你需要的最大并发数,建议先从20~50开始测试,避免触发AWS API限流
MAX_PARALLEL=30

# 单台实例规格变更逻辑封装为函数
resize_instance() {
    local vm_instance_id=$1
    local vm_type=$2
    local log_file="resize_log_${vm_instance_id}.log"

    {
        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 开始处理实例: $vm_instance_id,目标规格: $vm_type"
        # 停止实例
        if ! aws ec2 stop-instances --instance-ids "$vm_instance_id" >/dev/null 2>&1; then
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 实例 $vm_instance_id 停止失败,跳过后续操作"
            return 1
        fi

        # 等待实例停止
        if ! aws ec2 wait instance-stopped --instance-ids "$vm_instance_id" >/dev/null 2>&1; then
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 实例 $vm_instance_id 等待停止超时/失败,跳过后续操作"
            return 1
        fi

        # 修改实例规格
        if ! aws ec2 modify-instance-attribute --instance-id "$vm_instance_id" --instance-type "$vm_type" >/dev/null 2>&1; then
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 实例 $vm_instance_id 规格修改失败,跳过后续操作"
            return 1
        fi

        # 启动实例
        if ! aws ec2 start-instances --instance-ids "$vm_instance_id" >/dev/null 2>&1; then
            echo "[$(date '+%Y-%m-%d %H:%M:%S')] 实例 $vm_instance_id 启动失败"
            return 1
        fi

        echo "[$(date '+%Y-%m-%d %H:%M:%S')] 实例 $vm_instance_id 规格变更完成"
    } >> "$log_file" 2>&1
}

# 并发执行任务
while IFS=, read -r COL1 COL2; do
    # 跳过空行
    [[ -z "$COL1" || -z "$COL2" ]] && continue
    # 控制并发数,超过阈值就等任意后台进程结束再继续
    while (( $(jobs -p | wc -l) >= MAX_PARALLEL )); do
        sleep 1
    done
    # 后台执行单台实例变更逻辑
    resize_instance "$COL1" "$COL2" &
done < "$my_file"

# 等待所有后台任务执行完成
wait
echo "所有实例规格变更任务已执行完成,请检查各实例日志确认执行结果"

注意事项

  • 调整MAX_PARALLEL参数前请先确认你的AWS账号EC2 API的调用速率配额,避免触发限流导致任务失败,首次使用建议先截取test.txt的前10~20条数据做测试
  • 每台实例的执行日志会单独存放在resize_log_实例ID.log文件中,方便快速定位失败任务
  • 执行前请先校验test.txt中的实例ID、目标规格格式是否合法,避免不必要的错误
  • 针对支持休眠、有EBS优化等特殊配置的实例,请提前确认目标规格是否兼容原有配置,避免变更后无法启动

内容的提问来源于stack exchange,提问作者fawzih91

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:06:07