Come posso montare un volume Amazon EFS su AWS Batch in un ambiente di elaborazione gestito?

4 minuti di lettura
0

Desidero montare un volume Amazon Elastic File System (Amazon EFS) in AWS Batch. Come posso farlo in un ambiente di elaborazione gestito senza creare Amazon Machine Images (AMI) personalizzate?

Breve descrizione

**Nota:**AWS Batch ora supporta il montaggio di volumi EFS direttamente nei contenitori creati, come parte della definizione del processo. Si tratta di un metodo più semplice rispetto alla risoluzione indicata in questo articolo. Per ulteriori informazioni, consulta Specificare un file system Amazon EFS nella definizione del processo e il parametro efsVolumeConfiguration nelle Proprietà del contenitore.

Usa un modello di avvio per montare un volume Amazon EFS su un'istanza EC2 e quindi su un contenitore. Ciò consente anche di montare il volume EFS su contenitori tramite AWS Batch senza creare un'AMI personalizzata.

**Importante:**Quando crei un volume Amazon EFS, utilizza lo stesso Amazon Virtual Private Cloud (Amazon VPC) e le stesse sottoreti assegnati al tuo ambiente di elaborazione.

Risoluzione

Nota: se ricevi errori durante l'esecuzione dei comandi AWS Command Line Interface (AWS CLI), assicurati di utilizzare la versione più recente dell'interfaccia a riga di comando di AWS.

  1. Crea un file system Amazon EFS.

  2. Prendi nota dell'ID del file system (ad esempio: fs-12345678). È necessario l'ID del file system per eseguire il modello di avvio.

  3. Crea un modello di avvio che includa una sezione di dati utente e utilizzi il formato di file MIME multipart. Per ulteriori informazioni, consulta Mime Multi Part Archive sul sito Cloud-init.

Esempio di file MIME multipart

**Nota:**il seguente esempio di file MIME multipart configura la risorsa di elaborazione per installare il pacchetto amazon-efs-utils. Quindi, il file monta un file system Amazon EFS esistente in /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==--

**Importante:**sostituisci fs-12345678 con l'ID del tuo file system.

  1. Crea un file chiamato mount-efs.json.

**Nota:**regola la dimensione del volume in base alle tue esigenze.

Esempio di modello di avvio di Amazon Linux 2

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

Esempio di modello di avvio di 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=="
  }
}

**Importante:**se aggiungi dati utente a un modello di avvio nella console Amazon Elastic Compute Cloud (Amazon EC2), assicurati di eseguire una delle seguenti operazioni:
Incolla i dati utente come testo normale.
-oppure-
Carica i dati utente da un file.

Se utilizzi l'interfaccia a riga di comando di AWS o un SDK AWS, devi prima codificare in base64 i dati utente. Quindi, invia quella stringa come valore del parametroUserData quando chiami createLaunchTemplate, come mostrato nel modello JSON di esempio.

  1. Esegui il seguente comando AWS CLI per creare un modello di avvio basato sul file mount-efs.json che hai creato nel passaggio 4:
aws ec2 --region us-east-1 create-launch-template --cli-input-json file://mount-efs.json

**Nota:**Sostituisci us-east-1 con la tua regione AWS.

Esempio di output del comando create-launch-yemplate

{
  "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
  }
}
  1. Crea un nuovo ambiente di elaborazione e associalo al tuo modello di lancio.

**Nota:**quando AWS Batch avvia le istanze, il volume Amazon EFS viene ora montato sulle istanze.

  1. Verifica se il volume Amazon EFS è montato con l'istanza del contenitore utilizzando SSH per connetterti all'istanza lanciata da AWS Batch. Quindi, esegui il seguente comando Linux df:
$ df -h

Esempio di output del comando 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

Nota: /mnt/efs viene montato automaticamente.

  1. Crea una definizione del processo in AWS Batch che includa il volume e il mount point.

Esempio di definizione di processo 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": []
  }
}
  1. Invia un processo AWS Batch utilizzando la definizione del processo che hai creato nel passaggio 8.

AWS UFFICIALE
AWS UFFICIALEAggiornata 2 anni fa