【问题标题】:select based on values in sub-object array根据子对象数组中的值进行选择
【发布时间】:2019-12-01 10:36:09
【问题描述】:

我正在尝试自动化更新 AWS Lambda 层和使用它们的函数的过程。为了获取使用特定层的函数列表,我在列出我账户中的当前函数时解析 AWS CLI 的 JSON 输出。调用aws lambda list-functions会返回一个类似于下例的JSON块(我特意删除了一些不相关的内容来关注这个问题):

{
  "Functions": [
    {
      "TracingConfig": {
        "Mode": "PassThrough"
      },
      "FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-1"
    },
    {
      "Layers": [
        {
          "CodeSize": 11359101,
          "Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer1:12"
        }
      ],
      "TracingConfig": {
        "Mode": "PassThrough"
      },
      "FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-2"
    },
    {
      "Layers": [
        {
          "CodeSize": 11359101,
          "Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer1:12"
        },
        {
          "CodeSize": 11359101,
          "Arn": "arn:aws:lambda:eu-west-2:000000000000:layer:layer2:5"
        }
      ],
      "TracingConfig": {
        "Mode": "PassThrough"
      },
      "FunctionArn": "arn:aws:lambda:eu-west-2:000000000000:function:function-3"
    }
  ]
}

在上面的示例中,我定义了三个函数,其中两个至少使用了一层。我需要做的是获取使用特定层的函数的FunctionArn 值列表。到目前为止,我已经能够使用此命令过滤掉不使用任何层的功能:

aws lambda list-functions | jq '.Functions[] | select(.Layers)'

我真正需要做的是创建一个select() 语句,它可以从顶层过滤“层”数组:

aws lambda list-functions | jq '.Functions[] | select(.Layers[] | contains("layer2"))'

https://jqplay.org/s/SiFSE3RxZV

但我不断收到“无法迭代 null”错误消息,我认为这些错误消息来自 select() 语句?

计划是将列表过滤到使用相关特定层的函数,然后为每个结果返回 FunctionArn 值以在我的脚本中使用。

【问题讨论】:

    标签: json select jq


    【解决方案1】:

    Functions 的元素中,选择具有Layers 键的元素,其值-一个数组- 包含至少一个对象,该对象在其Arn 字段-a 字符串- 中具有layer2 作为子字符串,然后提取他们的FunctionArns。例如:

    .Functions[] | select(has("Layers") and any(.Layers[].Arn; index("layer2"))) | .FunctionArn
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-11-23
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 2021-07-08
      • 2021-04-12
      • 2021-11-04
      • 2014-05-29
      相关资源
      最近更新 更多