Amazon EFS 볼륨을 Amazon ECS 작업에 마운트할 수 없는 이유는 무엇입니까?
Amazon Elastic Container Service(Amazon ECS) 작업에 Amazon Elastic File System(Amazon EFS) 볼륨을 마운트하면 오류가 발생합니다.
간략한 설명
다음 설정을 잘못 구성하면 Amazon ECS 작업에 Amazon EFS 볼륨을 마운트할 때 문제가 발생할 수 있습니다.
- EFS 파일 시스템
- 보안 그룹 및 네트워크 액세스 제어 목록(네트워크 ACL)
- Amazon Virtual Private Cloud(Amazon VPC) 설정
- Amazon EFS 볼륨이 작업과 다른 VPC에 있는 경우 교차 VPC 설정
- AWS Identity and Access Management(IAM) 역할 정책 및 권한
해결 방법
문제의 원인 파악
AWSSupport-TroubleshootECSTaskFailedToStart 런북을 사용하여 문제를 확인합니다. Amazon ECS 클러스터 리소스가 있는 곳과 같은 AWS 리전에서 런북을 실행해야 합니다. 또한 가장 최근에 실패한 작업 ID를 사용하십시오. 실패한 작업이 Amazon ECS 서비스의 일부인 경우, 서비스에서 가장 최근에 실패한 작업을 사용합니다. 실패한 작업은 자동화 중에 ECS:DescribeTasks에 표시되어야 합니다. 기본적으로 중지된 ECS 작업은 중지됨 상태가 된 후 1시간 동안 표시됩니다.
자동화 출력에 따라 다음 수동 문제 해결 단계 중 하나를 사용합니다.
EFS 파일 시스템, 보안 그룹 및 네트워크 ACL 구성 확인
EFS 파일 시스템, 보안 그룹 또는 네트워크 ACL을 잘못 구성한 경우 다음 예시와 비슷한 오류가 발생합니다.
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: b'mount.nfs4: Connection timed out' : unsuccessful EFS utils command execution; code: 32"
-또는-
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: mount.nfs4: Connection reset by peer : unsuccessful EFS utils command execution; code: 32"
EFS 파일 시스템
EFS 파일 시스템 탑재 대상을 생성했으며 작업과 동일한 가용 영역 및 서브넷에서 사용할 수 있는지 확인하십시오.
탑재 대상의 가용 영역을 확인하려면 다음 단계를 완료하십시오.
-
Amazon EFS 콘솔을 엽니다.
-
탐색 창에서 파일 시스템을 선택합니다.
-
파일 시스템을 선택합니다.
-
네트워크를 선택하여 기존 탑재 대상 및 해당 네트워크 구성 목록을 표시합니다.
-
Amazon EFS 파일 시스템이 볼륨을 마운트한 서브넷의 가용 영역을 기록해 둡니다.
-
Amazon ECS 콘솔을 엽니다.
-
탐색 창에서 클러스터를 선택합니다.
-
클러스터를 선택합니다.
-
작업 탭을 선택합니다.
-
작업 ID를 선택합니다.
-
구성에서 서브넷 ID를 선택합니다.
참고: 이 작업을 수행하면 Amazon VPC 콘솔의 브라우저에 새 탭이 열립니다. -
서브넷의 가용 영역을 확인하여 Amazon EFS 파일 시스템 가용 영역과 일치하는지 확인합니다. Amazon EFS 파일 시스템의 가용 영역이 일치하지 않는 경우 올바른 가용 영역에 탑재 대상을 생성하십시오.
보안 그룹 및 네트워크 ACL
EFS 파일 시스템 탑재 대상 보안 그룹은 포트 2049에서 TCP를 통한 작업의 NFS 트래픽을 허용해야 합니다.
포트를 확인하려면 다음 단계를 완료하십시오.
- Amazon EFS 콘솔을 엽니다.
- 탐색 창에서 파일 시스템을 선택합니다.
- 확인하려는 파일 시스템을 선택합니다.
- 네트워크를 선택하여 기존 탑재 대상 및 연결된 보안 그룹 목록을 표시합니다. 인바운드 규칙을 확인하여 포트 2049에서 작업 IP 주소로부터의 TCP 트래픽을 허용하는지 확인하십시오.
- (선택 사항) 연결된 보안 그룹을 수정하려면 관리를 선택합니다.
연결 출처를 기반으로 포트 2049에 대한 액세스를 제한하는 것이 좋습니다. 모든 클라이언트가 특정 서브넷 내에 있는 경우 해당 서브넷의 IP 주소 범위를 사용하십시오. 모든 클라이언트가 Amazon EFS와 연결된 VPC 내에 있는 경우 VPC CIDR을 사용하십시오. 클라이언트가 원격 네트워크에 속한 경우에는 해당 네트워크와 일치하는 IP 주소 범위를 사용하십시오.
서브넷은 Amazon EFS 파일 시스템과 Amazon ECS 작업 간의 네트워크 트래픽을 허용해야 합니다.
네트워크 트래픽 구성을 확인하려면 다음 단계를 완료하십시오.
- Amazon VPC 콘솔을 엽니다.
- 탐색 창에서 VPC를 선택합니다.
- 원하는 VPC를 선택합니다.
- 세부 정보의 기본 네트워크 ACL에서 ID를 선택합니다.
- VPC의 인바운드 및 아웃바운드 규칙이 포트 2049에서 작업 IP 주소로부터 TCP를 통한 NFS 트래픽을 허용하는지 확인합니다.
Amazon VPC 구성 확인
Amazon VPC를 올바르게 구성하지 않은 경우 다음 예시와 비슷한 오류가 발생합니다.
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: Failed to resolve "fs-abcdefgxyz.efs.us-east-1.amazonaws.com" - check that your file system ID is correct, and ensure that the VPC has an EFS mount target for this file system ID."
DNS 확인 및 호스트 이름 활성화
VPC의 DHCP(Dynamic Host Configuration Protocol) 옵션 세트에서 DNS 확인 및 DNS 호스트 이름을 활성화해야 합니다.
참고: DNS 호스트 이름은 기본적으로 비활성화됩니다.
사용자 지정 DNS 서버가 볼륨의 DNS 이름을 해석할 수 있는지 확인
VPC DHCP 옵션 세트에 AmazonProvidedDNS를 사용하는 것이 좋습니다. 사용자 지정 DNS 서버를 대신 사용하는 경우 DNS 서버 구성 파일에서 조건부 DNS 전달자를 구성해야 합니다.
다음 설정을 포함하십시오.
- AWS 리소스(*.amazonaws.com)에 대한 모든 DNS 쿼리는 VPC의 기본 DNS 서버로 이동해야 합니다.
- IP 주소는 VPC에 프로비저닝된 기본 프라이빗 IPV4 CIDR 범위에 2(x.y.z.2) 또는 169.254.169.253을 더해야 합니다. 예를 들어 CIDR 10.0.0.0/16의 경우 VPC의 기본 DNS 서버 IP 주소는 10.0.0.2입니다.
컨테이너 인스턴스와 다른 VPC에 있는 Amazon EFS 볼륨의 설정 구성
컨테이너 인스턴스와 다른 VPC에서 Amazon EFS 볼륨을 마운트하려면 VPC 간에 VPC 피어링 연결을 생성해야 합니다. 또는 전송 게이트웨이를 생성합니다. 그런 다음, 작업이 실행되는 위치에 따라 다음 해결 단계를 사용합니다.
Amazon EC2 인스턴스
Amazon Elastic Compute Cloud(Amazon EC2)에서 실행되는 작업의 경우 EC2 인스턴스에 로그인한 다음, botocore를 설치합니다.
참고: efs-utils는 botocore를 사용하여 다른 AWS 서비스와 상호 작용합니다. 설치 단계는 GitHub 웹 사이트에서 botocore 설치를 참조하십시오.
EFS 파일 시스템과 동일한 VPC에서 Amazon이 제공한 DNS 서비스만 Amazon EFS DNS 이름을 해석할 수 있습니다. Amazon EFS 마운트의 IP 주소를 시스템의 /etc/hosts 파일에 하드코딩하려면 다음 명령을 실행합니다.
echo "mount-target-IP-address fs-id.efs.region.amazonaws.com" | sudo tee -a /etc/hosts
참고: mount-target-IP-address를 탑재 대상 IP 주소로, fs-id를 EFS 파일 시스템 ID로, region을 해당 리전으로 바꾸십시오. VPC 외부의 리소스는 여전히 DNS 이름을 해석할 수 없습니다.
Fargate 작업
다음 해결 방법에서 VPC A는 Amazon ECS 작업이 실행되고 Amazon EFS 클라이언트가 있는 VPC입니다. VPC B는 Amazon EFS 볼륨용 VPC입니다. 이 해결 방법은 Amazon Route 53 Resolver를 사용하여 데이터를 하드코딩하지 않습니다. 요금에 대한 자세한 내용은 Amazon Route 53 요금을 참조하십시오.
전제 조건:
- VPC A와 B는 Amazon에서 제공하는 DNS 서비스를 사용합니다. 또는 사용자 지정 DNS 서버가 DNS 서버 구성 파일의 조건부 DNS 전달자를 사용합니다.
- Amazon EFS 보안 그룹 인바운드 규칙은 VPC A CIDR에 대해 포트 2049에서 TCP를 통한 NFS 트래픽을 허용합니다.
작업이 AWS Fargate에서 실행되는 경우 다음 단계를 완료하십시오.
- VPC B에서 Route 53 인바운드 엔드포인트를 생성하고 다음 설정을 구성합니다.
region-name 리전의 VPC에서 VPC B를 선택합니다.
이 엔드포인트에 대한 보안 그룹에서 포트 53의 VPC A로부터 인바운드 TCP 및 UDP 트래픽을 허용하는 보안 그룹을 선택합니다.
IP 주소에서 두 개의 IP 주소를 생성합니다.
참고: 서버가 DNS 이름을 해석할 때는 일반적으로 클라이언트와 동일한 가용 영역에 있는 마운트 지점의 IP 주소를 반환합니다. 이 해결 방법을 사용하면 DNS 쿼리가 인바운드 엔드포인트에서 시작됩니다. 따라서 인바운드 엔드포인트의 가용 영역에 따라 반환된 IP 주소가 달라집니다.
EFS 파일 시스템의 단일 IP 주소를 반환하려면 단일 마운트 지점을 구성하십시오. 또는 두 IP 주소를 동일한 가용 영역에 배치하십시오. 다른 가용 영역을 선택하는 경우 DNS 이름은 쿼리를 전달한 인바운드 엔드포인트를 기반으로 다른 IP 주소를 반환합니다. - VPC A에서 Route 53 아웃바운드 엔드포인트를 생성하고 다음 설정을 구성합니다.
region-name 리전의 VPC에서 VPC A를 선택합니다.
이 엔드포인트에 대한 보안 그룹에서 포트 53의 VPC B로 아웃바운드 TCP 및 UDP 트래픽을 허용하는 보안 그룹을 선택합니다. - Route 53 해석기 규칙을 생성하여 Amazon EFS DNS 이름에 대한 DNS 쿼리를 VPC B의 Amazon DNS로 전달합니다.
다음 설정을 구성합니다.
도메인 이름에 EFS 파일 시스템의 전체 DNS 이름을 입력합니다(예: fs-abcdef.efs.eu-west-1.amazonaws.com).
이 규칙을 사용하는 VPC에서 VPC A를 선택합니다.
아웃바운드 엔드포인트에서 VPC A의 아웃바운드 엔드포인트를 선택합니다.
대상 IP 주소에 VPC B의 Route 53 인바운드 엔드포인트에 대한 두 개의 IP 주소를 입력합니다. - DNS 이름으로 Amazon EFS 볼륨을 마운트할 수 있는지 확인하려면 클라이언트에서 다음 명령을 실행합니다.
sudo mount.efs fs-abcdefxyz /mnt
참고: region을 해당 리전으로 바꾸고 fs-abdcexzy를 파일 시스템 볼륨 ID로 바꾸십시오.dig fs-abcdefxyz.efs.region.amazonaws.com
IAM 역할 정책 및 권한 확인
IAM 역할 정책 및 권한에 문제가 있는 경우 다음 예시와 비슷한 오류가 발생합니다.
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: b'mount.nfs4: access denied by server while mounting 127.0.0.1:/' : unsuccessful EFS utils command execution; code: 32"
-또는-
"ResourceInitializationError: failed to invoke EFS utils commands to set up EFS volumes: stderr: b'mount.nfs4: mounting fs-xxx.efs.us-east-1.amazonaws.com:/dir failed, reason given by server: No such file or directory' : unsuccessful EFS utils command execution; code: 32"
다음 리소스에서 정의한 권한은 EFS 파일 시스템에 대한 액세스를 제어할 수 있습니다.
- Amazon ECS 작업 역할 IAM 정책
- EFS 파일 시스템 정책
- 액세스 포인트에 할당된 POSIX 권한
- 네트워크 ACL 및 보안 그룹
참고: 네트워크 ACL 및 보안 그룹을 확인하려면 보안 그룹 및 네트워크 ACL 섹션을 참조하십시오.
Amazon ECS 작업 권한 확인
참고: 작업 실행 역할 ID를 식별하려면 작업 정의 JSON 파일에서 executionRoleARN 값을 확인하십시오. JSON 파일에 액세스하는 방법에 대한 자세한 내용은 5단계: 작업 정의 생성을 참조하십시오.
Amazon ECS 작업 실행 역할에 Amazon EFS 파일 시스템을 찾아 작업에 마운트하는 데 필요한 권한이 있는지 확인하십시오.
다음 단계를 완료합니다.
- IAM 콘솔을 엽니다.
- 탐색 창에서 역할을 선택합니다.
- 검색 창에 작업 실행 역할의 이름을 입력한 다음, 작업 실행 역할을 선택합니다.
- 권한 정책을 선택하여 연결된 모든 정책을 확장합니다. 목록에 다음 권한이 포함되어 있는지 확인하십시오.
elasticfilesystem:ClientMount
elasticfilesystem:ClientWrite
elasticfilesystem:DescribeMountTargets
elasticfilesystem:DescribeFileSystems
작업 실행 역할에 권한을 추가하려면 다음 단계를 완료하십시오.
- IAM 콘솔을 엽니다.
- 탐색 창에서 정책을 선택합니다.
- 정책 생성을 선택합니다.
- 서비스에서 EFS를 선택합니다.
- 허용되는 작업 섹션을 확장합니다.
- ClientMount, ClientWrite, DescribeMountTargets 및 DescribeFileSystems 권한을 선택합니다.
- 역할이 이러한 작업을 수행할 수 있는 리소스를 선택하고 다음을 선택합니다.
- 정책 이름과 설명을 입력한 다음, 정책 생성을 선택합니다.
- 탐색 창에서 역할을 선택합니다.
- 검색 창에 작업 실행 역할의 이름을 입력한 다음, 작업 실행 역할을 선택합니다.
- 권한 추가를 선택한 다음, 정책 연결을 선택합니다.
- 새 정책을 선택합니다.
- 권한 추가를 선택합니다.
EFS 파일 시스템 정책 확인
다음 단계를 완료합니다.
-
Amazon EFS 콘솔을 엽니다.
-
파일 시스템을 선택한 다음, 사용자 파일 시스템을 선택합니다.
-
파일 시스템 정책에서 작업 실행 역할이 EFS 볼륨을 마운트하도록 허용하는지 확인합니다.
정책 예시:{ "Version": "2012-10-17", "Statement": [ { "Sid": "ECS Tasks - EFS Access", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::account-id:role/ecs-task-execution-role-name" }, "Action": [ "elasticfilesystem:ClientMount", "elasticfilesystem:ClientWrite", "elasticfilesystem:DescribeMountTargets", "elasticfilesystem:DescribeFileSystems", ] } ] } -
정책에 IAM 권한을 더 추가하려면 새 파일 시스템 정책을 추가합니다. 또는 클라이언트가 Amazon EFS 볼륨을 사용하여 기존 정책을 수정할 수 있도록 명령문을 추가합니다.
POSIX 권한 확인
사용자 지정 루트 디렉터리 경로에서 액세스 포인트를 사용하는 경우 POSIX 사용자 및 루트 디렉터리 생성 권한이 있는지 확인하십시오. 자세한 문제 해결 정보는 액세스 포인트 마운트 실패를 참조하십시오.
관련 정보
Amazon ECS 컨테이너 또는 Fargate에서 실행 중인 작업에 Amazon EFS 파일 시스템을 마운트하려면 어떻게 해야 합니까?
Amazon ECS와 AWS Fargate를 함께 사용할 시의 개발자용 Amazon EFS 사용 가이드 - 2부
- 언어
- 한국어
