[AWS] 8. EFS란?(with EC2에 EFS Volume 추가하기)
안녕하세요. 갓대희 입니다. 이번 포스팅은 [ AWS - EBS란?(with EC2에 EFS Volume 추가하기) ] 입니다. : )
0. 들어가기 앞서
- 예전에 생성하였던 EC2에 MySql을 설치하여 사용하다보니 EC2 EBS 용량 이 부족한 상황이 발생 하여 EBS Volume을 추가 해 보았다. 하지만 동일AZ에서만 연결 가능 하는 등의 제약 사항이 있다.
- 이번엔 EFS Volumne을 추가해보려 한다. 기존 WAS(EC2)여러대에 하나의 NAS(EFS)를 마운트 하는 컨셉으로 내용을 이어 가보려 한다.
1. EFS (Elastic File System) 정의 및 특징
- 기존 온프레미스 환경에서의 NFS, NAS와 비슷한 서비스이다.
( 파일 스토리지 서비스인 나스의 기능으로서도 사용 가능하다.)
- 공식 문서는 꼭 한번 간단히 읽어 보도록 하자.(https://docs.aws.amazon.com/efs/)
- 최소한의 내용을 정리 한 후 실습해보려 한다.
기본 특징
- 리눅스용 파일 서비스(아마존 리눅스 AMI에 최적화)이기 때문에 윈도우는 지원되지 않는다.
- Network File System(NFS) 버전 4를 지원하기 때문에 여러 리소스에서 하나의 파일에 동시에 접근해야할 때 주로 사용하기도 한다.
(수천 개의 EC2에서 동시에 액세스 가능)
- EC2, Lamda, Fargate 등 다양한 AWS서비스와 마운트를 지원한다.
- EFS DNS 이름으로 mount 해서 여러 인스턴스에서 동시에 사용할 수 있다.
확장 및 AutoScaling
- Storage Auto Scaling이 가능하다.(미리 크기를 프로비저닝할 필요 없다.)
- Peta Byte까지 데이터 저장 가능하다.
- 최대 1천개의 파일 시스템을 생성 가능하다.
가용성
- EFS는 Multi AZ를 지원하고, security group으로 제어된다.(EBS는 단일 AZ, 직접연결되어 security group으로 제어하지 않음.)
- Multi AZ를 지원하기 때문에 여러 가용영역에서 엑세스 가능하며, 여러 가용영역에 저장하기 때문에 재해복구가 용이 하다.
2. EFS 생성하기
1. EFS 파일 시스템 생성하기
- EFS 검색 및 "EFS 콘솔 이동"
- "파일 시스템 생성" 클릭
- 아주 간단한 설정으로도 "파일 시스템 생성"할 수 있지만, 조금 더 항목별로 살펴 보기 위해 "사용자 지정"을 클릭 하도록 한다.
1단계 : 파일 시스템 설정 - 일반 설정
- 이번 실습의 경우 이름만 입력하고 기본설정으로 넘어 간다. 하기 내용은 당장은 가볍게 보고 넘어가자.
- 이름 : 본인이 지정할 EFS 구분 값
- 스토리지 클래스 : S3와 같이 스토리지 클래스가 존재한다.
- https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html 참고
- Standard Class : 공식 문서의 내용을 요약 하자면, 자주 액세스하는 파일을 저장하는데 사용한다.
- One Zone 및 One Zone–IA 스토리지 클래스 : 저장기간은 길지만, 자주 액세스하지 않는(not accessed every day) 파일을 저장할때 사용하면 스토리지 비용면에서 유리하다.
- https://docs.aws.amazon.com/efs/latest/ug/storage-classes.html 참고
- 자동 백업 활성화 : Amazon EFS의 백업 정책 및 예약을 자동화하고 추적하게 한다.
- 수명 주기 관리 : Lifecycle을 통해 잘 접근하지 않는 파일을 자동으로 EFS IA(Infrequently accessed)로 옮겨 저렴하게 이용할 수 있게 한다.
- 암호화 설정 : EFS는 유휴시, 전송시 데이터 암호화를 지원하고 있다. 나의 경우 함호화는 나중에 EFS, S3 등 별도로 따로 포스팅할 예정이니 자세히 다루지 않고 넘어 간다.
1단계 : 파일 시스템 설정 - 성능 설정
- 처리량(Privisioned Throughput) 모드 : 예전의 경우 버스트 모드를 Default로 권장 하였지만, 현재는 "개선됨" 모드를 Default로 하고 있다.
ex) 잦은 읽기 쓰기(많은 처리량)가 발생하면 성능저하가 발생 가능하다.
ex) 따라서, 처리량이 많은 경우 탄력적 처리량(개선됨) 모드 or Privisioned Throughput 모드를 사용할 수 있다.
- EFS는 Elastic, Provisioned, Bursting이라는 세 가지 처리량 모드를 제공한다.
- 1.1) 탄력적 처리량 (권장)
- 예측하기 어려운 급증, 예측할 수 없는 워크로드 및 성능 요구 사항이 있는 경우.
- 애플리케이션이 5% 이하의 평균-최대 비율로 처리량을 구동하는 경우. - 1.2) 프로비저닝된 처리량
- 저장된 데이터 양에 상관없이 파일시스템의 처리량을 즉시 프로비저닝 가능하다. (하드용량 같이 미리 확보)
- 애플리케이션이 5% 이상의 평균-최대 비율로 처리량을 구동하는 경우. - 1.3) 버스팅 처리량
- 단기간에 처리량을 높이고 나머지 기간에는 처리량을 낮춘다.
- 파일 시스템의 스토리지 양에 따라 처리량을 확장하려는 경우.
- 성능(Performance) 모드 :
- 파일시스템을 만든 후 EFS 파일 시스템의 성능 모드를 변경할 수 없다.- 2.1) 범용 성능 모드 (권장) : 지연시간에 민감한 사용 사례에 이상적이다.
- 2.2) 최대 I/O 성능 모드
- 엑세스하는 EC2가 많은 경우, MAX I/O mode를 사용하는 것을 권장한다.(대신 지연시간이 약간 길어질 것 이다.)
- 이외의 케이스는 General Mode를 권장 한다.
- 여기 까지가 1단계인 "파일 시스템 설정" 이다. 태그가 필요한 경우 입력 후 "다음" 버튼을 클릭 해 주자.
- 길었지만 사실 이번 실습에서는 기본설정 그대로 둔 채 "다음" 만 눌르면 된다.
2단계 : 네트워크 엑세스 설정
- 네트워크 설정 하기 전 다른 창을 통해 네트워크 보안그룹 설정을 하고 오자.
- EC2 콘솔 > 보안 그룹 > "보안 그룹 생성" 클릭
- VPC
- 이름을 입력, 기본 VPC 를 선택
※ 테스트 단계이고, 아직 VPC에 대한 내용을 다루지 않아 기본 VPC를 사용하였지만,
실제 운영, Production 환경에서는 기본 VPC 사용은 지양해야 한다. - NFS 프로토콜 추가 및 보안그룹 설정
- "NFS" 규칙 추가 > 마운트할 EC2 인스턴스의 보안그룹을 지정해 주자.
( 해당 보안 그룹을 사용하는 EC2 인스턴스로 접속한 IP만 허용함)
- 태그가 필요하면 입력하고 "보안 그룹 생성" 클릭
- 다시 "네트워크 설정"으로 돌아온다.
- 마운트할 EC2 인스턴스가 위치하는 가용 영력, 서브넷을 일치 시킨다.
- 보안그룹은 내가 위에서 생성한 보안그룹을 선택 하여 준다.
3단계 : 파일 시스템 정책 (선택사항)
- 권한을 부여할 정책이 있다면 체크하면 되고, 자동으로 JSON이 생성된다.
4단계 : 검토 및 생성
- 검토 및 생성 페이지에서 설정과 관련하여 이상이 없으면 넘어 가도록 한다.
3. EC2와 연결 하기
- ec2에 연결 하는 내용은 자습서에도 잘 나와 있으니, 자세한 내용은 자습서를 참고 하도록 하자.
https://docs.aws.amazon.com/ko_kr/efs/latest/ug/wt1-test.html
1. EC2 시작할 때 EFS 연결 하기
- ec2관련된 포스팅은 아니니 중요하지 않은 부분은 스킵.
- EC2 콘솔로 이동하여 "인스턴스 시작" 클릭 해여 준다.
- efs는 아마존 리눅스 AMI에 최적화 되어 있으니, 이번엔 "아마존 리눅스 AMI"를 선택 한다.
- 하단의 스토리지 구성 > 파일 시스템 영역 우측의 "편집"를 클릭.
- 다음과 같은 경고 메세지를 확인할 수 있다.
※ EC2의 서브넷과 EFS의 서브넷이 일치해야 연결 가능하다.
(조금 위 아래로 왔다 갔다 하지만, 상기 문구를 눈으로 확인하기 위함이었다.)
- 다시 위로 올라가 "네트워크 설정"탭을 찾고, "편집"을 클릭해 준다.
- EFS의 서브넷과 일치되는 서브넷을 선택하여 준다.
- EC2의 보안 그룹은 기존 보안 그룹을 선택 하였다. (443, 80, 22 ssh 포트까지만 허용해 놓은 보안 그룹)
- "스토리지(볼륨)" 탭으로 다시 내려오면
아까와는 다르게 "공유 파일 시스템 추가" 버튼이 활성화되어 있는 것을 볼 수 있다. 클릭해 보자.
1) 본인의 EFS를 선택 하면 된다.
2) "보안 그룹을 자동으로 생성 및 연결"은 체크 해제 하여 주었다. (위에서 따로 보안 그룹 설정 완료)
3) "필요한 사용자 ... 공유 파일 시스템을 자동으로 탑재" 는 체크 해 주자. 안그러면 별도로 efs-utils를 생성 해야 하거나 등등의 작업이 추가적으로 필요하게 된다.
- 검토 후 인스턴스 시작을 클릭 하여 준다.
- 이제 생성한 인스턴스에 접속해 보자. 접속 후 하기 명령어를 통해 마운트 상태 확인
df -h
- 정상적으로 efs가 마운트 되어있음을 볼 수 있다.
- 폴더 이동 및 파일생성도 정상적으로 됨을 볼 수 있다.
2. 이미 생성한 인스턴스에 EFS 연결 하기
- 위와 같이 처음부터 생성할때 연결하는 것은 체크박스 클릭만 되어 있으면 간단히 연결할 수 있다.
- 먼저 수동 연결을 위해 EFS 연결하지 않고, EC2 인스턴스를 미리 생성 해두자.
- EFS 콘솔에 들어가 해당 EFS의 "세부 정보 보기 클릭".
- 우측 상단 "연결" 버튼을 클릭 한다.
- Linux 인스턴스에 탑재하는 명령어가 노출 된다.
- 파일 시스템 연결 방법
① DNS를 통해 탑재 : DNS를 통해 탑재하는 방법은 2가지 방법이 있다.
1-1) EFS 탑재 헬퍼 사용
1-2) NFS 클라이언트 사용
② IP를 통해 탑재
※ 여러 방법 중 "1-1) EFS 탑재 헬퍼 사용" 방법을 이어 나가 보자.
- EFS 탑재 헬퍼는 파일 시스템 탑재를 간소화시켜준다.
- 탑재 헬퍼는 /etc/fstab 구성 파일의 항목을 사용해 자동으로 부팅 시 인스턴스에 EFS 파일 시스템을 탑재하는 것을 지원 한다.
Case1. AWS AMI
1.EC2 Instance 접속 및 amazon-efs-utils 패키지를 설치
- https://docs.aws.amazon.com/efs/latest/ug/installing-amazon-efs-utils.html#installing-other-distro
sudo yum update
sudo yum install -y amazon-efs-utils
2. EFS 헬퍼 명령어 입력
# -p : 하위 디렉토리 경로대로 생성
sudo mkdir -p /mnt/efs/fs1
# EFS 탑재 helper
# sudo mount -t efs -o tls fs-0207eacd08f0f169f:/ efs(경로)
sudo mount -t efs -o tls fs-0207eacd08f0f169f:/ /mnt/efs/fs1
- 정상적으로 마운트 된 것을 볼 수 있다.
ex) 마운트 전
ex) 마운트 후
- 자동 마운트 설정 : 재기동시에도 자동 마운트 될 수 있도록 다음과 같이 추가해 준다.
sudo vim /etc/fstab
...
#하기 내용 추가
fs-0207eacd08f0f169f /mnt/efs/fs1 efs _netdev,tls 0 0
Case2. 우분투
1.EC2 Instance(Ubuntu) 접속 및 amazon-efs-utils 패키지를 설치
- 하기 자습서 내용을 참고 해보자.
https://docs.aws.amazon.com/efs/latest/ug/installing-amazon-efs-utils.html#installing-other-distro
- 상기 자습서의 "DEB" 영역을 진행 해보자.
- 우분투 인스턴스 접속 및 sudo apt-get update
sudo apt-get update
- git 및 binutils 설치 : DEB 패키지를 빌드하는 데 필요하다.
sudo apt-get -y install git binutils
- GitHub에서 amazon-efs-utils 를 복제 한다.
git clone https://github.com/aws/efs-utils
- 해당 경로로 이동하여 빌드 및 설치
cd /path/efs-utils
./build-deb.sh
sudo apt-get -y install ./build/amazon-efs-utils*deb
이후 부터는 위의 내용과 동일하게 진행 하면 된다. (복붙)
2. EFS 헬퍼 명령어 입력
# -p : 하위 디렉토리 경로대로 생성
sudo mkdir -p /mnt/efs/fs1
# EFS 탑재 helper
# sudo mount -t efs -o tls fs-0207eacd08f0f169f:/ efs(경로)
sudo mount -t efs -o tls fs-0207eacd08f0f169f:/ /mnt/efs/fs1
- 정상적으로 마운트 된 것을 볼 수 있다.
ex) 마운트 전
ex) 마운트 후
- 자동 마운트 설정 : 재기동시에도 자동 마운트 될 수 있도록 다음과 같이 추가해 준다.
sudo vim /etc/fstab
...
#하기 내용 추가
fs-0207eacd08f0f169f /mnt/efs/fs1 efs _netdev,tls 0 0
이로써 AWS AMI, Ubuntu AMI 2개의 Instance에 1개의 EFS마운트 해보는 내용이 끝났다. :-)