17

我正在使用 AWS Batch,但我发现根卷大小对于我的任务来说太小了。

我尝试创建一个新的计算环境/作业队列,但没有任何选项可以设置卷大小。我尝试从此处更改启动配置,但 AWS Batch 不考虑新的启动配置和/或自动缩放组。我可能必须更改dm.basesize但不清楚应该在哪里完成。

因此,我从 Amazon 2 Linux 中设置了一个具有 500 GB 存储空间的自定义 AMI,并按照此处所示更改了--storage-optwith ,但是,尽管我的实例已生成,但作业仍无限期地处于 RUNNABLE 状态。我检查了此处定义的可能原因dm.basesize=400GB,但是 i) 选中“启用自动分配公共 IPv4 地址”,ii) 图像应该是好的(在创建环境时已经过验证并且可以生成),iii) 我有 5 个实例的限制实例类型(但我什至无法运行 1),iv)我的角色权限应该没问题 - 我成功使用了默认 amazonlinux 映像的相同角色,v)资源不足(生成了实例,所以我认为这不应该是问题),vi)连接 - 它应该可以工作,因为自动缩放组显示成功状态。

一种可能的解决方案可能是在运行时附加特定的 AWS 卷,但它会受到限制,我想找到一个自动解决方案,因为相反我必须管理多个卷以进行并行执行。

我还尝试通过管道输入来自 s3 存储桶,分析数据并将输出管道输出到第二个 s3 存储桶来执行任务,但我每次都收到对等错误的连接重置,可能是因为任务运行时间过长(我也设置--cli-read-timeout为 0但它根本没有解决它)。

有没有办法为 AWS 批处理中的作业配置根卷大小?

4

3 回答 3

14

推荐的解决方案是使用非托管计算环境。不幸的是,这最终成为一个糟糕的建议,因为创建自己的非托管计算环境不仅困难且深奥,而且不仅有点违背 AWS 批处理的全部目的,而且还有一个更好(也更简单)的解决方案。

此问题的解决方案是创建一个源自 AWS Batch 使用的默认 AMI 的 Amazon 系统映像。AMI 允许您通过安装库、修改启动脚本、自定义配置文件,以及最重要的目的:定义数据卷的逻辑分区和挂载点,从而准确地配置操作系统。

1. 选择一个基础 AMI 开始,配置您的实例

我们想要建立的 AMI 是官方的 ECS 优化 AMI。浏览此页面,根据您运行的 AWS 区域查找您需要的 AMI。

识别您的 AMI 后,单击右侧栏中的“启动实例”链接。您将被带到此页面:

在此处输入图像描述

选择 t2.micro 实例类型。

选择Next: Configuration Details

如果需要,为您的实例提供适当的 IAM 角色。什么构成“适当”由您自行决定。保留其余的默认选项。单击Next: Add Storage

现在,您可以配置数据卷在 AMI 上的外观。此步骤也不会为您的 AMI 定义最终卷配置,但我发现按照您的需要进行配置很有用。您稍后将有机会在创建 AMI 之前更改此设置。完成后,单击Next: Add Tags

添加您想要的任何标签(可选)。单击Next: Configure Security Group

选择SSHType并将源设置为Anywhere,或者如果您比我更负责任,请设置一组您知道将用于连接到您的实例的特定 IP 范围。单击Review and Launch

此页面将允许您查看已设置的选项。如果一切看起来都不错,那么Launch. 当它要求一个密钥对时,要么选择你创建的现有密钥对,要么创建一个新的。如果不执行此步骤,您将无法连接到您的实例。

2.配置你的软件环境

单击启动后,转到您的 EC2 仪表板以查看正在运行的实例:

在此处输入图像描述

等待您的实例启动,然后右键单击它。单击Connect,然后将示例 ssh 命令复制粘贴到支持 ssh 的终端中。这-i "keyname.pem"实际上是您的 .pem 文件的路径,因此请确保您cd进入您的~/.ssh目录,或者将标志的值更改为您存储私有 SSH 密钥的路径。您可能还需要将“root”更改为“ec2-user”。

在此处输入图像描述

登录后,您可以通过安装 VM 所需的任何包、库和配置来配置您的 VM。如果您使用 AWS 提供的 ECS 优化 AMI,您的 AMI 将已经满足 ECS AMI 的基本要求。如果您出于某种(奇怪的)原因选择不使用 ECS 优化的 AMI,您将安装和配置以下软件包:

  1. 最新版本的 Amazon ECS 容器代理
  2. 最新版本的 ecs-init 代理
  3. 为您的 ECS 容器代理版本推荐的 Docker 版本。

