您可以通过检查实例是否具有 VPC ID 来识别 EC2-Classic 环境。
EC2 控制台
VPC ID 默认不显示。从Preference 启用 VPC ID -> Attribute columns。
如果 VPC ID 属性为-,则表示该实例为 EC2-Classic。 (除了实例状态不是terminated。)
CLI
2 种检查方式。除非存在 EC2 经典实例,否则输出为无。
aws ec2 describe-instances --filters Name=instance-state-name,Values=pending,running,shutting-down,stopping,stopped | jq '.Reservations[].Instances[] | select(.VpcId == null)'
aws ec2 describe-instances --instance-id i-xxxxxxxxxxxx --filters Name=instance-state-name,Values=pending,running,shutting-down,stopping,stopped | jq '.Reservations[].Instances[] | select(.VpcId == null)'
jq 选择终止状态
这是过滤aws ec2 describe-instances 的结果的另一种方法。
在 jq select 中添加.State.Name != "terminated" and 与--filters ... 相同。这可能更具可读性。
aws ec2 describe-instances | jq '.Reservations[].Instances[] | select(.State.Name != "terminated" and .VpcId == null)'
编辑说明:感谢@AUdden 的建议,我修改了CLI 代码以过滤掉terminated 状态。当我们终止实例(而不是停止)时,实例会以终止状态存在一段时间。终止的实例不再与 VPC 关联。为此,我添加了--filters Name=instance-state-name,Values=pending,running,shutting-down,stopping,stopped。