관리형 컴퓨팅 환경에서 기존 Amazon FSx for Lustre 파일 시스템을 AWS Batch에 탑재하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 9월 11일

관리형 컴퓨팅 환경에서 기존 Amazon FSx for Lustre 파일 시스템을 AWS Batch에 탑재하려고 합니다.

간략한 설명

사용자 지정 Amazon Machine Image(AMI)를 생성하지 않고 기존 Amazon FSx for Lustre 파일 시스템을 컨테이너에 탑재하려면 AWS Batch와 함께 Amazon Elastic Compute Cloud(Amazon EC2) 시작 템플릿을 사용할 수 있습니다.

중요: Amazon FSx for Lustre 파일 시스템을 생성할 때는 컴퓨팅 환경에 할당된 것과 동일한 Amazon Virtual Private Cloud(Amazon VPC) 및 서브넷을 사용해야 합니다.

​해결 방법

1.    Amazon FSx for Lustre 파일 시스템을 생성한 다음, 영구 또는 스크래치 파일 시스템 배포 유형을 선택합니다.

팁: 장기 스토리지 및 워크로드에는 영구 파일 시스템을 사용합니다. 임시 스토리지 및 단기 데이터 처리에는 스크래치 파일 시스템을 사용합니다.

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

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

다음의 MIME 멀티 파트 파일 구성 예제에서는 컴퓨팅 리소스를 구성해서 Extras 라이브러리에서 Lustre 2.10 패키지를 설치하고 기존 Amazon FSx for Lustre 파일 시스템을 /scratch에서 탑재합니다. 다음의 예제는 Amazon Linux 2용입니다. 다른 Linux 배포에 대한 지침은 Lustre 클라이언트 설치를 참조하세요.

MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="==MYBOUNDARY=="
--==MYBOUNDARY==
Content-Type: text/cloud-config; charset="us-ascii"
runcmd:
- file_system_id_01=fs-12345678
- region=us-east-1
- fsx_directory=/scratch
- fsx_mount_name=xxxxxxxx
- amazon-linux-extras install -y lustre2.10
- mkdir -p ${fsx_directory}
- mount -t lustre -o noatime,flock ${file_system_id_01}.fsx.${region}.amazonaws.com@tcp:/${fsx_mount_name} ${fsx_directory}
--==MYBOUNDARY==--
\=

참고: fs-12345678, us-east-1, xxxxxxxx는 각각 파일 시스템 ID, AWS 리전, 8자 마운트 이름으로 바꾸세요.

4.    템플릿을 시작하여 사용자 데이터를 가져옵니다.

5.    mount-fsx-lustre.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 EC2 콘솔에서 시작 템플릿에 사용자 데이터를 추가하는 경우 사용자 데이터를 일반 텍스트로 붙여 넣거나 파일에서 사용자 데이터를 업로드합니다. AWS 명령줄 인터페이스(AWS CLI) 또는 AWS SDK를 사용하는 경우 먼저 사용자 데이터를 base64로 인코딩해야 합니다. CreateLaunchTemplate을 호출할 때 해당 문자열을 UserData 파라미터의 값으로 제출합니다.

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

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

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

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

{
    "LaunchTemplate": {
        "LaunchTemplateId": "lt-08cb09d54bcf551f3",
        "LaunchTemplateName": "fsx-test",
        "CreateTime": "2020-06-30T17:13:22.000Z",
        "CreatedBy": "arn:aws:iam::12345678999:user/test",
        "DefaultVersionNumber": 1,
        "LatestVersionNumber": 1
    }
}

7.    새 컴퓨팅 환경을 생성하고 해당 환경을 시작 템플릿과 연결합니다.

중요: 기본적으로 AWS Batch 관리형 컴퓨팅 환경은 컴퓨팅 리소스에 승인된 Amazon Elastic Container Service(Amazon ECS) 최적화 AMI 버전을 사용합니다. Amazon ECS 최적화 Amazon Linux 2 AMI 및 기타 Linux 배포에 대한 AMI ID를 명시적으로 설정해야 합니다.

이제 AWS Batch가 인스턴스를 구동하면 Amazon FSx Lustre 파일 시스템이 컨테이너 인스턴스에 탑재됩니다.

8.    Amazon FSx Lustre 파일 시스템이 컨테이너 인스턴스에 탑재되었는지 확인하려면 SSH를 사용하여 AWS Batch에서 시작한 인스턴스에 연결한 후 다음 명령을 실행합니다.

$ df -h

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

Filesystem                                  Size      Used    Avail    Used%   Mounted on
devtmpfs                                    3.9G        0       3.9G     0%       /dev
tmpfs                                       3.9G        0       3.9G     0%       /dev/shm
tmpfs                                       3.9G     448K       3.9G     1%       /run
tmpfs                                       3.9G        0       3.9G     0%       /sys/fs/cgroup
/dev/xvda1                                   30G     4.2G        25G    15%       /
172.31.79.79@tcp:/xxxxxxxx                  1.1T     4.5M       1.1T     1%       /scratch
tmpfs                                       798M       0        798M     0%       /run/user/1000

참고: /scratch는 자동으로 탑재됩니다.

9.    볼륨 및 탑재 지점이 포함된 작업 정의를 생성합니다. 예:

{
    "jobDefinitionName": "Fsx-sample",
    "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": "/scratch"
                },
                "name": "Scratch"
            }
        ],
        "environment": [],
        "mountPoints": [
            {
                "containerPath": "/scratch",
                "sourceVolume": "Scratch"
            }
        ],
        "ulimits": [],
        "resourceRequirements": []
    }
}

10.    8단계의 작업 정의를 사용하여 AWS Batch 작업을 제출합니다.


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


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