【问题标题】:AWS CLI filtering with JQ使用 JQ 进行 AWS CLI 过滤
【发布时间】:2022-11-16 15:00:30
【问题描述】:

我仍在努力了解如何使用 JQ 来获得我想要的东西。我想获取我帐户中早于特定日期的所有快照的大小,然后将它们相加以便计算成本。我可以在没有日期过滤的情况下做到这一点。

aws ec2 describe-snapshots --profile my_profile_name | jq "[.Snapshots[].VolumeSize] | add"

这将返回一个数值。没有 JQ,我也可以使用“查询”获取快照列表,但我认为在使用 JQ 时不会应用,但我可能是错的。

aws ec2 describe-snapshots --profile my_profile_name --owner-ids self --query "Snapshots[?(StartTime<='2022-09-08')].[SnapshotId]"

我尝试了使用“select”的各种安排以及我的第一个例子。但是,我还没有得到任何回报。我感谢任何指示。

这是不太有效的“选择”。

aws ec2 describe-snapshots --profile my_profile_name | jq "[.Snapshots[]select(.StartTime < "2022-09-08")] | [.Snapshots[].VolumeSize] | add"

编辑 11/15/22

我能够取得进展,并且找到了一个允许您测试 JQ 的站点。该示例能够选择字符串和数字,但我在处理日期部分时遇到了问题。我不明白如何以 AWS 提供的格式中断日期。我可以做添加部分,我删除了它以简化示例。

这是字符串的工作“选择”。当我使用数字并从 JSON 部分中删除引号时,我只能做更多/更少的事情。

.Snapshots[] | select(.StartTime == "2022-11-14T23:28:39+00:00") | .VolumeSize

jq play example

【问题讨论】:

  • 您应该可以使用--query 来执行此操作。它使用 JMESPath 语法。查看sum()——您应该能够提取快照大小,然后使用sum()创建总值。

标签: amazon-web-services jq aws-cli


【解决方案1】:

您正在寻找的 jq 表达式似乎是:

[.Snapshots[] | select(.StartTime < "2022-09-08") | .VolumeSize] | add

但是,如果没有说明性的 JSON,就很难对其进行测试;这就是mcve guidelines 的原因之一。

【讨论】:

  • 是的,当时我无法遵循这些指导方针,因为这意味着我正在授予对我的 AWS 账户的访问权限。但是,我更新了我原来的问题并找到了 jq 的游乐场网站。此外,您确定了它,这是正确的选择,但它只是没有正确地完成日期部分。
【解决方案2】:

没有 jq 的解决方案是这样的:

aws ec2 describe-snapshots 
    --owner-ids self 
    --query "sum(Snapshots[?StartTime < '2022-11-12'].VolumeSize)"

但请注意,比较是不是“按日期”完成,但通过逐字比较 2016-11-02T01:25:28.000Z2022-11-12 之类的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2019-11-21
    • 1970-01-01
    • 1970-01-01
    • 2014-12-31
    • 1970-01-01
    相关资源
    最近更新 更多