我要如何在托管计算环境中将 Amazon EFS 卷挂载到 Amazon Batch?
我想要在 Amazon Batch 中挂载 Amazon Elastic File System (Amazon EFS) 卷。如何在不创建自定义 Amazon 系统映像 (AMI) 的情况下在托管计算环境中做到这一点?
简短描述
**注意:**作为任务定义的一部分,Amazon Batch 现在支持将 EFS 卷直接挂载到所创建的容器中。这种方法比本文中提到的解决方案更简单。有关更多信息,请参阅在任务定义中指定 Amazon EFS 文件系统和容器属性中的 efsVolumeConfiguration 参数。
使用启动模板将 Amazon EFS 卷挂载到 EC2 实例中,然后再挂载到容器中。这也使您能够通过 Amazon Batch 将 EFS 卷挂载到容器中,而无需创建自定义 AMI。
**重要提示:**在创建 Amazon EFS 卷时,请使用分配给您的计算环境的 Amazon Virtual Private Cloud (Amazon VPC) 和子网。
解决方案
**注意:**如果您在运行 Amazon 命令行界面(Amazon CLI)命令时收到错误,请确保您运行的是最新版本的 Amazon CLI。
2. 请注意文件系统 ID(例如:fs-12345678)。您需要文件系统 ID 才能运行启动模板。
3. 创建启动模板,该模板包括用户数据部分,并使用 MIME 分段文件格式。有关更多信息,请参阅 Cloud-init 网页上的 Mime 分段文件。
示例 MIME 分段文件
**注意:**以下示例 MIME 分段文件将计算资源配置为安装 amazon-efs-utils 软件包。然后,该文件将现有的 Amazon EFS 文件系统挂载到 /mnt/efs: 。
MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="==MYBOUNDARY==" --==MYBOUNDARY== Content-Type: text/cloud-config; charset="us-ascii" packages: - amazon-efs-utils runcmd: - file_system_id_01=fs-12345678 - efs_directory=/mnt/efs - mkdir -p ${efs_directory} - echo "${file_system_id_01}:/ ${efs_directory} efs tls,_netdev" >> /etc/fstab - mount -a -t efs defaults --==MYBOUNDARY==--
**重要提示:**将 fs-12345678 替换为您的文件系统 ID。
4. 创建一个名为 mount-efs.json 的文件。
**注意:**根据您的需求调整您的卷大小。
示例 Amazon Linux 2 启动模板
{ "LaunchTemplateName": "user-data", "LaunchTemplateData": { "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "VolumeSize": 30, "VolumeType": "gp2" }, "DeviceName": "/dev/xvda" } ], "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ==" } }
示例 Amazon Linux 1 启动模板
{ "LaunchTemplateName": "userdata", "LaunchTemplateData": { "BlockDeviceMappings": [ { "Ebs": { "DeleteOnTermination": true, "VolumeSize": 8, "VolumeType": "gp2" }, "DeviceName": "/dev/xvda" }, { "Ebs": { "DeleteOnTermination": true, "VolumeSize": 22, "VolumeType": "gp2" }, "DeviceName": "/dev/xvdcz" } ], "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ==" } }
**重要提示:**如果您要将用户数据添加到 Amazon Elastic Compute Cloud (Amazon EC2) 控制台中的启动模板,请确保您执行了以下操作之一:
以纯文本形式粘贴用户数据。
-或者-
从文件上传用户数据。
如果使用 AWS CLI 或 AWS 开发工具包,您首先必须对用户数据进行 base64 编码。然后,在调用 CreateLaunchTemplate 时提交该字符串作为 UserData 参数的值,如示例 JSON 模板所示。
5. 运行以下 Amazon CLI 命令以基于您在步骤 4 中创建的 mount-efs.json 文件创建启动模板:
aws ec2 --region us-east-1 create-launch-template --cli-input-json file://mount-efs.json
**注:**将 us-east-1 替换为您的亚马逊云科技区域。
示例 create-launch-template 命令输出
{ "LaunchTemplate": { "LaunchTemplateId": "lt-06935eb650e40f886", "LaunchTemplateName": "user-data", "CreateTime": "2019-12-26T09:40:46.000Z", "CreatedBy": "arn:aws:iam::12345678999:user/alice", "DefaultVersionNumber": 1, "LatestVersionNumber": 1 } }
6. 创建新的计算环境并将该环境与您的启动模板相关联。
**注意:**当 AWS Batch 启动实例时,Amazon EFS 卷现在将被挂载到实例上。
7. 要检查 Amazon EFS 卷是否随容器实例一起挂载,请使用 SSH 连接到由 AWS Batch 启动的实例。然后,运行以下 Linux df 命令:
$ df -h
示例 df 命令输出
Filesystem Size Used Avail Use% Mounted on devtmpfs 3.9G 92K 3.9G 1% /dev tmpfs 3.9G 0 3.9G 0% /dev/shm /dev/xvda1 50G 854M 49G 2% / 127.0.0.1:/ 8.0E 0 8.0E 0% /mnt/efs
注意:****/mnt/efs 是自动挂载的。
8. 在 AWS Batch 中创建作业定义(包括卷和挂载点)。
示例 AWS Batch 作业定义
{ "jobDefinitionName": "userdata", "jobDefinitionArn": "arn:aws:batch:us-east-1:12345678999:job-definition/userdata:1", "revision": 1, "status": "ACTIVE", "type": "container", "parameters": {}, "containerProperties": { "image": "busybox", "vcpus": 1, "memory": 1024, "command": [], "volumes": [ { "host": { "sourcePath": "/mnt/efs" }, "name": "efs" } ], "environment": [], "mountPoints": [ { "containerPath": "/mnt/efs", "sourceVolume": "efs" } ], "ulimits": [], "resourceRequirements": [] } }
9. 使用您在步骤 8 中创建的任务定义提交 Amazon Batch 任务。
相关内容
- AWS 官方已更新 10 个月前
- AWS 官方已更新 1 年前
- AWS 官方已更新 1 年前