관리형 컴퓨팅 환경에서 Amazon EFS 볼륨을 AWS Batch에 탑재하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 12일

AWS Batch에 Amazon Elastic File System(Amazon EFS) 볼륨을 탑재하려고 합니다.

간략한 설명

시작 템플릿을 사용하면 사용자 지정 Amazon Machine Image(AMI)를 생성하지 않고도 AWS Batch를 통해 컨테이너에 Amazon EFS 볼륨을 탑재할 수 있습니다.

중요: Amazon EFS 볼륨을 생성할 때 컴퓨팅 환경에 할당된 것과 동일한 Amazon Virtual Private Cloud(Amazon VPC)와 서브넷을 사용하십시오.

​해결 방법

1.    Amazon EFS 파일 시스템을 생성합니다.

2.    파일 시스템의 파일 시스템 ID(예: fs-12345678)를 기록해 둡니다.

3.    시작 템플릿에서 MIME 멀티파트 파일 형식을 사용하여 사용자 데이터 섹션을 생성합니다. 자세한 내용은 cloud-init 웹 사이트의 Mime Multi Part Archive를 참조하십시오.

다음의 MIME 멀티파트 파일 예에서는 amazon-efs-utils 패키지를 설치하도록 컴퓨팅 리소스를 구성한 다음 /mnt/efs에 기존 Amazon 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 Compute Cloud(Amazon EC2) 콘솔에서 시작 템플릿에 사용자 데이터를 추가하는 경우, 사용자 데이터에 일반 텍스트로 붙여넣거나 해당 사용자 데이터를 파일에서 업로드합니다. AWS 명령줄 인터페이스(AWS CLI) 또는 AWS SDK를 사용하는 경우 먼저 사용자 데이터를 base64로 인코딩해야 합니다. 그리고 앞의 JSON 템플릿에서 보듯이 CreateLaunchTemplate을 호출할 때 해당 문자열을 UserData 파라미터의 값으로 제출합니다.

5.    4단계에서 생성한 mount-efs.json 파일을 기반으로 시작 템플릿을 생성합니다.

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

참고: us-east-1은 사용자의 AWS 리전으로 바꾸십시오.

다음과 유사하게 출력됩니다.

{
    "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.    Amazon EFS 볼륨이 컨테이너 인스턴스에 탑재되었는지 확인하려면 SSH를 사용하여 AWS Batch에서 시작한 인스턴스에 연결한 후 다음 명령을 실행합니다.

$ df -h

다음과 유사하게 출력됩니다.

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.    볼륨 및 탑재 지점이 포함된 작업 정의를 생성합니다. 다음 예제를 참조하십시오.

{
    "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 작업을 제출합니다.


이 문서가 도움이 되었습니까?

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?