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

3 分钟阅读
0

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

简短描述

将 Amazon Elastic Compute Cloud (Amazon EC2) 启动模板与 AWS Batch 配合使用。此配置无需创建自定义亚马逊机器映像 (AMI) 即可将现有适用于 Lustre 的 Amazon FSx 文件系统挂载到您的容器中。

**重要事项:**创建文件系统时,使用分配给您的计算环境的同一 Amazon Virtual Private Cloud (Amazon VPC) 和子网。

解决方法

**注意:**如果在运行 AWS 命令行界面 (AWS CLI) 命令时收到错误,请参阅 AWS CLI 错误故障排除。此外,请确保您使用的是最新版本的 AWS CLI

要将现有适用于 Lustre 的 Amazon FSx 文件系统挂载到托管计算环境中的 AWS Batch,请完成以下步骤:

  1. 创建适用于 Lustre 的 Amazon FSx 文件系统。然后,选择永久或暂存文件系统部署类型
    **注意:**将永久文件系统用于长期存储和工作负载。将临时文件系统用于临时存储和短期数据处理。

  2. 复制您的文件系统 ID(例如,fs-0123456789abcdef0)。必须有文件系统 ID 才能运行启动模板。

  3. 创建包含用户数据部分并使用 MIME 多部分文件格式的启动模板。有关详细信息,请参阅 Cloud-init 网站上的 Mime 多部分存档
    请参阅以下 Amazon Linux 2 MIME 多部分文件示例。将 fs-0123456789abcdef0 替换为您的文件系统 ID,将 us-east-1 替换为您的 AWS 区域,将 xxxxxxxx 替换为您的八个字符的 Amazon FSx 挂载名称:

    Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
    MIME-Version: 1.0
    
    --==MYBOUNDARY==
    Content-Type: text/cloud-boothook; charset="us-ascii"
    
    file_system_id=fs-0123456789abcdef0
    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}.fsx.${region}.amazonaws.com@tcp:/${fsx_mount_name} ${fsx_directory}
    
    --==MYBOUNDARY==--

    **注意:**此示例 MIME 多部分文件将计算资源配置为从 Extras 库中安装 Lustre 2.10 软件包。该文件还会将现有适用于 Lustre 的 Amazon FSx 文件系统挂载在 /scratch 处。有关其他 Linux 发行版的安装说明,请参阅安装 Lustre 客户端

  4. 启动模板以调用用户数据,如以下 Amazon Linux 2 示例所示:

    {  "LaunchTemplateName": "user-data",
      "LaunchTemplateData": {
        "UserData": "TUlNRS1W...<base64 encoded userdata>..."
      }
    }
    

    **注意:**如果您在 Amazon EC2 控制台的启动模板中添加用户数据,请确保执行以下操作之一:将用户数据作为纯文本粘贴,或者从文件上传用户数据。如果您使用 AWS CLI 或 AWS SDK,则必须先对用户数据进行 base64 编码。有关详细信息,请参阅 base64 编码网站上的编码为 base64 格式。然后,在调用 CreateLaunchTemplate 时将该字符串作为 UserData 参数的值提交。

  5. 创建一个名为 mount-fsx-lustre.json 的文件。
    **注意:**根据您的用例调整卷大小。

  6. 运行 create-launch-template AWS CLI 命令,以根据您在步骤 5 中创建的 mount-fsx-lustre.json 文件创建启动模板。将 us-east-1 替换为您的区域:

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

    输出示例:

    {  "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 启动实例时,适用于 Lustre 的 Amazon FSx 文件系统现在已挂载在容器实例上。
    **重要事项:**默认情况下,AWS Batch 托管计算环境使用经批准的 Amazon Elastic Container Service (Amazon ECS) 优化的 AMI 版本作为计算资源。您必须为 Amazon ECS 优化的 Amazon Linux 2 AMI 和其他 Linux 发行版明确设置 AMI ID。

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

    $ df -h

    输出示例:

    Filesystem                                  Size      Used    Avail    Used%   Mounted ondevtmpfs                                    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. 在 AWS Batch 中创建包含卷和挂载点的作业定义

    {  "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. 提交 AWS Batch 作业,请使用您在步骤 9 中创建的作业定义。

AWS 官方
AWS 官方已更新 6 个月前