You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何使用AWS CLI停止指定区域(单个VPC)内所有EC2实例?

解决AWS CLI停止指定VPC内EC2实例的命令错误

首先,你遇到的错误是因为**--filters参数被错误传递给了stop-instances命令**,而不是它应该归属的describe-instances子命令。这大概率是命令复制时的换行/格式问题,或者shell对括号、引号的解析异常导致的。

另外,你原本的需求是停止单个指定VPC内的实例,但原命令没有添加VPC过滤条件,我会在修正后的命令里补上这个逻辑。

修正后的完整命令

aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances --filters "Name=instance-state-name,Values=pending,running" "Name=vpc-id,Values=YOUR_VPC_ID" --query "Reservations[].Instances[].InstanceId" --output text | tr '\n' ' ')

关键修正点说明

  • 修复参数传递问题:确保--filters完全属于describe-instances部分,shell会正确解析括号内的子命令,把实例ID列表传递给stop-instances--instance-ids参数。
  • 添加VPC过滤:新增"Name=vpc-id,Values=YOUR_VPC_ID"过滤器,替换成你目标VPC的ID,就能只选中该VPC内的实例。
  • 简化查询语句:原查询Reservations[].Instances[].[InstanceId]可以简化为Reservations[].Instances[].InstanceId,输出的文本格式完全一致,更简洁。

可选:分步执行验证(更安全)

如果你担心一次性执行有风险,可以分两步先确认要停止的实例:

  1. 先列出目标VPC内运行中的实例ID:
aws ec2 describe-instances --filters "Name=instance-state-name,Values=pending,running" "Name=vpc-id,Values=YOUR_VPC_ID" --query "Reservations[].Instances[].InstanceId" --output text
  1. 确认列表无误后,再执行停止命令:
aws ec2 stop-instances --instance-ids 实例ID1 实例ID2 ...

额外注意事项

  • 确保你的AWS CLI有足够的权限执行ec2:DescribeInstancesec2:StopInstances操作。
  • 如果使用Windows PowerShell,管道部分的tr '\n' ' '需要替换为-join ' ',命令调整为:
aws ec2 stop-instances --instance-ids $(aws ec2 describe-instances --filters "Name=instance-state-name,Values=pending,running" "Name=vpc-id,Values=YOUR_VPC_ID" --query "Reservations[].Instances[].InstanceId" --output text | ForEach-Object { $_ -join ' ' })

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

火山引擎 最新活动