如何查询特定类型(t3.micro)EC2实例运行时长及类型变更时间
查询特定EC2实例类型的运行时长
AWS没有直接提供按实例类型筛选并返回运行时长的原生命令,但可以通过组合describe-instances和本地时间计算实现:
- 第一步,筛选目标实例类型的实例及启动时间:
aws ec2 describe-instances --filters "Name=instance-type,Values=t3.micro" --query 'Reservations[*].Instances[*].[InstanceId, LaunchTime]' --output table
- 第二步,自动计算运行时长(以小时为单位):
aws ec2 describe-instances --filters "Name=instance-type,Values=t3.micro" --query 'Reservations[*].Instances[*].[InstanceId, LaunchTime]' --output json | jq -r '.[] | .[] | "\(.[0]) \(.[1])"' | while read id launch; do launch_epoch=$(date -d "$launch" +%s) current_epoch=$(date +%s) runtime=$(( (current_epoch - launch_epoch) / 3600 )) echo "实例ID: $id,运行时长: $runtime 小时" done
说明:需本地安装
jq工具解析JSON;若使用macOS,date命令参数需调整为date -j -f "%Y-%m-%dT%H:%M:%SZ" "$launch" +%s
查询EC2实例类型上次变更时间的AWS CLI命令
实例类型变更操作会被AWS CloudTrail记录,可通过cloudtrail lookup-events命令查询:
- 查询单个实例的类型变更历史:
aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=i-1234567890abcdef0 --event-name ModifyInstanceAttribute --query 'Events[*].[EventTime, CloudTrailEvent]' --output json | jq -r '.[] | select(.[1] | fromjson | .requestParameters.instanceType != null) | "\(.[0]) 实例类型变更为: \((.[1] | fromjson).requestParameters.instanceType)"'
替换命令中的
i-1234567890abcdef0为目标实例ID,结果会返回所有类型变更的时间及对应实例类型,最新记录即为上次变更时间。
- 批量查询t3.micro实例的类型变更历史:
for instance_id in $(aws ec2 describe-instances --filters "Name=instance-type,Values=t3.micro" --query 'Reservations[*].Instances[*].InstanceId' --output text); do echo "=== 实例 $instance_id 的类型变更历史 ===" aws cloudtrail lookup-events --lookup-attributes AttributeKey=ResourceName,AttributeValue=$instance_id --event-name ModifyInstanceAttribute --query 'Events[*].[EventTime, CloudTrailEvent]' --output json | jq -r '.[] | select(.[1] | fromjson | .requestParameters.instanceType != null) | "\(.[0]) 变更为: \((.[1] | fromjson).requestParameters.instanceType)"' || echo "无类型变更记录" done
注意:需确保目标区域已开启CloudTrail,且查询事件在CloudTrail保留周期内(默认90天,如需更长时间需配置日志存储到S3)。
内容的提问来源于stack exchange,提问作者sr.m
相关产品推荐
相关产品推荐

