使用自定义容器镜像本地测试 AWS Lambda

11

我正试图测试新添加的特性,使用自定义容器镜像运行/调用lambda。因此,我将从AWS python:3.8基础镜像构建一个非常简单的镜像,如下所示:

FROM public.ecr.aws/lambda/python:3.8


COPY myfunction.py ./

CMD ["myfunction.py"]

以下是myfunction.py文件的内容:

import json
import sys

def lambda_handler(event, context):
    print("Hello AWS!")
    print("event = {}".format(event))
    return {
        'statusCode': 200,
    }

我的问题如下:在我的构建完成后:

docker build --tag custom .

如果我没有暴露任何 web 端点,并且假设我成功启动了自定义容器(尽管 handler= 部分让我有点不安,因为我不确定是否已正确配置处理程序),我现在如何调用我的 lambda?

▶ docker run -p 9000:8080 -it custom
INFO[0000] exec '/var/runtime/bootstrap' (cwd=/var/task, handler=) 

一条简单的 curl 命令当然会失败。

▶ curl -XGET http://localhost:9000                                                                                                                                                                       
404 page not found
1个回答

7

原来我需要调用这个极其不直观的URL。

curl -XPOST "http://localhost:9000/2015-03-31/functions/function/invocations" -d '{}'

然而我仍然遇到这个错误

WARN[0149] Cannot list external agents                   error="open /opt/extensions: no such file or directory"
START RequestId: f681b2ca-5e35-499d-a262-dd7bc53912f0 Version: $LATEST
Traceback (most recent call last):andler 'py' missing on module 'myfunction'
END RequestId: f681b2ca-5e35-499d-a262-dd7bc53912f0
REPORT RequestId: f681b2ca-5e35-499d-a262-dd7bc53912f0  Init Duration: 1.08 ms  Duration: 248.05 ms     Billed Duration: 300 ms    Memory Size: 3008 MB    Max Memory Used: 3008 MB

编辑: 通过更改CMD解决了问题。

CMD ["myfunction.py"]

to

CMD ["myfunction.lambda_handler"]

是的,那似乎有点奇怪,那个日期在JS sdk中到处都是,我建议在配置文件中将其删除,以防万一他们改变了它。为什么不直接在本地使用无服务器(pip install会提供在镜像中使用的依赖项)? - Mrk Fldig
任何关于此过程及其相应调用的相关说明 - pkaramol
请看这个,我马上会添加一个答案。https://www.serverless.com/blog/container-support-for-lambda/ - Mrk Fldig
你可以使用无服务器离线插件(我想是这个)https://github.com/dherault/serverless-offline - 这将为您提供在本地运行所需容器的函数。注意:我需要回家后再检查一下。 - Mrk Fldig
我正在弄清楚sls离线是否支持容器,稍等片刻。 - Mrk Fldig
当然。看起来你的答案更方便,所以我也可以接受它作为正确答案。 - pkaramol

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接