首页 > 解决方案 > 如何转换 AWS Lambda 为 AWS Batch 创建图像

问题描述

目前已将 java lambda 代码打包为 .zip 文件并部署到AWS Lambda ,但由于长时间运行的任务超过15 分钟 lambda 配额,需要迁移到AWS Batch

可以使用容器映像部署 java lambda 代码,并将 docker CMD 设置为 Dockerfile 中的处理程序(例如https://hub.docker.com/r/amazon/aws-lambda-java)。

FROM public.ecr.aws/lambda/java:11

# Copy function code and runtime dependencies from Gradle layout
COPY build/classes/java/main ${LAMBDA_TASK_ROOT}
COPY build/dependency/* ${LAMBDA_TASK_ROOT}/lib/

# Set the CMD to your handler (could also be done as a parameter override outside of the Dockerfile)
CMD [ "com.example.LambdaHandler::handleRequest" ]

所以代码仍然可以作为容器镜像部署到 AWS Lambda。问题是它仍然是一个 lambda,所以将那个图像用于 AWS Batch 没有任何意义......

大师 鉴于 lambda 逻辑已经过试验和测试:

  1. 使用 handleRequest 方法将 lambda 代码转换为与 AWS Batch 一起使用的最简单方法是什么 -> 可能从 JAR 执行并准备图像以便可以与 AWS Batch 一起使用?
  2. 入口点而不是处理程序需要一个主要方法吗?

标签: javadockeraws-lambdadockerfileaws-batch

解决方案


Lambda 容器映像适用于需要在 AWS Lambda 上运行的自定义环境。作为容器镜像构建的函数仍应遵循 Lambda 的调用模型,因此这些函数的最长持续时间仍为 15 分钟。它不能替代 ECS。

要将您的函数与 Batch 一起使用,您必须使用函数的代码和所有依赖项构建一个 docker 映像,将其推送到 ECR,将其与 ECS 一起使用,并在必要时使用 Batch API 的 SubmitJob 调用环境变量。

是的,根据您的逻辑,您将需要一个入口点/其他 CMD 而不是 LambdaHandler。任何运行函数并退出容器的东西CODE 0


推荐阅读