我正在使用AWS Batch,我发现根卷的大小对于我的任务来说太低了.
我尝试创建一个新的计算环境/作业队列,但没有任何选项来设置卷大小.我尝试从此处更改启动配置,但AWS Batch不考虑新的启动配置和/或自动扩展组.我可能不得不改变dm.basesize,但目前还不清楚应该在哪里做.
所以,我建立了一个自定义的AMI从Amazon 2 Linux上的500 GB的存储空间,并改变了--storage-opt
与dm.basesize=400GB
所指示的位置,但是,虽然我的情况下被催生,作业留在RUNNABLE状态下去.我检查了这里定义的可能原因,但是i)"启用自动分配公共IPv4地址"被检查,ii)图像应该是好的(它已经在创建环境时被验证并且可以生成),iii)I这样的实例类型有5个实例的限制(但我甚至无法运行1),iv)我的角色权限应该没问题 - 我成功使用了默认的amazonlinux映像的相同角色,v)资源不足(实例得到)产生,所以我认为这不应该是问题),vi)连接 - 它应该工作,因为自动缩放组显示一个成功的状态.
一种可能的解决方案可能是在运行时附加特定的AWS卷,但它会受到限制,我想找到一个自动解决方案,因为我必须管理多个卷以进行并行执行.
我也尝试通过管道来自s3桶的输入执行任务,分析数据和管道输出到第二个s3桶,但每次都得到Connection Reset by Peer错误,可能是因为任务运行的时间太长(我也设置--cli-read-timeout
为0)但它根本没有解决它.
有没有办法为AWS批处理中的作业配置根卷大小?
1> Kousic..:
推荐的解决方案是使用非托管计算环境。不幸的是,这最终是一个糟糕的建议,因为创建自己的非托管计算环境不仅困难而深奥,而且不仅破坏了AWS Batch的全部目的,而且还有一个更好(更简单)的解决方案。
该问题的解决方案是创建一个从AWS Batch使用的默认AMI派生的Amazon Machine Image。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
。
选择SSH
的Type
,并将源为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,则将安装并配置以下软件包:
最新版本的Amazon ECS容器代理
最新版本的ecs-init代理
您的ECS容器代理版本的推荐版本Docker。
还要注意,如果要附加与根卷分开的另一个卷,则需要修改/etc/fstab
文件,以便在实例启动时挂载新卷。我向您介绍了Google的操作方法。
3.保存您的AMI
完成所有软件的配置和安装后,请返回EC2仪表板并查看正在运行的实例。
右键单击刚创建的实例。将鼠标悬停在Image
,然后选择Create Image
。
您将看到它具有在步骤1中选择的卷配置。我没有从默认设置更改其卷,因此您可以在上面的屏幕截图中看到ECS优化的AMI的默认卷实际上为8GB。/dev/xvda/
(根目录)和22GB /dev/xvdc/
(用于docker映像等)。确保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
为Job定义选择。保留其余的默认值,然后选择Submit job
。
如果一切顺利,您现在应该看到工作已进入Pending
或Runnable
状态。请注意,作业实际运行可能需要10分钟以上的时间。EC2实例通常需要5到10分钟才能实例化,还需要几分钟才能通过状态检查。Runnable
创建实例并通过所有状态检查后,如果您的作业继续处于状态。出了点问题。