首页 > 解决方案 > 如何使用 aws CLI 过滤以匹配在一系列日期中开始的 ec2s 以获取包含像 StateTransitionReason 这样的日期的字符串值?

问题描述

我正在尝试制作一个监视脚本,它将查找已启动、未启动、超过 7 天的旧 ec2 框,它们保持停止状态,然后将其删除。为此,我需要识别那些未使用的盒子。LaunchTime 值是一个日期参数,但我尝试使用的参数是 StateTransitionReason,它包含一个日期。

这有效,并向我展示了一个完整的列表:

aws ec2 describe-instances --filters 'Name=instance-state-name,Values=stopped'  'Name=tag:App_Name,Values=MYAPPS' 'Name=tag:Name,Values=development-*' --query 'Reservations[*].Instances[*].{Instance:InstanceId,StateTransitionReason:StateTransitionReason,Name:Tags[?Key==`Owner`]|[0].Value}' 

但如果我尝试这个,它不会向我显示任何东西:

aws ec2 describe-instances --filters 'Name=instance-state-name,Values=stopped'  'Name=tag:App_Name,Values=MYAPPS' 'Name=tag:Name,Values=development-*' --query 'Reservations[*].Instances[?StateTransitionReason<="User initiated (2019-10-10 05:00:00 GMT)"].{Instance:InstanceId,StateTransitionReason:StateTransitionReason,Name:Tags[?Key==`Owner`]|[0].Value}' 

StateTransitionReason 是一个字符串参数,但它包含一个日期,有没有办法过滤比特定日期更早的日期?

我尝试查看 AWS 文档,但没有解释。

标签: amazon-web-servicesamazon-ec2automationaws-sdkaws-cli

解决方案


这看起来很愚蠢,但原因是您在查询中使用 " 而不是 `。尝试执行以下操作:

aws ec2 describe-instances --filters 'Name=instance-state-name,Values=stopped'  'Name=tag:App_Name,Values=MYAPPS' 'Name=tag:Name,Values=development-*' --query 'Reservations[*].Instances[?StateTransitionReason<=`User initiated (2019-10-10 05:00:00 GMT)`].{Instance:InstanceId,StateTransitionReason:StateTransitionReason,Name:Tags[?Key==`Owner`]|[0].Value}'

当我检查它时它起作用了。


推荐阅读