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

如何用Bash for循环遍历AWS CLI describe-images结果实现AMI跨区域复制

问题原因

你当前获取的AMI_LIST是ID和名称按空格交替拼接的单串文本,直接用for ami in $AMI_LIST遍历时,每次循环只会拿到单个ID或者单个名称,并非成对的ID+名称组,所以${ami[0]} ${ami[1]}无法取到对应的值。

解决方案

推荐两种可直接运行的实现方式:

方案1:逐行读取(兼容性最优,支持镜像名称带空格的场景)

直接通过管道将查询结果逐行传给read命令,自动拆分每行的ID和名称:

aws ec2 describe-images --filters "Name=tag:Name,Values=*one*,*two*,*three*,*four*" \
"Name=state,Values=available" "Name=tag:Name,Values=${CUSTOMER_NAME}*" \
--query 'Images[*].{ID:ImageId,NAME:Name}' --output text | while read -r ami_id ami_name; do
    aws ec2 copy-image --source-image-id "$ami_id" --source-region us-east-1 --region us-west-2 --name "$ami_name"
    # 可选添加sleep 1避免触发AWS API调用频率限制
done

方案2:数组步长遍历

先把所有查询结果存入bash数组,再按步长为2遍历,每次取一组ID和名称:

# 将查询结果存入数组
ami_array=($(aws ec2 describe-images --filters "Name=tag:Name,Values=*one*,*two*,*three*,*four*" \
"Name=state,Values=available" "Name=tag:Name,Values=${CUSTOMER_NAME}*" \
--query 'Images[*].{ID:ImageId,NAME:Name}' --output text))

# 步长为2遍历数组
for ((i=0; i<${#ami_array[@]}; i+=2)); do
    aws ec2 copy-image --source-image-id "${ami_array[i]}" --source-region us-east-1 --region us-west-2 --name "${ami_array[i+1]}"
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:18:01