マネージドコンピューティング環境で、既存の Amazon FSx for Lustre ファイルシステムを AWS Batch にマウントするにはどうすればよいですか?

最終更新日: 2022 年 2 月 23 日

既存の Amazon FSx for Lustre ファイルシステムをマネージドコンピューティング環境の AWS Batch にマウントしたいと考えています。カスタムの Amazon マシンイメージ (AMI) を作成せずにこれを設定する方法はありますか?

簡単な説明

AWS Batch と一緒に Amazon Elastic Compute Cloud (Amazon EC2) 起動テンプレートを使用します。この設定により、カスタム AMI を作成しなくても、既存の Amazon FSx for Lustre ファイルシステムをコンテナにマウントできます。

重要: ファイルシステムを作成するときは、コンピューティング環境に割り当てられているものと同じ Amazon Virtual Private Cloud (Amazon VPC) とサブネットを使用します。

解決方法

1.    Amazon FSx for Lustre ファイルシステムを作成します。次に、永続ファイルシステムの展開タイプまたはスクラッチファイルシステムのデプロイタイプを選択します。

ヒント: 長期的なストレージとワークロードには、永続的なファイルシステムを使用します。一時的なストレージおよび短期的なデータ処理には、スクラッチファイルシステムを使用します。

2.    ファイルシステム ID をコピーします (fs-12345678 など)。起動テンプレートを実行するには、ファイルシステム ID が必要です。

3.    ユーザーデータセクションを含み、MIME マルチパートファイル形式を使用する起動テンプレートを作成します。詳細については、Cloud-init ウェブサイトの Mime マルチパートアーカイブをご参照ください。

Amazon Linux 2 MIME マルチパートファイルの例

重要: fs-12345678 をファイルシステム ID に置き換えます。us-east-1 をお使いの AWS リージョンに置き換えます。xxxxxxxx を 8 文字の Amazon FSx マウント名に置き換えます。

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-09c9ae4593b53a741
- 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==--

注意: この MIME マルチパートファイルの例では、Extras ライブラリから Lustre 2.10 パッケージをインストールするようにコンピューティングリソースが設定されます。また、このファイルは /scratch の既存の Amazon FSx for Lustre ファイルシステムもマウントします。他の Linux ディストリビューションのインストール手順については、「Lustre クライアントのインストール」を参照してください。

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 Command Line Interface (AWS CLI) または AWS SDK を使用する場合、最初にユーザーデータを base64 でエンコードする必要があります。その文字列を、CreateLaunchTemplate を呼び出すときに UserData パラメータの値として送信します。

6.    次の AWS CLI コマンドを実行して、ステップ 5 で作成した mount-fsx-lustre.json ファイルに基づいて起動テンプレートを作成します。

重要: us-east-1 を実際の AWS リージョンに置き換えます。

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

create-launch-template コマンドの出力例

{
  "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 for Lustre ファイルシステムがコンテナインスタンスにマウントされます。

8.    SSH を使用して AWS Batch によって起動したインスタンスに接続することで、ファイルシステムがコンテナインスタンスにマウントされているかどうかを確認します。次に、以下の Linux df コマンドを実行します。

$ df -h

df コマンドの出力例

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.    AWS Batch で、ボリュームとマウントポイントを含むジョブ定義を作成します。

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.    手順 9 で作成したジョブ定義を使用して、AWS Batch ジョブを送信します。


この記事はお役に立ちましたか?


請求に関するサポートまたは技術サポートが必要ですか?