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

최종 업데이트 날짜: 2021년 3월 12일

AWS Batch에 Amazon Elastic File System(Amazon EFS) 볼륨을 탑재하려고 합니다. 사용자 지정 Amazon Machine Image(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 Multi Part Archive를 참조하세요.

MIME 멀티파트 파일 예제

참고: 다음 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 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.    AWS Batch에서 시작한 인스턴스에 연결하기 위해 SSH를 사용하여 컨테이너 인스턴스에 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 작업을 제출합니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요합니까?