2

在获取查询输出的第一个元素时,我None在 aws-cli(版本 1.11.160)中获得了额外的 --query 参数和 --output 文本。

请参阅下面的示例。

$ aws kms list-aliases --query "Aliases[?contains(AliasName,'alias/foo')].TargetKeyId|[0]" --output text a3a1f9d8-a4de-4d0e-803e-137d633df24a None $ aws kms list-aliases --query "Aliases[?contains(AliasName,'alias/foo-bar')].TargetKeyId|[0]" --output text None None

据我所知,这一直工作到昨天,但从今天开始,这个额外的None东西进来并扼杀了我们的 ansible 任务。

有没有人经历过类似的事情?

谢谢

4

3 回答 3

0

最好的解释是,并非查询语句的每个匹配项都有 TargetKeyId。在我的帐户中,有几个别名只有 AliasArn 和 AliasName 键/值对。None换句话说,来自 TargetKeyId 的空值。

于 2017-10-28T03:04:54.847 回答
0

在过去的几天里,我也开始遇到这个问题。就我而言,我正在从 cfn 堆栈中查询导出。

我的解决方案是(因为我只会从查询中得到一个结果)更改| [0].Value.Value,它适用于--output text.

一些例子:

$ aws cloudformation list-exports --query 'Exports[?Name==`kms-key-arn`] | []'
[
    {
        "ExportingStackId": "arn:aws:cloudformation:ap-southeast-2:111122223333:stack/stack-name/83ea7f30-ba0b-11e8-8b7d-50fae957fc4a",
        "Name": "kms-key-arn",
        "Value": "arn:aws:kms:ap-southeast-2:111122223333:key/a13a4bad-672e-45a3-99c2-c646a9470ffa"
    }
]


$ aws cloudformation list-exports --query 'Exports[?Name==`kms-key-arn`] | [].Value'
[
    "arn:aws:kms:ap-southeast-2:111122223333:key/a13a4bad-672e-45a3-99c2-c646a9470ffa"
]


$ aws cloudformation list-exports --query 'Exports[?Name==`kms-key-arn`] | [].Value' --output text
arn:aws:kms:ap-southeast-2:111122223333:key/a13a4bad-672e-45a3-99c2-c646a9470ffa


aws cloudformation list-exports --query 'Exports[?Name==`kms-key-arn`] | [0].Value' --output text
arn:aws:kms:ap-southeast-2:111122223333:key/a13a4bad-672e-45a3-99c2-c646a9470ffa
None

我还没有接近找出它发生的原因,但它反驳了@LHWizard 的理论,或者至少表明存在这种解释不充分的条件。

于 2018-11-27T05:08:44.127 回答
0

我在列出阶跃函数时遇到了同样的问题。我认为这是一个错误。我不喜欢忽略第一个或最后一个元素的解决方案,期望它总是None在那个位置 - 在某个阶段问题会得到解决,你的解决方法引入了一个讨厌的错误。

因此,就我而言,我这样做是一种安全的解决方法(适应您的需求):

#!/usr/bin/env bash

arn="<step function arn goes here>"

arns=()
for arn in $(aws stepfunctions list-executions --state-machine-arn "$arn" --max-items 50 --query 'executions[].executionArn' --output text); do
    [[ $arn == 'None' ]] || arns+=("$arn")
done

# process execution arns
for arn in "${arns[@]}"; do
    echo "$arn" # or whatever
done
于 2020-10-09T19:14:00.687 回答