Amazon EFS 소개 및 활용 방법

Amazon Elastic File System(EFS)은 AWS에서 제공하는 서버리스 방식의 탄력적인 파일 스토리지 서비스입니다.

이번 글에서는 Amazon EFS의 특징과 연결 방법에 대해 알아보는 시간을 가져보겠습니다.

1. Amazon EFS 란?

  • 완전 탄력적인 서버리스 파일 스토리지를 제공하여 용량과 성능을 프로비저닝하거나 관리할 필요 없이 파일을 공유할 수 있습니다.
  • 애플리케이션을 중단하지 않고 온디맨드 방식으로 페타바이트 규모까지 확장이 가능합니다.
  • Amazon EFS는 Amazon EC2, Amazon ECS, Amazon EKS, AWS Lambda, AWS Fargate 등 Amazon Web Services 컴퓨팅 인스턴스에서 엑세스가 가능하며 온프레미스와도 연결이 가능합니다.

Amazon EFS 파일 시스템 유형

  • 리전
    • 여러 가용 영역에 파일 시스템 데이터와 메타데이터를 중복 저장하여 높은 가용성과 내구성을 제공합니다.
    • AWS 리전 내 한 개 이상의 가용 영역을 사용할 수 없는 경우에도 데이터에 대한 지속적인 가용성을 제공합니다.
    • 성능 및 비용의 이유로 동일한 가용 영역 내의 탑재 대상에서 파일 시스템에 엑세스 하는 것을 권장합니다.
  • One Zone
    • AWS 리전의 단일 가용영역 내의 데이터에 지속적인 가용성을 제공합니다.
    • AWS 가용 영역 전부 또는 일부가 손실 되거나 손상 되는 경우 데이터가 손실 될 수 있습니다.

2. EFS 연결하기

2-0. 사전 준비

  • EFS 마운트 확인을 위한 대상 ec2 서버 2대
  • EFS 생성을 위한 VPC (EC2와 동일한 VPC 이용)
  • EFS 용 Security Group

2-1. EFS 생성

1. EFS 콘솔 > [파일 시스템 생성]을 클릭
2. 보다 자세한 설정을 위해 [사용자 지정] 클릭
3. EFS 설정 입력(일반) > [다음] 클릭
  • 이름 : EFS 이름
  • 파일 시스템 유형 : 리전 또는 One Zone 선택
파일 시스템 유형설계 특징고려 사항
리전가용성을 필요로 하는 데이터None
One Zone가용성을 필요로 하지 않는 데이터가용 영역의 손실에 대한 복원력이 없음
  • 자동 백업: 자동 백업 활성화 체크 박스 선택
    • 자동 백업은 AWS Backup 서비스를 통해 백업 되며, 본 글에서는 테스트용이므로 백업 비활성화로 설정하기위해 체크박스를 해제합니다.
  • 수명 주기 관리: 목적에 맞는 수명 주기 관리를 선택합니다.
    스토리지에 대한 자세한 요금은 왼쪽 링크를 참고해주시기 바랍니다. Amazon EFS 요금
Inrequent Access (IA)분기마다 몇 번만 액세스되는 데이터를 위한 비용 최적화된 스토리지 클래스
Archive매년 몇 번 또는 그 이하로 액세스되는 데이터를 위한 비용 최적화된 스토리지 클래스
StandardSSD 스토리지를 사용하여 자주 액세스하는 파일에 대해 최저 수준의 지연 시간을 제공함
새 파일 시스템 데이터는 먼저 Standard 스토리지 클래스에 기록된 다음 수명 주기 관리를 사용하여 Inrequent Access 및 Archive 스토리지 클래스로 계층화할 수 있음
  • 암호화 : 암호화 여부 및 암호화 방법 선택
    기본적으로 AWS KMS 서비스 키(aws/elasticfilesystem)를 이용하며 고객 관리형 키를 이용할 경우 키를 선택하거나 키 arn을 입력할 수 있습니다.
4. EFS 설정 입력(성능 설정) > [다음] 클릭
  • 요구사항에 맞는 성능을 선택합니다.
5. EFS 설정 입력(네트워크액세스) > [다음] 클릭
  • 사전에 생성한 VPC, Subnet, Security Group을 선택합니다.
6. EFS 설정 입력(파일 시스템 정책 – 선택 사항) > [다음] 클릭
7. 설정 검토 후 [생성] 클릭
8. EFS 생성 확인
  • 생성이 완료 된 EFS 상태가 “사용 가능”임을 확인합니다.

2-2. EFS 마운트

사전에 생성한 두 서버를 이용하여 amazon-efs-utils 패키지(EFS 탑재 도우미)를 사용한, EFS 탑재 도우미를 사용하지 않는 두 가지 마운트 방법을 소개하도록 하겠습니다.

버전1. EFS 탑재 도우미 사용
1. amazon-efs-utils 패키지 설치

EFS 탑재 도우미를 사용하기 위해서는 amazon-efs-utils 패키지 설치가 필요합니다.

sudo yum install -y amazon-efs-utils
2. 마운트 포인트 생성
sudo mkdir 마운트 포인트 이름
3. EFS 탑재 헬퍼를 사용하여 탑재
  • EFS 콘솔 > 생성한 EFS 클릭 > [연결] 클릭 > EFS 탑재 헬퍼 사용 복사
4. 대상 서버에 EFS 마운트
  • 위 복사한 명령어를 마운트 포인트에 맞게 변경하여 명령어를 실행합니다.
  • df -h 명령어로 정상 마운트를 확인합니다.
sudo mount -t efs -o tls file-system-id:/ efs-mount-point
5. 자동 마운트 설정(IAM 이용)
  • Amazon EC2 인스턴스에 IAM 권한을 부여하여 자동으로 탑재하려면 /etc/fstab 파일에 다음 줄을 추가합니다.
