マネージド型のコンピューティング環境で Amazon EFS ボリュームを AWS Batch にマウントする方法を教えてください。

最終更新日: 2021 年 3 月 12 日

AWS Batch に Amazon Elastic File System (Amazon EFS) ボリュームをマウントしたいと考えています。カスタムの Amazon マシンイメージ (AMI) を作成せずに、マネージドコンピューティング環境でこれを行うにはどうすればよいですか?

簡単な説明

カスタム AMI を作成せずに、AWS Batch を介して Amazon EFS ボリュームをコンテナにマウントするには、起動テンプレートを使用します。

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

解決方法

注: AWS コマンドラインインターフェイス (AWS CLI) コマンドの実行中にエラーが発生した場合は、最新の AWS CLI バージョンを使用していることを確認してください

1.    Amazon EFS ファイルシステムを作成します

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 コンピュートクラウド (Amazon EC2) コンソールで起動テンプレートにユーザーデータを追加する場合は、必ず次のいずれかを実行してください。
ユーザデータをプレーンテキストとして貼り付けます。
- または -
ファイルからユーザーデータをアップロードします。

AWS CLI または AWS SDK を使用する場合、最初にユーザーデータを base64 でエンコードする必要があります。次に、例の JSON テンプレートに示すように、CreateLaunchTemplate を呼び出すときに、その文字列を UserData パラメータの値として送信します。

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

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

注意: us-east-1 を使用している AWS リージョンに置き換えます。

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.    SSH を使用して AWS Batch によって起動したインスタンスに接続することで、Amazon EFS ボリュームがコンテナインスタンスにマウントされているかどうかを確認します。次に、以下の 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 で作成したジョブ定義を使用して、AWS Batch ジョブを送信します。


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


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