使用Fargate图像作为lambda



我使用AWS Fargate运行基于python的Docker映像(存储在AWS ECR中),并且它按预期工作。调用由lambda函数完成,该函数填充环境,然后调用Fargate任务。

现在我想使用相同的Docker映像,但通过SQS触发器调用它。我定义了一个新的函数,如下所示:

def handler(event, context):
print("Handler called!")
print(orjson.dumps(event))
print(orjson.dumps(context))

,并试图通过发送测试SQS消息来调用它。

docker镜像正在使用以下命令:

ENTRYPOINT [ "python3", "/app/main.py", "run" ]

我想调用上面的处理程序函数,并确保事件和上下文对处理程序可用。我如何将事件和上下文嵌入为lambda处理程序的ENTRYPOINT或CMD的一部分?

澄清:现在main.py正在使用click来处理命令行参数。如果我为通过lambda调用添加另一个click命令,则上下文和事件参数将丢失。我试图以某种方式调用/app/main.py并调用"处理程序"。函数,将事件和上下文作为参数传递给处理程序函数。

在运行Fargate任务时,没有一种原生的(优雅的)方式来传递事件和上下文。我看到使用的一个选项是将事件和上下文的内容保存在两个变量中,然后启动ECS任务,通过runTaskAPI将这些内容传递给变量(我假设当您说Lambda"调用Fargate任务"时使用的就是这种方法)。您可以按照这里的文档添加overrides

这里需要注意的是,您需要修改代码以从这些变量中读取事件和上下文,而不是作为调用处理程序的一部分传递。

最新更新