Amazon ECS에서 Amazon EFS를 사용하여 도커 볼륨을 생성하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 6월 10일

Amazon Elastic File System(Amazon EFS)을 사용하여 Amazon Elastic Container Service(Amazon ECS)에서 도커 볼륨을 생성하려고 합니다. 그러면 클러스터 인스턴스에서 추가 볼륨 플러그인을 설치하지 않고 데이터를 유지하고 공유할 수 있습니다. 어떻게 해야 합니까?

​해결 방법

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

2.    새 파일 시스템의 설정을 복사하고 복사한 설정을 사용하여 파일 시스템을 탑재합니다.

중요: Linux 배포에 기반하여 파일 시스템을 탑재하기 전에 NFS 클라이언트를 설치합니다. 다음 예제에서는, 파일 시스템이 로컬 Amazon Virtual Private Cloud(Amazon VPC)에서 별도의 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스에 탑재됩니다. index.html 파일은 Amazon EFS 탑재 지점의 루트 수준에서 생성됩니다.

sudo mkdir /efs
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-XXXXXX.efs.us-east-1.amazonaws.com:/ /efs
echo "<html><body><h1>It works! EFS Demo :)</h1></body></html>" | sudo tee /efs/index.html

참고: 나중에 작업 정의를 생성하려면 파일 시스템 설정이 필요합니다. fs-XXXXXXus-east-1을 사용자 값으로 대치해야 합니다.

3.    Amazon ECS 클러스터를 생성합니다.

참고: 이 단계에서는 EC2 Linux + 네트워킹 템플릿에서 Amazon ECS 클러스터를 생성한다고 가정합니다. Amazon EFS에서는 네트워킹 전용(Fargate) 및 EC2 Windows + 네트워킹 템플릿을 지원하지 않습니다.

4.    Amazon EFS 파일 시스템을 생성한 동일한 VPC에서 클러스터 인스턴스를 시작합니다.

5.    보안 그룹을 생성하거나 기존 보안 그룹을 사용하여 탑재 대상에 연결합니다.

중요: 탑재 대상이 Amazon ECS의 모든 Amazon EC2 인스턴스에서 NFS 포트(2049)의 TCP 프로토콜에 대한 인바운드 액세스를 허용해야 합니다.

6.    작업 정의를 생성합니다.

다음 예제에서는 httpd 컨테이너 이미지로 작업 정의를 생성합니다. 도커 볼륨 efs-demo는 Amazon EFS에서 제공하는 설정을 사용하여 JSON 템플릿의 volumes 속성에 정의됩니다. sourceVolume 속성은 efs-demo로 설정되며, containerPath는 기본 웹 페이지의 디렉터리로 설정됩니다.

{
    "containerDefinitions": [
        {
            "memory": 128,
            "portMappings": [
                {
                    "hostPort": 80,
                    "containerPort": 80,
                    "protocol": "tcp"
                }
            ],
            "essential": true,
            "name": "apache-container",
            "image": "httpd",
            "cpu": 1024,
            "mountPoints": [
                {
                    "containerPath": "/usr/local/apache2/htdocs/",
                    "sourceVolume": "efs-demo"
                }
            ]
        }
    ],
    "networkMode": "bridge",
    "requiresCompatibilities": [
        "EC2"
    ],
    "volumes": [
        {
            "name": "efs-demo",
            "host": null,
            "dockerVolumeConfiguration": {
                "autoprovision": true,
                "labels": null,
                "scope": "shared",
                "driver": "local",
                "driverOpts": {
                    "type": "nfs",
                    "device": ":/",
                    "o": "addr=fs-XXXXXX.efs.us-east-1.amazonaws.com,nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport"
                }
            }
        }
    ],
    "family": "taskdefinition-demo-efs",
    "placementConstraints": [],
    "memory": null,
    "cpu": null
}

참고: fs-XXXXXXus-east-1을 사용자 값으로 대치해야 합니다.

7.    3단계에서 생성한 Amazon ECS 클러스터에서 작업을 실행합니다.

8.    Amazon EFS 볼륨 내부에서 생성한 테스트 파일을 보려면 Amazon ECS 콘솔을 열고 클러스터를 선택합니다. [작업] 탭을 선택하고 6단계에서 생성한 작업의 드롭다운 화살표를 선택합니다. [세부 정보] 섹션의 정보를 검토할 수 있습니다. [네트워크 바인딩]에는 외부 링크가 표시됩니다. [탑재 지점]에는 컨테이너 경로 및 소스 볼륨이 표시됩니다.

참고: 탑재 상태를 확인하기 전에 작업 상태는 실행 중이어야 합니다.


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

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


도움이 필요하십니까?