首页 > 解决方案 > 如何在 AWS CLI 中获取 Lambda 函数的最新发布版本

问题描述

如何获取 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"
    ]
]

标签: amazon-web-servicescommand-line-interface

解决方案


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

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

aws lambda list-versions-by-function --function-name my_lambda \
  --query "max_by(Versions, &Version)"

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

aws lambda list-versions-by-function --function-name my_lambda \
  --query "Versions[-1]"

错误的方式,此命令将在过滤它们之前考虑所有结果,但仍假定它们将按正确的顺序排列

aws lambda list-versions-by-function --function-name my_lambda \
  --no-paginate \
  --query "Versions[-1]"

错误的方式,这个命令看起来正确的排序目的,但会在to_number("$LATEST")返回时窒息null

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

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

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

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

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

推荐阅读