vi /etc/fstab

## 아래 줄 추가
file-system-id:/ efs-mount-point efs _netdev,noresvport,tls,iam 0 0
필드설명
file-system-id:/Amazon EFS 파일 시스템의 ID
efs-mount-pointEC2 인스턴스의 EFS 파일 시스템 마운트 포인트
efs파일 시스템의 유형 탑재 도우미를 사용하는 경우 이 유형은 항상 efs
mount options파일 시스템의 탑재 옵션
•_netdev – 클라이언트에서 네트워크가 활성화되기 전에 인스턴스가 파일 시스템을 마운트하는 것을 방지하는 옵션
• noresvport – 네트워크 연결이 다시 설정될 때 NFS 클라이언트가 새로운 TCP 소스 포트를 사용하도록 지시. 네트워크 복구 이벤트 후에도 EFS 파일 시스템을 중단 없이 사용 가능
• tls – 전송 중인 데이터의 암호화를 활성화
• iam – 인스턴스 프로파일이 있는 Amazon EC2에 IAM 권한을 부여하여 탑재할 때 사용. iam 탑재 옵션을 사용하려면 tls 옵션도 사용해야 함
• awsprofile=namedprofile – 보안 인증 파일을 사용하여 Linux 인스턴스에 IAM 권한을 부여하여 탑재하려면 이 옵션을 iam 및 tls 옵션과 함께 사용해야함
• accesspoint=access-point-id – EFS 액세스 포인트를 사용하여 탑재하려면 이 옵션을 tls 옵션과 함께 사용해야함
00이 아닌 값은 파일 시스템을 dump로 백업해야 함을 나타냄. EFS의 경우 이 값은 0이어야 함
0부팅 시 fsck가 파일 시스템을 검사하는 순서. EFS 파일 시스템의 경우 이 값을 0으로 하여 시작 시 fsck가 실행되지 않도록 해야함
6. 재부팅 후 자동 마운트 확인
버전2. NFS 클라이언트 사용
1. 마운트 포인트 생성
sudo mkdir 마운트 포인트 이름
2. NFS 클라이언트 사용하여 탑재
  • EFS 콘솔 > 생성한 EFS 클릭 > NFS 클라이언트 사용 복사
3. 대상 서버에 EFS 마운트
  • 위 복사한 명령어를 마운트 포인트에 맞게 변경하여 명령어를 실행합니다.
  • df -h 명령어로 정상 마운트를 확인 합니다.
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport file_system_id.efs.aws-region.amazonaws.com:/ mount_point
NFS 마운트 옵션설명
rsize=1048576NFS 클라이언트가 각 네트워크 읽기 요청에 대해 수신할 수 있는 최대 데이터 바이트 수.
성능이 저하되지 않도록 최대한 큰 크기(최대 1048576)를 사용하는 것을 권장
wsize=1048576NFS 클라이언트가 각 네트워크 쓰기 요청에 대해 전송할 수 있는 최대 데이터 바이트 수
성능이 저하되지 않도록 최대한 큰 크기(최대 1048576)를 사용하는 것을 권장
hardNFS 요청 제한 시간이 초과된 후 NFS 클라이언트의 복구 동작을 설정하여 서버가 응답할 때까지 NFS 요청이 무기한 재시도
timeo=600NFS 클라이언트가 NFS 요청을 재시도하기 전에 응답을 기다리는 데 사용하는 제한 시간 값을 600초초 (60초) 로 설정
시간 제한 파라미터(timeo)를 변경해야 하는 경우 15초에 해당하는 150 이상의 값을 사용하는 것을 권장
retrans=2NFS 클라이언트가 추가 복구 작업을 시도하기 전에 요청을 재시도하는 횟수를 2로 설정
_netdev/etc/fstab 에 있는 경우 네트워크가 활성화될 때까지 클라이언트가 EFS 파일 시스템을 마운트하려고 시도하지 못하도록 함
nofail마운트된 EFS 파일 시스템의 상태와 관계없이 EC2 인스턴스를 시작해야 하는 경우 /etc/fstab파일의 파일 시스템 항목에 nofail 옵션 사용
4. 자동 마운트 설정

  • Amazon EC2 인스턴스에 NFS를 사용하여 자동으로 탑재하려면 /etc/fstab 파일에 다음 줄을 추가합니다.
  • vi /etc/fstab
    
    ## 아래 줄 추가
    file_system_id.efs.aws-region.amazonaws.com:/ mount_point nfs4 nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,_netdev 0 0
    5. 재부팅 후 자동 마운트 확인

    3. EFS 동작 확인

    ec2-a 서버의 efs 마운트를 한 디렉토리에 테스트 파일을 생성하면 ec2-c 서버에서 efs 마운트를 한 디렉토리에 파일이 공유 되는 것을 확인 할 수 있습니다.

    • ec2-a 서버에서 테스트 파일 생성
    • ec2-c 서버에서 파일 확인

    4. 마무리

    Amazon EFS를 EC2에 연결하여 활용하는 방법을 소개해봤습니다.

    EC2이외에 Amazon ECS, Amazon EKS, AWS Lambda 등 Amazon Web Services 컴퓨팅 인스턴스 및 온프레미스와도 연결이 가능한 점, 완전 관리형 서비스인 점을 볼 때, 스토리지 관리 및 확장에 대한 부담을 줄이고 애플리케이션의 유연성과 신뢰성을 높일 수 있는 서비스라고 생각합니다.

    Amazon EFS를 효율적으로 활용하여 클라우드 기반 인프라에서의 작업을 더욱 효율적으로 수행하시길 바랍니다.

    감사합니다.