使用boto3创建具有图层的Lambda函数时遇到问题

时间:2019-01-04 23:36:16

标签: amazon-web-services boto3

如果我尝试使用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层。

1 个答案:

答案 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函数代码之外,您还应该创建一个包含boto3botocore的{​​{3}}使用您的捆绑版本,而不是AWS提供的版本。这也是AWS在其deployment package中提出的建议:

  

控制功能的部署包中的依赖项。

     

AWS Lambda执行环境包含许多库,例如Node.js的AWS开发工具包和Python运行时(可在此处找到完整列表:best practices)。为了启用最新的功能集和安全更新,Lambda将定期更新这些库。这些更新可能会对Lambda函数的行为进行微妙的更改。为了完全控制函数使用的依赖项,我们建议将所有依赖项与部署包一起打包。