我正在使用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中的作业配置根卷大小?
答案 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之后,单击右侧列中的“启动实例”链接。您将被带到此页面:
选择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仪表板以查看正在运行的实例:
等待实例启动,然后右键单击它。单击Connect
,然后将Example ssh命令复制粘贴到具有ssh功能的终端中。 -i "keyname.pem"
实际上是您.pem文件的路径,因此请确保您将cd
移至~/.ssh
目录,或者将标志的值更改为存储私有文件的路径。 SSH密钥。您可能还需要将“ root”更改为“ ec2-user”。
登录后,可以通过安装所需的任何软件包,库和配置来根据需要配置VM。如果您使用了AWS提供的经ECS优化的AMI,则您的AMI将已经满足ECS AMI的基本要求。如果出于某些(奇怪)原因选择不使用经ECS优化的AMI,则将安装并配置以下软件包:
还要注意,如果要附加与根卷分开的另一个卷,则需要修改/etc/fstab
文件,以便在实例启动时挂载新卷。我向您介绍了Google的操作方法。
3。保存您的AMI
完成所有软件配置和安装后,返回EC2仪表板并查看正在运行的实例。
右键单击刚创建的实例。将鼠标悬停在Image
上,然后选择Create Image
。
您将看到它具有您在步骤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。
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
。
如果一切顺利,您现在应该看到您的工作已进入Pending
或Runnable
状态。请注意,作业实际运行可能需要10分钟以上的时间。 EC2实例通常需要5到10分钟才能实例化,还需要几分钟才能通过状态检查。创建实例并通过所有状态检查后,如果您的作业继续处于Runnable
状态。出问题了。
答案 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 计算环境相关联。