如何在AWS批处理中定义根卷大小

2024-05-01

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

我尝试创建一个新的计算环境/作业队列,但没有任何选项来设置卷大小。我尝试更改启动配置here https://console.aws.amazon.com/ec2/autoscaling/home?region=us-east-1#LaunchConfigurations:但 AWS Batch 不考虑新的启动配置和/或自动扩展组。我可能必须改变dm.基本尺寸 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/bootstrap_container_instance.html但目前还不清楚应该在哪里进行这项工作。

因此,我从具有 500 GB 存储空间的 Amazon 2 Linux 设置了一个自定义 AMI,并更改了--storage-opt with dm.basesize=400GB如..所示here https://forums.aws.amazon.com/message.jspa?messageID=811761#811761但是,尽管我的实例已生成,但作业仍无限期地保持在 RUNNABLE 状态。我按照定义检查了可能的原因here https://stackoverflow.com/questions/48151332/why-are-aws-batch-jobs-stuck-in-runnable,但是 i) 选中了“启用自动分配公共 IPv4 地址”,ii) 图像应该很好(在创建环境时已对其进行了验证并且可以生成),iii) 我对此类实例的限制为 5 个实例类型(但我什至无法运行 1),iv)我的角色权限应该没问题 - 我成功地使用了与默认 amazonlinux 映像相同的角色,v)资源不足(实例被生成,所以我认为这不应该问题),vi)连接 - 它应该可以工作,因为自动缩放组显示成功状态。

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

我还尝试通过从 s3 存储桶传输输入、分析数据并将输出传输到第二个 s3 存储桶来执行任务,但我得到对等方重置连接 https://stackoverflow.com/q/1434451/41977每次都会出错,可能是因为任务运行时间太长(我还设置了--cli-read-timeout为 0 但它根本没有修复它)。

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


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

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

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

我们希望基于的 AMI 是官方 ECS 优化的 AMI。看看这个页面 https://docs.aws.amazon.com/AmazonECS/latest/developerguide/ecs-optimized_AMI.html根据您运行的 AWS 区域查找您需要的 AMI。

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

选择 t2.micro 实例类型。

Choose Next: Configuration Details.

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

现在您可以配置 AMI 上的数据量。此步骤也没有定义 AMI 的最终卷配置,但我发现按照您想要的方式配置它很有用。稍后您将有机会在创建 AMI 之前更改此设置。完成后,单击Next: Add Tags.

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

Select SSH for Type,并将源设置为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/(根)和 22GB/dev/xvdc/(泊坞窗图像等)。确保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. 创建作业队列和作业定义

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

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

Option                                  Value

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

Select Create。等待新队列的状态变为VALID.

Go to 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]

Select Create job definition.

最后,前往Jobs在左侧并选择Submit job。为您的工作命名并选择ami_test_job_def:1对于作业定义。保留其余默认值并选择Submit job.

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在AWS批处理中定义根卷大小 的相关文章

随机推荐