我正在使用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)I这样的实例类型有5个实例的限制(但我甚至无法运行1),iv)我的角色权限应该没问题 – 我成功使用了默认的amazonlinux映像的相同角色,v)资源不足(实例得到)产生,所以我认为这不应该是问题),vi)连接 – 它应该工作,因为自动缩放组显示一个成功的状态.
一种可能的解决方案可能是在运行时附加特定的AWS卷,但它会受到限制,我想找到一个自动解决方案,因为我必须管理多个卷以进行并行执行.
我也尝试通过管道来自s3桶的输入来执行任务,分析数据和管道输出到第二个s3桶但每次都得到Connection Reset by Peer错误,可能是因为任务运行的时间太长(我也设置了–cli-read -timeout到0但它根本不修复它.
有没有办法为AWS批处理中的作业配置根卷大小?
此问题的解决方案是创建从AWS Batch使用的默认AMI中提取的Amazon Machine Image. AMI允许您通过安装库,修改启动脚本,自定义配置文件以及最重要的用于我们目的来定义逻辑分区和数据卷的挂载点,从而完全按照您的需要配置操作系统.
1.选择要从中开始的基本AMI,配置您的实例
我们希望以AMI为基础的AMI是官方ECS优化的AMI. Take a gander at this page根据您运行的AWS区域查找所需的AMI.
识别AMI后,单击右侧列中的“启动实例”链接.您将被带到此页面:
@L_403_6@
选择t2.micro实例类型.
选择Next:Configuration Details.
如果需要,为您的实例提供适当的IAM角色.什么构成“适当”由您自行决定.保留其余的默认选项.
单击下一步:添加存储.
现在,您可以在此处配置AMI上的数据量.此步骤也没有定义AMI的最终卷配置,但我发现按照您的需要配置它是有用的.在创建AMI之前,您将有机会更改此设置.完成后,单击“下一步:添加标记”.
为Type选择SSH,并将Source设置为Anywhere,或者如果您比我更负责任,请设置一组特定的IP范围,您知道这些IP范围将用于连接到您的实例.单击“查看并启动”.
此页面允许您查看已设置的选项.如果一切都很好,那么启动.当它要求密钥对时,可以选择您已创建的密钥对,也可以创建一个新密钥对.如果不执行此步骤,您将无法连接到您的实例.
2.配置软件环境
单击启动后,转到EC2仪表板以查看正在运行的实例:
等待您的实例启动,然后右键单击它.单击“连接”,然后将“示例”ssh命令复制粘贴到支持ssh的终端中. -i“keyname.pem”实际上是.pem文件的路径,因此请确保cd到〜/ .ssh目录,或将标志值更改为存储私有SSH密钥的路径.您还可能需要将“root”更改为“ec2-user”.
登录后,您可以通过安装VM需要的任何软件包,库和配置来配置VM.如果您使用AWS提供的ECS优化AMI,则您的AMI已经满足ECS AMI的基本要求.如果由于某些(奇怪的)原因选择不使用ECS优化的AMI,您将安装并配置以下软件包:
>最新版本的Amazon ECS容器代理
>最新版本的ecs-init代理
>适用于您的ECS容器代理版本的推荐版本的Docker.
另请注意,如果要附加与根卷分开的另一个卷,则需要修改/ etc / fstab文件,以便在实例启动时装入新卷.我推荐你到谷歌如何做到这一点.
3.保存您的AMI
完成所有软件配置和安装后,返回EC2仪表板并查看正在运行的实例.
右键单击刚刚创建的实例.将鼠标悬停在图像上,然后选择创建图像.
您将看到它具有您在步骤1中选择的卷配置.我没有从默认设置更改我的卷,因此您可以在上面的屏幕截图中看到,ECS优化的AMI的默认卷实际上是8GB / dev / xvda /(root),22GB用于/ dev / xvdc /(docker images等).确保选中“终止时删除”选项,以便批处理计算环境在实例终止后删除卷,否则您将冒险创建无限数量的EBS卷(非常昂贵,所以我被告知).我将配置我的AMI只有111GB的根存储,没有别的.您不一定需要为Docker单独的卷.
为图像命名和描述,然后选择“创建图像”.
您的实例将重新启动.关闭实例后,AWS将创建它的图像,然后重新打开实例.
在EC2控制台中,转到左侧的图像,AMI.几分钟后,您应该在列表中看到新创建的AMI.
4.配置AWS Batch以使用新的AMI
返回AWS仪表板并导航至AWS Batch页面.选择左侧的计算环境.选择创建环境.
通过为容器(服务角色)和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
关键步骤是选择启用用户指定的Ami ID并指定您在先前步骤中生成的AMI ID.
配置完所有选项后,选择“创建”.
5.创建作业队列和作业定义
为了测试我们的计算环境是否真正有效,让我们继续创建一些简单的队列和作业定义.
选择左侧的“作业队列”,然后输入以下选项:
Option Value
Queue name ami_test_queue
Priority 1
Enable Job queue True
Select a compute environment ami_test
选择创建.等待新队列上的状态为VALID.
转到作业定义,然后选择创建.输入以下值:
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]
选择创建作业定义.
最后,转到左侧的Jobs并选择Submit job.为您的工作命名,并为作业定义选择ami_test_job_def:1.保留其余的默认值,然后选择提交作业.
如果一切顺利,您现在应该看到您的作业已进入待处理状态或可运行状态.请注意,在您的作业实际运行之前可能需要超过10分钟. EC2实例通常需要5-10分钟才能实例化,还需要几分钟才能通过状态检查.如果在创建实例并且已通过所有状态检查后,您的作业仍继续处于Runnable状态.出了点问题.