另请注意,如果要附加与根卷不同的另一个卷,则需要修改/etc/fstab文件,以便在实例启动时挂载新卷。我建议您向 Google 了解如何执行此操作。

3. 保存您的 AMI

完成所有软件配置和安装后,返回 EC2 仪表板并查看正在运行的实例。

右键单击您刚刚创建的实例。将鼠标悬停在上方Image,然后选择Create Image

在此处输入图像描述

您会看到这具有您在步骤 1 中选择的卷配置。我没有更改卷的默认设置,因此您可以在上面的屏幕截图中看到 ECS 优化 AMI 的默认卷实际上是 8GB /dev/xvda/(root)和 22GB 用于/dev/xvdc/(docker 图像等)。确保Delete on Termination选择这些选项,以便您的 Batch 计算环境在实例终止后删除卷,否则您将面临创建无限数量的 EBS 卷的风险(非常昂贵,所以我被告知)。我会将我的 AMI 配置为只有 111GB 的根存储空间,仅此而已。Docker 不一定需要单独的卷。

为您的图像命名和描述,然后选择Create Image

您的实例将重新启动。关闭实例后,AWS 将为其创建一个映像,然后重新打开该实例。

在您的 EC2 控制台中,转到Images, AMIs左侧。几分钟后,您应该会在列表中看到新创建的 AMI。

在此处输入图像描述

4. 配置 AWS Batch 以使用您的新 AMI

返回您的 AWS 控制面板并导航到 AWS Batch 页面。Compute environments在左侧选择。选择Create environment

在此处输入图像描述

通过为您的容器(服务角色)和 EC2 实例(实例角色)、供应模型、网络和标签选择适当的 IAM 角色来配置您的环境。

Option                             Value

Compute environment type          Managed
Compute environment name          ami_test
Service role                      AWSBatchServiceRole
Instance role                     ecsInstanceRole
EC2 key pair                      landonkey.pem (use name of your private key)
Provisioning model                On-Demand (choose spot for significantly cheaper provisioning)
Allowed instance types            Optimal
Minimum vCPUs                     0
Desired vCPUs                     0
Maximum vCPUs                     256
Enable user-specified Ami ID      True
AMI ID                            [ID of AMI you generated]
VPC id                            [default value]
Subnets                           [select all options]
Security groups                   default

关键步骤是选择Enable user-specified Ami ID并指定您在前面步骤中生成的 AMI ID。

配置完所有选项后,选择Create

5. 创建作业队列和作业定义

为了测试我们的计算环境是否确实有效,让我们继续创建一些简单的队列和作业定义。

Job queues在左侧选择并输入以下选项:

Option                                  Value

Queue name                            ami_test_queue
Priority                              1
Enable Job queue                      True
Select a compute environment          ami_test

选择Create。等待新队列上的状态变为VALID

转到Job definitions并选择Create。输入以下值:

Option                           Value

Job definition name            ami_test_job_def
Job role                       ECS_Administrator
Container image                amazonlinux
Command                        df -h
vCPUs                          1
Memory (MiB)                   1000
Job attempts                   1
Execution timeout              100
Parameters                     [leave blank]
Environment variables          [leave blank]
Volumes                        [leave blank]
Mount points                   [leave blank]

选择Create job definition

最后,转到Jobs左侧并选择Submit job。为您的工作命名并ami_test_job_def:1为工作定义选择。保留其余默认值并选择Submit job

如果一切顺利,您现在应该看到您的工作已进入PendingRunnable状态。请注意,您的作业实际运行可能需要 10 分钟以上的时间。EC2 实例的实例化通常需要 5-10 分钟,而通过状态检查则需要几分钟。如果您的作业在Runnable创建实例并通过所有状态检查后仍处于该状态。出了点问题。

在此处输入图像描述

于 2018-10-21T12:56:01.997 回答
11

您现在也可以使用启动模板。在启动模板中增加根卷大小。然后从作业定义中将本地文件系统(例如 /mnt)挂载到 docker。

参考:https ://docs.aws.amazon.com/batch/latest/userguide/launch-templates.html

于 2018-12-19T18:49:47.360 回答
0

这里有这个问题的指导:https ://aws.amazon.com/premiumsupport/knowledge-center/batch-job-failure-disk-space/

以提供的 MIME 多部分文件为例,该文件将 Docker 大小设置为 20G,并对其进行 base64 编码。IE。Mime_file.txt | base64

结果输出是一串数字和字母。将此字符串输入到提供的启动模板中的“UserData”字段中,并将您的启动模板保存为 json。然后使用 AWS CLI 注册启动模板aws ec2 --region [region] create-launch-template --cli-input-json file://launchtemplate.json。在 Batch 中将此启动模板与您的计算环境相关联。

于 2021-02-17T18:59:44.067 回答