【问题标题】:Problem creating Lambda function that has a Layer using boto3使用 boto3 创建具有层的 Lambda 函数时出现问题
【发布时间】:2019-05-31 12:49:34
【问题描述】:

如果我尝试使用 boto3 Lambda create_function() 创建 Lambda 函数,并尝试通过 Layers=['string'] 参数包含层,我会收到以下错误消息: Unknown parameter in input: "Layers", must be one of: FunctionName, Runtime, Role, Handler, Code, Description, Timeout, MemorySize, Publish, VpcConfig, DeadLetterConfig, Environment, KMSKeyArn, TracingConfig, Tags

...有什么想法吗? The documentation 建议这应该可行,但这里显然有些问题。注意:update_function_configuration() 中的“图层”也有类似的问题。

我的猜测是 AWS Lambda 控制台使用的 boto3 版本尚未更新/刷新以支持层。因为当我在具有相当新版本的 boto3 的机器上本地运行相同的代码时,它运行没有任何问题。我已经尝试在 AWS 控制台中使用列出的 3.6 和 3.7 的 Python 运行时,但都不起作用。这些运行时的 boto3 版本分别为 1.7.74 和 1.9.42。但是我的本地机器有 1.9.59。所以也许 Lambda 层的添加发生在 1.9.42 和 1.9.59 之间。

【问题讨论】:

  • 你的直觉可能是正确的。它甚至无法识别“图层”参数。

标签: amazon-web-services boto3


【解决方案1】:

我的猜测是 AWS Lambda 控制台使用的 boto3 版本尚未更新/刷新以支持层。

完全正确。 AWS 通常会定期更新 AWS Lambda 上的可用库,但现在已经有几个月没有更新它们了,原因不明。

支持的 API 端点实际上不是在 boto3 中定义的,而是在 botocore 中定义的。 目前botocore 1.10.74 is available on AWS Lambda,同时支持 AWS Lambda 层got added in botocore 1.12.56

为避免您的代码与可用库的版本之间出现这种不兼容性,除了您的 AWS Lambda 函数代码之外,您应该创建一个包含 boto3botocoredeployment package,以便您的代码使用您的捆绑版本而不是AWS 提供的。这也是 AWS 在他们的 best practices 中所建议的:

控制函数部署包中的依赖关系。

AWS Lambda 执行环境包含许多库,例如用于 Node.js 和 Python 运行时的 AWS 开发工具包(完整列表可在此处找到:Lambda Execution Environment and Available Libraries)。为了启用最新的一组功能和安全更新,Lambda 将定期更新这些库。这些更新可能会给您的 Lambda 函数的行为带来细微的变化。要完全控制您的函数使用的依赖项,我们建议将您的所有依赖项打包到您的部署包中。

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 2010-12-04
    • 2020-03-10
    • 2022-10-14
    • 2017-03-31
    • 2023-04-10
    • 2019-06-15
    • 1970-01-01
    相关资源
    最近更新 更多