![](/img/trans.png)
[英]AWS Systems Manager Command: Works when executing manually, does not work from run command
[英]How to find all the instances that were not successful in a "Systems Manager" run command?
我运行了AWS-RunPatchBaseline
运行命令,我的实例很少成功,其中很少超时。 我想使用aws cli list-command-inovcations
命令过滤超时的实例。
当我运行以下 CLI 命令时:
aws ssm list-command-invocations --command-id 7894b7658-a156-4e5g-97t2-2a9ab5498e1d
它显示附在此处的输出
接下来,从上面的 output 中,我想过滤所有具有"Status": "Timedout", "StatusDetails": "DeliveryTimedOut"
(或者,实际上,除"Status": "Success"
之外的所有实例)的实例
我试过了:
aws ssm list-command-invocations --command-id 7894b7658-a156-4e5g-97t2-2a9ab5498e1d --output text --query '@[?(CommandInvocations.Status != 'Success')]'
它正在返回None
。
我也试过
aws ssm list-command-invocations --command-id 7894b7658-a156-4e5g-97t2-2a9ab5498e1d --output text --query '@[?(@.Status != 'Success')]'
这也返回None
。
与
aws ssm list-command-invocations --command-id 7894b7658-a156-4e5g-97t2-2a9ab5498e1d --output text --query 'CommandInvocations[?(@.Status != 'Success')]'
它没有被过滤,返回完整的 output。
由于您没有提供 output 的示例,可以出于测试目的复制/粘贴,因此此示例基于AWS 文档中的 output,其中我更改了 ID ef7fdfd8-9b57-4151-a15c-db9a12345678
命令的Status
,我也从多余的数据中清除了一点,所以:
{
"CommandInvocations": [
{
"CommandId": "ef7fdfd8-9b57-4151-a15c-db9a12345678",
"InstanceId": "i-02573cafcfEXAMPLE",
"InstanceName": "",
"DocumentName": "AWS-UpdateSSMAgent",
"DocumentVersion": "",
"RequestedDateTime": 1582136283.089,
"Status": "TimedOut",
"StatusDetails": "DeliveryTimeOut"
},
{
"CommandId": "ef7fdfd8-9b57-4151-a15c-db9a12345678",
"InstanceId": "i-0471e04240EXAMPLE",
"InstanceName": "",
"DocumentName": "AWS-UpdateSSMAgent",
"DocumentVersion": "",
"RequestedDateTime": 1582136283.02,
"Status": "Success",
"StatusDetails": "Success"
}
]
}
鉴于此 JSON,要应用的过滤器与您在教程“过滤器投影”一章中可以找到的过滤器非常相似。
你只需要 select 数组所在的属性,在你的例子中, CommandInvocations
,并应用你的条件, Status != `Success`
,在括号内[? ]
[? ]
。
因此,通过查询:
CommandInvocations[?Status != `Success`]
在上面的 JSON 上,我们最终得到了预期的结果:
[
{
"CommandId": "ef7fdfd8-9b57-4151-a15c-db9a12345678",
"InstanceId": "i-02573cafcfEXAMPLE",
"InstanceName": "",
"DocumentName": "AWS-UpdateSSMAgent",
"DocumentVersion": "",
"RequestedDateTime": 1582136283.089,
"Status": "TimedOut",
"StatusDetails": "DeliveryTimeOut"
}
]
因此,您的 AWS 命令应该是:
aws ssm list-command-invocations \
--command-id 7894b7658-a156-4e5g-97t2-2a9ab5498e1d \
--output text \
--query 'CommandInvocations[?Status != `Success`]'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.