java - 如何转换 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 逻辑已经过试验和测试:
- 使用 handleRequest 方法将 lambda 代码转换为与 AWS Batch 一起使用的最简单方法是什么 -> 可能从 JAR 执行并准备图像以便可以与 AWS Batch 一起使用?
- 入口点而不是处理程序需要一个主要方法吗?
解决方案
Lambda 容器映像适用于需要在 AWS Lambda 上运行的自定义环境。作为容器镜像构建的函数仍应遵循 Lambda 的调用模型,因此这些函数的最长持续时间仍为 15 分钟。它不能替代 ECS。
要将您的函数与 Batch 一起使用,您必须使用函数的代码和所有依赖项构建一个 docker 映像,将其推送到 ECR,将其与 ECS 一起使用,并在必要时使用 Batch API 的 SubmitJob 调用环境变量。
是的,根据您的逻辑,您将需要一个入口点/其他 CMD 而不是 LambdaHandler。任何运行函数并退出容器的东西CODE 0
推荐阅读
- ios - 将 OOP 重构为面向协议的编程
- java - 更改父集 JPA 2 + Hibernate 5 后,孤儿不会被删除
- excel - 如何使用 VBA 设置具有多个条件的条件格式?
- amazon-web-services - AWS Step Function:找不到为字段“Value.$”指定的 JSONPath“$.S3_BUCKET”
- react-native - 将 React Navigation 从 4.x 迁移到 6.x
- macos - 使用终端将应用程序文件夹添加到停靠。苹果系统
- java - 未找到 Spring 存储库 Bean
- android-studio - Android Studio,它可能仅在 Gradle 文件中实现特定 API 级别的某些插件吗?
- google-play-billing - BillingClient.querySkuDetails(SkuDetailsParams.builder()) 不工作?
- php - 在 WP 站点的 wp-content/uploads/ 目录中设置 301 重定向到新的图像 URL