gpt4 book ai didi

python - 如何为基于 docker 的 python3 lambda 函数配置入口点/cmd?

转载 作者:行者123 更新时间:2023-12-03 07:22:09 26 4
gpt4 key购买 nike

我从基于 zip 的部署切换到两个 lambda 函数(在 API 网关中使用)的基于 docker 的部署。这两个函数都在同一个 zip 文件中,并且我希望在同一个基于 docker 的容器中拥有这两个函数(这意味着我无法在 Dockerfile 中使用 cmd 设置(或者准确地说需要覆盖无论如何)。以前,我在 cloudformation 模板中使用 handler 属性来指定在哪个模块中调用哪个处理函数,例如

...
ConfigLambda:
Type: 'AWS::Serverless::Function'
Properties:
Handler: config.handler
...
...
LogLambda:
Type: 'AWS::Serverless::Function'
Properties:
Handler: logs.handler
...

但是对于基于 docker 的构建,必须定义一个 ImageConfig,即

...
LogLambda:
Type: 'AWS::Serverless::Function'
Properties:
PackageType: Image
ImageUri: !Ref EcrImageUri
FunctionName: !Sub "${AWS::StackName}-Logs"
ImageConfig:
WorkingDirectory: /var/task
Command: ['logs.py']
EntryPoint: ['/var/lang/bin/python3']
...
ConfigLambda:
Type: 'AWS::Serverless::Function'
Properties:
PackageType: Image
ImageUri: !Ref EcrImageUri
FunctionName: !Sub "${AWS::StackName}-Config"
ImageConfig:
WorkingDirectory: /var/task
Command: ['config.py']
EntryPoint: ['/var/lang/bin/python3']

我有点卡住了,因为无论我将什么组合传递给命令数组,这都不起作用。如果我在 AWS 控制台中触发测试事件,则会收到以下错误

RequestId: <uuid> Error: Runtime exited without providing a reason
Runtime.ExitError

从完整输出来看,文件已加载并执行,但未调用处理函数(在模块导入后立即调用的日志记录设置函数有一些输出)。 AWS 文档中有关基于 python3 的 lambda 的部分指出,处理程序的命名应为 file_name.function (例如 function_lambda.lambda_handler),但这并没有提供任何关于如何在 ImageConfig 中执行命令数组的线索。

如何在 cloudformation 模板中为 lambda 函数正确设置命令部分?

最佳答案

首先,您部署到 AWS Lambda 的容器必须实现 Lambda Runtime Interface 。 AWS Lambda 不是通用的 docker 容器运行时,它仅支持运行实现特定接口(interface)的容器。确保容器实现此接口(interface)的最简单方法是将其基于 AWS 提供的 base images 之一。 .

注意 the base Python imagesENTRYPOINT不是 python 它是一个自定义脚本。该脚本要求 COMMAND 与基于非容器的 Lambda 函数采用相同的 app.handler 格式。

查看示例 Dockerfile here .

关于python - 如何为基于 docker 的 python3 lambda 函数配置入口点/cmd?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75545370/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com