AWS CLI JMESPath 查询帮助在 cli 中使用查询选项

AWS CLI JMESPath Query help using query option in cli

我有以下 cli 命令

aws ecs list-services --cluster ecs-cluster-1

给这个JSON

{
    "serviceArns": [
        "arn:aws:ecs:us-east-1:XXXXXXXXXXXXX:service/ecs-cluster-1/app4",
        "arn:aws:ecs:us-east-1:XXXXXXXXXXXXX:service/ecs-cluster-1/app3",
        "arn:aws:ecs:us-east-1:XXXXXXXXXXXXX:service/ecs-cluster-1/app1",
        "arn:aws:ecs:us-east-1:XXXXXXXXXXXXX:service/ecs-cluster-1/app4"
    ]
}

如何使用 --query 选项通过匹配应用名称 (app1) 取回 app1 ARN?

预期输出

arn:aws:ecs:us-east-1:XXXXXXXXXXXXX:service/ecs-cluster-1/app1

请注意,此 JSON 数组未排序。

假设它是列表中的第一个条目,您可以使用:

--query servicesArns[0]

根据您的操作系统,您可能需要引用它:

--query 'servicesArns[0]'

如果您要查找 'contains' app1 的条目,请使用:

--query serviceArns[?contains(@, 'app1') == `true`]|[0]

那些back-ticks总是给我带来麻烦。您可以尝试并可能使用其他 tick-marks.

JMESPath 的良好参考:

您可以使用 contains or ends_with 作为过滤部分。

然后您想停止项目并获取数组的第一项,以便只有您感兴趣的应用程序 ARN。
文档的 pipe expression 教程中介绍了停止投影。

所以,给定表达式

serviceArns[?ends_with(@,'app1')]|[0]

你最终得到了预期的结果

"arn:aws:ecs:us-east-1:XXXXXXXXXXXXX:service/ecs-cluster-1/app1"

在 AWS 命令​​行界面中,这将是:

aws ecs list-service \
  --cluster ecs-cluster-1 \
  --query "serviceArns[?ends_with(@,'app1')]|[0]"