如果我尝试使用boto3 Lambda create_function()
创建Lambda函数,并且尝试通过Layers=['string']
参数包含Layers,则会收到以下错误消息:
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版本尚未更新/刷新以支持Layers。因为当我在具有最新版本的boto3的计算机上本地运行相同的代码时,它运行时没有任何问题。我已经尝试过在AWS控制台中同时使用列出的Python运行时3.6和3.7,但是都没有用。这些运行时分别具有1.7.74和1.9.42的boto3版本。但是我的本地计算机有1.9.59。因此,也许在1.9.42和1.9.59之间添加了Lambda层。
答案 0 :(得分:3)
我的猜测是,AWS Lambda控制台使用的boto3版本尚未更新/刷新以支持Layers。
完全正确。 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函数代码之外,您还应该创建一个包含boto3
和botocore
的{{3}}使用您的捆绑版本,而不是AWS提供的版本。这也是AWS在其deployment package中提出的建议:
控制功能的部署包中的依赖项。
AWS Lambda执行环境包含许多库,例如Node.js的AWS开发工具包和Python运行时(可在此处找到完整列表:best practices)。为了启用最新的功能集和安全更新,Lambda将定期更新这些库。这些更新可能会对Lambda函数的行为进行微妙的更改。为了完全控制函数使用的依赖项,我们建议将所有依赖项与部署包一起打包。