如何在托管计算环境中将现有 Amazon FSx for Lustre 文件系统挂载到 AWS Batch?

上次更新时间:2020 年 9 月 11 日

我想在托管计算环境中将现有 Amazon FSx for Lustre 文件系统挂载到 AWS Batch。

简短描述

要将现有 Amazon FSx for Lustre 文件系统挂载到您的容器而不创建自定义 Amazon 系统映像 (AMI),您可以搭配使用 Amazon Elastic Compute Cloud (Amazon EC2) 启动模板与 AWS Batch。

重要提示:在创建 Amazon FSx for Lustre 文件系统时,请使用分配给您的计算环境的 Amazon Virtual Private Cloud (Amazon VPC) 和子网。

解决方法

1.    创建 Amazon Fsx for Lustre 文件系统,然后选择永久性或暂存文件系统部署类型

提示:对于长期存储和工作负载,请使用永久性文件系统。对于临时存储和短期数据处理,请使用暂存文件系统。

2.    记下您的文件系统的文件系统 ID(例如 fs-12345678)。

3.    在启动模板中,使用 MIME 分段文件格式创建用户数据部分。有关更多信息,请参阅 Cloud-init 网站上的 Mime 分段存档

以下示例 MIME 多段文件配置了计算资源以安装 Extras 库中的 Lustre 2.10 程序包,然后在 /scratch 中挂载了现有 Amazon FSx for Lustre 文件系统。以下示例适用于 Amazon Linux 2。有关其他 Linux 发行版的安装说明,请参阅安装 Lustre 客户端

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"
runcmd:
- file_system_id_01=fs-12345678
- region=us-east-1
- fsx_directory=/scratch
- fsx_mount_name=xxxxxxxx
- amazon-linux-extras install -y lustre2.10
- mkdir -p ${fsx_directory}
- mount -t lustre -o noatime,flock ${file_system_id_01}.fsx.${region}.amazonaws.com@tcp:/${fsx_mount_name} ${fsx_directory}
--==MYBOUNDARY==--
\=

注意:fs-12345678us-east-1xxxxxxxx 替换为您的文件系统 ID、AWS 区域和 8 个字符的挂载名称。

4.    启动模板以调用用户数据。

5.    创建一个名为 mount-fsx-lustre.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 EC2 控制台中的启动模板,请以纯文本格式粘贴用户数据,或从文件上传。如果使用 AWS 命令行界面 (AWS CLI) 或 AWS 开发工具包,您首先必须对用户数据进行 base64 编码。然后在调用 CreateLaunchTemplate 时将该字符串作为 UserData 参数的值提交。

6.    根据您在步骤 5 中创建的 mount-fsx-lustre.json 文件创建启动模板。

aws ec2 --region us-east-1 create-launch-template --cli-input-json file://mount-fsx-lustre.json

注意:请将 us-east-1 替换为您的 AWS 区域。

输出与以下类似:

{
    "LaunchTemplate": {
        "LaunchTemplateId": "lt-08cb09d54bcf551f3",
        "LaunchTemplateName": "fsx-test",
        "CreateTime": "2020-06-30T17:13:22.000Z",
        "CreatedBy": "arn:aws:iam::12345678999:user/test",
        "DefaultVersionNumber": 1,
        "LatestVersionNumber": 1
    }
}

7.    创建新的计算环境并将该环境与您的启动模板相关联。

重要提示:默认情况下,AWS Batch 托管计算环境使用适合于计算资源的经批准 Amazon Elastic Container Service (Amazon ECS) 优化 AMI 版本。您必须显式设置 Amazon ECS 优化 Amazon Linux 2 AMI 和其他 Linux 发行版的 AMI ID。

现在,当 AWS Batch 启动实例时,Amazon FSx Lustre 文件系统将挂载到容器实例上。

8.    要检查 Amazon FSx Lustre 文件系统是否随容器实例一起挂载,请使用 SSH 连接到由 AWS Batch 启动的实例,然后运行以下命令:

$ df -h

输出与以下类似:

Filesystem                                  Size      Used    Avail    Used%   Mounted on
devtmpfs                                    3.9G        0       3.9G     0%       /dev
tmpfs                                       3.9G        0       3.9G     0%       /dev/shm
tmpfs                                       3.9G     448K       3.9G     1%       /run
tmpfs                                       3.9G        0       3.9G     0%       /sys/fs/cgroup
/dev/xvda1                                   30G     4.2G        25G    15%       /
172.31.79.79@tcp:/xxxxxxxx                  1.1T     4.5M       1.1T     1%       /scratch
tmpfs                                       798M       0        798M     0%       /run/user/1000

注意: /scratch 是自动挂载的。

9.    创建作业定义(包括卷和挂载点)。例如:

{
    "jobDefinitionName": "Fsx-sample",
    "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": "/scratch"
                },
                "name": "Scratch"
            }
        ],
        "environment": [],
        "mountPoints": [
            {
                "containerPath": "/scratch",
                "sourceVolume": "Scratch"
            }
        ],
        "ulimits": [],
        "resourceRequirements": []
    }
}

10.    使用步骤 8 中的任务定义提交 AWS Batch 作业


这篇文章对您有帮助吗?


您是否需要账单或技术支持?