繁体   English   中英

如何在“Systems Manager”运行命令中找到所有不成功的实例?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM