amazon-web-services - JMESPath 过滤器表达式中的引用父元素

标签 amazon-web-services aws-cli jmespath

我有以下 JMESPath 查询

query="Reservations[].Instances[].{ \
    InstanceId: InstanceId, \
    RootDeviceVolumeId: BlockDeviceMappings[?DeviceName==\`/dev/sda1\`] \
       | [].Ebs.VolumeId | [0], \
    RootDeviceName: RootDeviceName \
}"

aws ec2 describe-instances --query $query

它给出这样的输出

+------------+------------------+----------------------+
| InstanceId | RootDeviceName   | RootDeviceVolumeId   |
+------------+------------------+----------------------+
|  i-12345678|  /dev/sda1       |  vol-abcdef12        |
|  i-98765432|  /dev/sda1       |  vol-ef123456        |
|  i-23456789|  /dev/sda1       |  vol-fedcba09        |
|  i-aabbccdd|  /dev/xvda       |  None                |
+------------+------------------+----------------------+

我想找到一种从 BlockDeviceMappings 过滤器表达式中引用 RootDeviceName 的方法,而不是对 /dev/sda1 进行硬编码 code> 设备名称,因为有时它是 /dev/xvda 。但是,我找不到在过滤器表达式中引用父元素的方法。

另一种选择是将 RootDeviceNameInstanceId 映射到所有设备的投影上,然后将其通过管道传递给过滤器表达式,但语法似乎并不支持在投影中包含父元素。

我是否遗漏了什么,或者这只是 JMESPath 语法的限制?

最佳答案

我们需要某种机制来允许您绑定(bind)范围,但目前这还不可能。我非常有兴趣添加这个。现在您必须使用替代工具。

关于amazon-web-services - JMESPath 过滤器表达式中的引用父元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28673747/

相关文章:

python - 使用内部类输入类型调用 AWS lambda 函数

amazon-web-services - 通过cli更新api网关到vpc链接

amazon-web-services - 为什么使用 CLI 启动的 Amazon EMR 集群没有显示在 Web 控制台中?

azure-cli - 使用 Azure CLI 和 JMESPath 过滤网络 vnet 对等列表

python - boto3 和 AWS Athena 权限

amazon-web-services - 如何知道从 aws sam 模板创建 aws 资源时返回哪些属性

amazon-web-services - AWS CLI : ECR list-images, 获取最新信息

azure-cli - 使用 && 对多个属性进行 AZ CLI 查询过滤器

amazon-web-services - AWS Elastic Beanstalk 更新环境错误