我正在尝试自动化更新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()语句,该语句可以从顶层对“ Layers”数组进行过滤:

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

https://jqplay.org/s/SiFSE3RxZV

但是我一直收到我认为来自select()语句内部的“无法遍历null”错误消息吗?

计划是将列表筛选为使用有问题的特定图层的FunctionArn ,然后为每个结果返回FunctionArn值以供在脚本中使用。

===============>>#1 票数:2 已采纳

Functions元素中,选择具有Layers键的值(一个数组)包含至少一个在Arn字段中具有layer2对象,然后提取其FunctionArn 例如:

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

  ask by danielcraigie translate from so

本文未有回复,本站智能推荐: