Amazon web services 如何使用aws CLI对包含日期(如StateTransitionReason)的字符串值进行筛选,以匹配在某个日期范围内启动的ec2s?

Amazon web services 如何使用aws CLI对包含日期(如StateTransitionReason)的字符串值进行筛选,以匹配在某个日期范围内启动的ec2s?,amazon-web-services,amazon-ec2,automation,aws-sdk,aws-cli,Amazon Web Services,Amazon Ec2,Automation,Aws Sdk,Aws Cli,我正在尝试制作一个监视脚本,该脚本将查找已启动、未启动、超过7天且仍处于停止状态的旧ec2框,然后将其删除。为此,我需要识别那些未使用的盒子。LaunchTime值是一个日期参数,但我尝试使用的参数是StateTransitionReason,它包含一个日期 这很有效,并向我显示一个完整的列表: aws ec2 describe-instances --filters 'Name=instance-state-name,Values=stopped' 'Name=tag:App_Name,Va

我正在尝试制作一个监视脚本,该脚本将查找已启动、未启动、超过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}' 

aws ec2描述实例--filters'Name=instance state Name,Values=stopped''Name=tag:App_Name,Values=MYAPPS''Name=tag:Name,Values=development-*'--query'Reservations[*]。实例[?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[?StateTransitionReason<=`User initiated (2019-10-10 05:00:00 GMT)`].{Instance:InstanceId,StateTransitionReason:StateTransitionReason,Name:Tags[?Key==`Owner`]|[0].Value}'

aws ec2描述实例--filters'Name=instance state Name,Values=stopped''Name=tag:App_Name,Values=MYAPPS''Name=tag:Name,Values=development-*'--query'Reservations[*]。实例[?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[?StateTransitionReason<=`User initiated (2019-10-10 05:00:00 GMT)`].{Instance:InstanceId,StateTransitionReason:StateTransitionReason,Name:Tags[?Key==`Owner`]|[0].Value}'

aws ec2描述实例--filters'Name=instance state Name,Values=stopped''Name=tag:App_Name,Values=MYAPPS''Name=tag:Name,Values=development-*'--query'Reservations[*]。实例[?StateTransitionReasonSuggestion:使用编程语言(如Python)检索和解析这些值要容易得多不是使用AWS CLI。(但是您的命令看起来非常令人印象深刻!)谢谢@JohnRotenstein:),是的,如果有人能给我提供线索,我只是尝试一下。如果没有,我将使用python函数结束。````````!/bin/bash if date-v-30d>/dev/null 2>&1;然后是BSD系统(Mac OS X)DATE=DATE-v-30d+%Y-%m-%d else#GNU系统(Linux)DATE=$(DATE--DATE=“-90天”+%Y-%m-%d)echo$DATE fi aws ec2描述实例--filters‘Name=实例状态名称,value=stopped'--query‘保留[]。实例[?启动时间>=`$DATE`[]。{id:InstanceId,type:InstanceType,LaunchTime,state:state,stat\u transaction:StateTransitionReason}”“但这是基于LaunchTime@Adiii我不是在寻找LaunchTime,我是在寻找上次启动它的时间,因为EC2自动停止,但由开发人员启动。这就是为什么我需要StateTransitionReasonStateTransitionReason失败的原因,它不仅包含时间,还包含原因,所以它是某种字符串,你需要抓取datetime对于您自己的建议:使用编程语言(如Python)检索和解析这些值要比使用AWSCLI容易得多。(但是您的命令看起来非常令人印象深刻!)谢谢@JohnRotenstein:),是的,如果有人能给我一个线索,我只是在尝试一下。如果没有,我将使用python函数结束。``````!/bin/bash if date-v-30d>/dev/null 2>&1;然后` BSD systems(Mac OS X)date=date-v-30d+%Y-%m-%d其他` GNU systems(Linux)date=$(date--date date date=“-90天”+%Y-%m-%d)echo$DATE fi aws ec2描述实例--filters'Name=实例状态名称,Values=stopped'--query“Reservations[]”。实例[?LaunchTime>=`$DATE`][.{id:InstanceId,type:InstanceType,LaunchTime,state:state,stat\u transaction:stateTransionReason}”“但这是基于LaunchTime@Adiii我不是在寻找LaunchTime,我是在寻找上次启动它的时间,因为EC2自动停止,但由开发人员启动。这就是为什么我需要StateTransitionReasonStateTransitionReason失败的原因,它不仅包含时间,还包含原因,所以它是某种字符串,你需要抓取datetime为你自己