Wie kann ich ein Amazon-EFS-Volume in einer verwalteten Rechenumgebung in AWS Batch mounten?

Lesedauer: 4 Minute
0

Ich möchte ein Amazon Elastic File System (Amazon EFS)-Volume in AWS Batch mounten. Wie muss ich dazu in einer verwalteten Rechenumgebung vorgehen, wenn ich keine benutzerdefinierten Amazon Machine Images (AMIs) erstellen möchte?

Kurzbeschreibung

**Hinweis:**AWS Batch unterstützt jetzt das direkte Mounten von EFS-Volumes in den erstellten Containern als Teil der Jobdefinition. Dies ist eine einfachere Methode als die in diesem Artikel angegebene Lösung. Weitere Informationen finden Sie unter Specifying an Amazon EFS file system in your job definition and the efsVolumeConfiguration parameter in Container properties.

Verwenden Sie eine Startvorlage, um ein Amazon-EFS-Volume in einer EC2-Instance und anschließend in einem Container zu mounten. Dies ermöglicht es Ihnen auch, das EFS-Volume über AWS Batch in Containern zu mounten, ohne ein benutzerdefiniertes AMI erstellen zu müssen.

**Wichtig:**Verwenden Sie beim Erstellen eines Amazon-EFS-Volumes die gleiche Amazon Virtual Private Cloud (Amazon VPC) und die gleichen Subnetze, die auch Ihrer Rechenumgebung zugewiesen sind.

Behebung

**Hinweis:**Sollten beim Ausführen von Befehlen der AWS Command Line Interface (AWS CLI) Fehler auftreten, stellen Sie sicher, dass Sie die neueste AWS-CLI-Version verwenden.

1.Erstellen Sie ein Amazon-EFS-Dateisystem.

2.Notieren Sie sich die Dateisystem-ID (beispielsweise fs-12345678). Die Dateisystem-ID wird zum Ausführen der Startvorlage benötigt.

3.Erstellen Sie eine Startvorlage, die einen Abschnitt mit Benutzerdaten enthält und das mehrteilige MIME-Dateiformat verwendet. Weitere Informationen finden Sie unter MIME multi-part archive (Mehrteiliges MIME-Archiv) auf der Website von cloud-init.

Beispiel für eine mehrteilige MIME-Datei

**Hinweis:**Im folgenden Beispiel für eine mehrteilige MIME-Datei wird die Rechenressource für die Installation des Pakets amazon-efs-utils konfiguriert. Anschließend wird ein vorhandenes Amazon-EFS-Dateisystem unter /mnt/efs gemountet.

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

**Wichtig:**Ersetzen Sie fs-12345678 durch Ihre Dateisystem-ID.

4. Erstellen Sie eine Datei mit dem Namen mount-efs.json.

**Hinweis:**Passen Sie die Größe Ihres Volumes an Ihre Bedürfnisse an.

Exemplarische Startvorlage für Amazon Linux 2

{
  "LaunchTemplateName": "user-data",
  "LaunchTemplateData": {
    "BlockDeviceMappings": [
      {
        "Ebs": {
          "DeleteOnTermination": true,
          "VolumeSize": 30,
          "VolumeType": "gp2"
        },
        "DeviceName": "/dev/xvda"
      }
    ],
    "UserData": "TUlNRS1WZXJzaW9uOiAxLjAKQ29udGVudC1UeXBlOiBtdWx0aXBhcnQvbWl4ZWQ7IGJvdW5kYXJ5PSI9PU1ZQk9VTkRBUlk9PSIKCi0tPT1NWUJPVU5EQVJZPT0KQ29udGVudC1UeXBlOiB0ZXh0L2Nsb3VkLWNvbmZpZzsgY2hhcnNldD0idXMtYXNjaWkiCgpwYWNrYWdlczoKLSBhbWF6b24tZWZzLXV0aWxzCgpydW5jbWQ6Ci0gZmlsZV9zeXN0ZW1faWRfMDE9ZnMtODc0MTc4MDYgICAgIAotIGVmc19kaXJlY3Rvcnk9L21udC9lZnMKCi0gbWtkaXIgLXAgJHtlZnNfZGlyZWN0b3J5fQotIGVjaG8gIiR7ZmlsZV9zeXN0ZW1faWRfMDF9Oi8gJHtlZnNfZGlyZWN0b3J5fSBlZnMgdGxzLF9uZXRkZXYiID4+IC9ldGMvZnN0YWIKLSBtb3VudCAtYSAtdCBlZnMgZGVmYXVsdHMKCi0tPT1NWUJPVU5EQVJZPT0tLQ=="
  }
}

Exemplarische Startvorlage für 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=="
  }
}

**Wichtig:**Verwenden Sie eines der folgenden Verfahren, wenn Sie einer Startvorlage in der Amazon Elastic Compute Cloud (Amazon EC2)-Konsole Benutzerdaten hinzufügen:
Fügen Sie die Benutzerdaten als Klartext ein.
-oder-
Laden Sie die Benutzerdaten aus einer Datei hoch.

Bei Verwendung der AWS CLI oder eines AWS SDK müssen Sie zuerst die Benutzerdaten mit Base64 codieren. Übermitteln Sie diese Zeichenfolge dann als Wert des Parameters UserData, wenn Sie CreateLaunchTemplate aufrufen, wie in der JSON-Beispielvorlage gezeigt.

5.Führen Sie den folgenden AWS-CLI-Befehl aus, um eine Startvorlage zu erstellen, die auf der in Schritt 4 erstellten Datei mount-efs.json basiert:

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

**Hinweis:**Ersetzen Sie us-east-1 durch Ihre AWS-Region.

Beispielausgabe des Befehls „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.Erstellen Sie eine neue Rechenumgebung und ordnen Sie sie Ihrer Startvorlage zu.

**Hinweis:**Wenn AWS Batch Instances hochfährt, ist das Amazon-EFS-Volume jetzt in den Instances gemountet.

7.Überprüfen Sie, ob das Amazon-EFS-Volume mit der Container-Instance gemountet ist, indem Sie SSH verwenden, um eine Verbindung mit der Instance herzustellen, die von AWS Batch gestartet wurde. Führen Sie dann den folgenden Linux-df-Befehl aus:

$ df -h

Beispielausgabe eines df-Befehls

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

Hinweis: /mnt/efs wird automatisch gemountet.

8.Erstellen Sie eine Jobdefinition in AWS Batch, die das Volume und den Mount-Point enthält.

Beispiel für eine AWS-Batch-Jobdefinition

{
  "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.Übermitteln Sie einen AWS-Batch-Job unter Verwendung der in Schritt 8 erstellten Jobdefinition.


AWS OFFICIAL
AWS OFFICIALAktualisiert vor 2 Jahren