如何在AWS Batch中定义根卷大小

时间:2018-10-11 21:07:09

标签: amazon-web-services docker size volume aws-batch

我正在使用AWS Batch,发现根卷大小太小而无法完成任务。

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

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

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

我还尝试通过管道传输来自s3存储桶的输入,分析数据和管道输出至第二个s3存储桶来执行任务,但每次都会遇到Connection Reset by Peer错误,这可能是因为任务运行时间过长(还可以将--cli-read-timeout设置为0,但根本无法解决。)

是否可以为AWS Batch中的作业配置根卷大小?

3 个答案:

答案 0 :(得分:6)

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

此问题的解决方案是创建一个从AWS Batch使用的默认AMI派生的Amazon Machine Image。 AMI使您能够通过安装库,修改启动脚本,自定义配置文件,以及为我们的目的而最重要地配置操作系统的方式,最重要的是:定义数据卷的逻辑分区和安装点。

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

我们要基于的AMI是经过ECS优化的官方AMI。 Take a gander at this page可以根据您正在运行的AWS区域找到所需的AMI。

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

enter image description here

选择t2.micro实例类型。

选择Next: Configuration Details

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

现在,您可以在其中配置AMI上的数据量。此步骤还没有为AMI定义最终的卷配置,但是我发现按所需的方式进行配置很有用。在创建AMI之前,您将有机会在以后进行更改。完成后,点击Next: Add Tags

添加所需的任何标签(可选)。点击Next: Configure Security Group

SSH选择Type,并将Source设置为Anywhere,或者,如果您比我更负责任,请设置一组您知道将要使用的IP范围用于连接到您的实例。点击Review and Launch

此页面将使您可以查看已设置的选项。如果一切看起来不错,请Launch。当它要求提供密钥对时,请选择已创建的密钥对和现有密钥对,或创建一个新的密钥对。未能执行此步骤将使您无法连接到实例。

2。配置您的软件环境

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

enter image description here

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

enter image description here

登录后,可以通过安装所需的任何软件包,库和配置来根据需要配置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

enter image description here

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

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

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

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

enter image description here

4。配置AWS Batch以使用新的AMI

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

enter image description here

通过为容器(服务角色)和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状态。出问题了。

enter image description here

答案 1 :(得分:0)

您现在也可以使用启动模板。在启动模板中,增加根卷大小。然后从作业定义中将/ mnt之类的本地文件系统安装到docker。

答案 2 :(得分: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 计算环境相关联。