如何在 AWS CLI 中获取最新发布的 Lambda 函数版本

Nig*_*out 6 command-line-interface amazon-web-services

如何获取 Lambda 函数的最新发布版本?除了$LATEST,我怎样才能得到结果为“5”

$ aws lambda list-versions-by-function --function-name My_Lambda_Function --query 'Versions[*][Version, FunctionArn]' --output json
[
    [
        "$LATEST",
        "arn:aws:lambda:us-east-2:123456789000:function:My_Lambda_Function:$LATEST"
    ],
    [
        "1",
        "arn:aws:lambda:us-east-2:123456789000:function:My_Lambda_Function:1"
    ],
    [
        "2",
        "arn:aws:lambda:us-east-2:123456789000:function:My_Lambda_Function:2"
    ],
    [
        "3",
        "arn:aws:lambda:us-east-2:123456789000:function:My_Lambda_Function:3"
    ],
    [
        "4",
        "arn:aws:lambda:us-east-2:123456789000:function:My_Lambda_Function:4"
    ],
    [
        "5",
        "arn:aws:lambda:us-east-2:123456789000:function:My_Lambda_Function:5"
    ]
]
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 10

我发现GitHub 上的这个帖子很有见地,您可以通过$LATEST几种方式获得最大的非项目,但只有其中一种是正确的:

错误的方式,此命令仅就版本而言是正确的,9因为它将对版本进行字符串比较并确定"9"大于"10"

aws lambda list-versions-by-function --function-name my_lambda \
  --query "max_by(Versions, &Version)"
Run Code Online (Sandbox Code Playgroud)

错误的方式,此命令仅就版本50(或任何页面大小)而言才是正确的,因为它只会过滤第一页中返回的结果。

aws lambda list-versions-by-function --function-name my_lambda \
  --query "Versions[-1]"
Run Code Online (Sandbox Code Playgroud)

错误的方式,这个命令会在过滤之前考虑所有的结果,但仍然假设它们的顺序是正确的

aws lambda list-versions-by-function --function-name my_lambda \
  --no-paginate \
  --query "Versions[-1]"
Run Code Online (Sandbox Code Playgroud)

错误的方式,这个命令看起来适合排序,但to_number("$LATEST")返回时会卡住null

aws lambda list-versions-by-function --function-name my_lambda \
  --no-paginate \
  --query "max_by(Versions, &to_number(Version))" 
Run Code Online (Sandbox Code Playgroud)

错误的方式,这个命令看起来适合排序,但(在我的机器上)不接受文字0.

aws lambda list-versions-by-function --function-name my_lambda \
  --no-paginate \
  --query "max_by(Versions, &to_number(Version) || '0')"
Run Code Online (Sandbox Code Playgroud)

正确的方法是,此命令将在考虑所有结果之前获取所有结果,并通过两次转换为数字来解决数字文字的问题。

aws lambda list-versions-by-function --function-name my_lambda \
  --no-paginate \
  --query "max_by(Versions, &to_number(to_number(Version) || '0'))"
Run Code Online (Sandbox Code Playgroud)

  • --no-paginate 被误解了。来自文档:“要禁用分页并仅返回结果的第一页,请使用 --no-paginate 选项。”。所以“正确的方式”必须不分页。这是在实践和文档中看到的。 (6认同)

Adi*_*iii 2

您可以使用获取所有版本list-versions-by-function,然后使用jq提取倒数第​​二个版本

aws lambda  list-versions-by-function --function-name LogsToElasticsearch_goabode --max-items 5 \
 --query 'Versions[*].[Version,FunctionName]' | jq '.[-1]'
Run Code Online (Sandbox Code Playgroud)

或者获取所有名称

 aws lambda  list-versions-by-function --function-name my_lambda \
 --max-items 5 --query 'Versions[*].[Version,FunctionName]'
Run Code Online (Sandbox Code Playgroud)