AWS Batch 与 AWS CodeBuild

Posted

技术标签:

【中文标题】AWS Batch 与 AWS CodeBuild【英文标题】:AWS Batch vs AWS CodeBuild 【发布时间】:2020-11-24 07:32:12 【问题描述】:

我是 AWS 的新手,当我搜索一些东西以从 GitHub(一个 python 项目)下载代码、运行它并将输出保存在 s3 中时,我发现的第一个服务是 CodeBuild。

所以我使用 CodeBuild 实现了这种工作流。

但现在我看到 AWS 有一项名为 AWS Batch 的服务,我想知道是否应该将我的架构迁移到 AWS Batch。

您能否解释一下哪一个(AWS CodeBuild 或 AWS Batch)更适合我的案例?何时使用 AWS Batch 而不是 AWS CodeBuild?

非常感谢。

【问题讨论】:

【参考方案1】:

TLDR 摘要:AWS Codebuild 是简单作业的更好选择。


我的(反向)经历...

我需要运行一个简单的作业,从外部 api 提取数据、读取/写入外部数据库并生成 CSV 报告。

该作业需要大约 1 小时才能运行,因此 AWS Lambda 不在考虑范围内。

经过一番谷歌搜索,我找到了 AWS Batch,并决定尝试一下 Creating a Simple “Fetch & Run” AWS Batch Job。

完成这项“简单”工作所需的步骤:

使用 fetch & run 脚本构建 Docker 映像 为映像创建 Amazon ECR 存储库 将构建的镜像推送到 ECR 创建一个简单的作业脚本并将其上传到 S3 创建一个 IAM 角色以供作业用于访问 S3 配置计算环境 创建作业队列 创建使用构建图像的作业定义 提交并运行从 S3 执行作业脚本的作业

在花费时间创建所有这些资源之后,它并没有开箱即用。我发现自己在调试我不应该调试的随机事物,例如:

Dockerfile 入口点脚本 ECS 集群 EC2 实例和自动扩缩组

在未能找到简单的实际示例并意识到需要付出大量努力后,我决定探索其他解决方案。

我偶然发现了Using AWS CodeBuild to execute administrative tasks 和这篇文章。

我过去曾将 AWS Codebuild 用于 CI/CD 管道,并想“到底是什么,让我们试一试吧”。在更短的时间内,我能够在 cloudwatch 调度程序上运行“代码构建作业”并添加了代码构建松弛通知,而且工作量更少:

将构建项目连接到您的源代码 选择运行时环境 创建 IAM 角色 创建 buildspec.yml 并添加运行时命令

一个主要优势是 CodeBuild 在成熟的 Linux 环境中运行任务。

缺点:

最长执行时间为 8 小时

AWS Codebuild 让我的简单工作更容易上手。

抱歉发了这么长的帖子,只是想分享一下我对这两个服务的体验。

【讨论】:

【参考方案2】:

AWS Batch 用于高度并行计算,例如同时处理大量图像:

AWS Batch 使您能够在 AWS 云上运行批处理计算工作负载。批处理计算是开发人员、科学家和工程师访问大量计算资源的常用方式,AWS Batch 消除了与传统批处理计算软件类似的配置和管理所需基础设施的无差别繁重工作.

因此它不适合您尝试使用它。根据您的描述,CodeBuild 是更好的选择。

【讨论】:

我必须向外部 API 发出许多 http 请求,但是当它同时(或在少数时间)从同一来源收到许多请求时,此 API 无法正常工作。 AWS Batch 可以执行并行请求,避免被外部 API 检测为同一源吗?谢谢 @santos82h AWS Batch 更适用于日志运行的科学操作。也许你可以使用 lambda 函数?它们的扩展性非常好。但当然这是一个非常具体的用例,因此无法提供具体答案。

以上是关于AWS Batch 与 AWS CodeBuild的主要内容,如果未能解决你的问题,请参考以下文章

无法将更改从 AWS CodeBuild 推送到 AWS CodeCommit

如何强制 CodeBuild (AWS) 失败?

[AWS DA] AWS CICD: CodeCommit, CodePipeline, CodeBuild, CodeDeploy

AWS codeBuild 不运行 .ebextension 配置

AWS CodePipeline 不遵守 CodeBuild 设置

使用 AWS CDK 创建用于构建 Docker 映像的 CodeBuild 项目