【问题标题】:How to convert AWS Lambda to create an image for AWS Batch如何转换 AWS Lambda 为 AWS Batch 创建图像
【发布时间】:2021-10-25 13:28:51
【问题描述】:

目前已将 java lambda 代码打包为 .zip 文件并部署到 AWS Lambda,但由于长时间运行的任务超过了 @987654321,需要迁移到 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. 是否需要一个 ma​​in 方法 作为入口点而不是处理程序?

【问题讨论】:

    标签: java docker aws-lambda dockerfile aws-batch


    【解决方案1】:

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

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

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

    【讨论】:

    • lambda 处理程序接口有一个事件和上下文对象,通过将函数代码作为 docker 映像的一部分可用的那些等价物是什么?例如java main 函数怎么会足够,因为它只需要字符串 args
    • Batch 允许将环境变量传递给容器。您可以使用 lambda 将事件和上下文对象作为环境变量传递给批处理以继续处理作业,也可以直接传递函数参数而不使用 lambda
    猜你喜欢
    • 1970-01-01
    • 2017-01-05
    • 1970-01-01
    • 2020-11-22
    • 2017-11-25
    • 2020-12-21
    • 2021-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多