Como posso montar um volume do Amazon EFS no AWS Batch em um ambiente computacional gerenciado?

5 minuto de leitura
0

Quero montar um volume do Amazon Elastic File System (Amazon EFS) no AWS Batch. Como posso fazer isso em um ambiente computacional gerenciado sem criar imagens de máquina da Amazon (AMIs) personalizadas?

Breve descrição

Observação: o AWS Batch agora suporta a montagem de volumes do EFS diretamente nos contêineres criados, como parte da definição do trabalho. Esse é um método mais simples do que a resolução mencionada neste artigo. Para obter mais informações, consulte Especificar um sistema de arquivos do Amazon EFS na definição de trabalho e o parâmetro efsVolumeConfiguration nas Propriedades do contêiner.

Use um modelo de execução para montar um volume do Amazon EFS em uma instância do EC2 e depois em um contêiner. Isso também permite montar o volume do EFS em contêineres por meio do AWS Batch sem criar uma AMI personalizada.

Importante: ao criar um volume do Amazon EFS, use a mesma Amazon Virtual Private Cloud (Amazon VPC) e sub-redes atribuídas ao seu ambiente computacional.

Resolução

Observação: se você receber erros ao executar comandos da AWS Command Line Interface (AWS CLI), certifique-se de estar usando a versão mais recente da AWS CLI.

1.    Crie um sistema de arquivos do Amazon EFS.

2.    Anote o ID do sistema de arquivos (por exemplo: fs-12345678). Você precisa do ID do sistema de arquivos para executar seu modelo de execução.

3.    Crie um modelo de execução que inclua uma seção de dados do usuário e use o formato de arquivo MIME com várias partes. Para obter mais informações, consulte Arquivo Mime com várias partes no site do Cloud-init.

Exemplo de arquivo MIME com várias partes

Observação: o exemplo de arquivo MIME de várias partes a seguir configura o recurso computacional para instalar o pacote amazon-efs-utils. Em seguida, o arquivo monta um sistema de arquivos do Amazon EFS existente em /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: substitua fs-12345678 pelo ID do sistema de arquivos.

4.    Crie um arquivo chamado mount-efs.json.

Observação: ajuste o tamanho do volume com base nas suas necessidades.

Exemplo de modelo de execução do Amazon Linux 2

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

Exemplo de modelo de execução do 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 você adicionar dados do usuário a um modelo de execução no console do Amazon Elastic Compute Cloud (Amazon EC2), certifique-se de fazer o seguinte:
Cole os dados do usuário como texto sem formatação.
-ou-
Carregue os dados do usuário a partir de um arquivo.

Se você usa a AWS CLI ou um AWS SDK, é preciso primeiro codificar os dados do usuário em base64. Em seguida, envie essa string como o valor do parâmetro UserData ao chamar CreateLaunchTemplate, conforme mostrado no exemplo de modelo JSON.

5.    Execute o seguinte comando da AWS CLI para criar um modelo de execução com base no arquivo mount-efs.json criado na etapa 4:

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

Observação: substitua us-east-1 pela sua região da AWS.

Exemplo de saída do comando 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.    Crie um novo ambiente computacional e associe esse ambiente ao seu modelo de execução.

Observação: quando o AWS Batch ativa instâncias, o volume do Amazon EFS passa a estar montado nas instâncias.

7.    Verifique se o volume do Amazon EFS está montado com a instância do contêiner usando SSH para se conectar à instância iniciada pelo AWS Batch. Em seguida, execute o seguinte comando Linux df:

$ df -h

Exemplo de saída do 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 é montado automaticamente.

8.    Crie uma definição de tarefa no AWS Batch que inclua o volume e o ponto de montagem.

Exemplo de definição de tarefa do 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.    Envie um trabalho do AWS Batch usando a definição de trabalho criada na etapa 8.


AWS OFICIAL
AWS OFICIALAtualizada há um ano