Aws Lambda 列出所有可用的语言运行时

问题描述 投票:0回答:3

我有一个要求,我想确保所有单独的 Lambda 函数都使用最新版本的运行时。

使用 CLI cmd:

aws lambda get function
我能够获取该特定 lambda 函数的运行时版本,但我想确保它使用的是最新的语言版本。

浏览 Lambda 的 Aws 文档 https://docs.aws.amazon.com/cli/latest/reference/lambda 我无法找到任何 API 可以判断哪些可用的运行时可用,也许从该列表中我能够确定哪个是最新的 (也许通过检查该特定语言的最高版本号).

所以只是想知道是否有我找不到的 AWS API,或者可能有其他方法可以实现这一目标?

注意:我不是在谈论 Lambda 函数版本控制,而是在谈论语言运行时版本。
例如,目前 AWS lambda 的最新运行时是 Node.js 8.10。因此,如果任何 Lambda 函数使用 Node.js 6.10 作为运行时,那么我想强调该 Lambda 函数。

amazon-web-services aws-lambda aws-cli
3个回答
8
投票

没有官方API调用来获取此信息。

我在botocore源代码中发现了以下内容:

"Runtime":{
  "type":"string",
  "enum":[
    "nodejs",
    "nodejs4.3",
    "nodejs6.10",
    "nodejs8.10",
    "java8",
    "python2.7",
    "python3.6",
    "python3.7",
    "dotnetcore1.0",
    "dotnetcore2.0",
    "dotnetcore2.1",
    "nodejs4.3-edge",
    "go1.x"
  ]
},

因此,您可以定期从该项目中获取运行时版本列表。


0
投票

要在 botocore 中添加已接受的答案,而不是搜索我使用过的部分:

RuntimeVersionsURL="https://raw.githubusercontent.com/boto/botocore/develop/botocore/data/lambda/2015-03-31/service-2.json"

curl -s $RuntimeVersionsURL | jq -r '.shapes.Runtime.enum[]'

我还使用

pup
进行一些 HTML 抓取,以便能够使用以下命令获取支持与不支持/弃用的运行时版本的列表:

└❯ supportedRuntimeVersions=$(curl -s https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html \
    | pup '.table-container' | pup ':parent-of(:parent-of(:parent-of(:parent-of(:contains("Supported")))))' \
    | pup 'tbody code text{}' | sed '/^[[:space:]]*$/d' | tr -d ' ')

└❯ echo "$supportedRuntimeVersions" 
nodejs16.x
nodejs14.x
nodejs12.x
python3.9
python3.8
python3.7
java11
java8.al2
java8
dotnetcore3.1
dotnet6
dotnet5.0
go1.x
ruby2.7
provided.al2
provided

└❯ deprecatedRuntimeVersions=$(curl -s https://docs.aws.amazon.com/lambda/latest/dg/lambda-runtimes.html \
    | pup '.table-container' | pup ':parent-of(:parent-of(:parent-of(:parent-of(:contains("Deprecated")))))' \
    | pup 'tbody code text{}' | sed '/^[[:space:]]*$/d'  | tr -d ' ')

└❯ echo "$deprecatedRuntimeVersions"
python3.6
python2.7
dotnetcore2.1
ruby2.5
nodejs10.x
nodejs8.10
nodejs4.3
nodejs6.10
dotnetcore1.0
dotnetcore2.0
nodejs4.3-edge
nodejs

相当丑陋,但它运行良好,并有助于提供应该通过 API 真正可用的信息:/


0
投票

由于这些信息已经存在于 botocore 中,正如前面的答案中指出的,我想直接从 botocore 获取它。这是执行此操作的 python 代码:

import botocore.session

session = botocore.session.get_session()
service_model = session.get_service_model("lambda")
runtime_enum = service_model.operation_model("CreateFunction").input_shape.members["Runtime"].enum
for runtime in runtime_enum:
    print(runtime)

对我来说输出是:

nodejs
nodejs4.3
nodejs6.10
nodejs8.10
nodejs10.x
nodejs12.x
nodejs14.x
nodejs16.x
java8
java8.al2
java11
python2.7
python3.6
python3.7
python3.8
python3.9
dotnetcore1.0
dotnetcore2.0
dotnetcore2.1
dotnetcore3.1
dotnet6
nodejs4.3-edge
go1.x
ruby2.5
ruby2.7
provided
provided.al2
nodejs18.x
python3.10
java17
ruby3.2
python3.11
nodejs20.x
provided.al2023
python3.12
java21
© www.soinside.com 2019 - 2024. All rights reserved.