[AWS] EFS(Elastic File System)
EFS
AWS EFS는 클라우드 서비스와 온프레미스 리소스 모두에서 사용가능한
확장 가능하고 탄력적인 파일 스토리지다.
기존 온프레미스에서 사용하던 NFS, NAS와 비슷한 서비스라고 생각하면 된다.
즉, 다수의 인스턴스에서 파일에 접근할 수 있는 네트워크 파일 스토리지 서비스다.
EFS 특징
- EFS는 파일을 추가하고 제거할 때 자동으로 확장되고 축소된다.
- 여러 가용 영역에서 액세스가 가능하다 (EBS와 달리 Multi AZ를 지원한다)
- S3와 같이 스토리지 클래스가 존재한다. (lifecycle을 통해 수명 주기 관리가 가능하다)
EFS 생성
0. 서버 생성
테스트를 위한 서버 2대를 생성해준다.
하나는 ubuntu 하나는 amazon linux (centos) 로 생성을 해줬다.
1. 보안 그룹 생성
인바운드 규칙에 마운트 할 EC2 인스턴스의 보안그룹을 규칙에 추가한다.
해당 보안 그룹을 사용하는 EC2 인스턴스로 접속한 IP만 NFS 프로토콜을 허용한다는 의미다.
2. EFS 생성
2-1. 파일 시스템 설정
콘솔의 EFS 생성에서 파일 시스템을 생성해주는데 사용자 지정으로 생성을 해준다.
- Standard : Multi AZ 구성
- One Zone : 단일 AZ 내에 데이터를 중복 저장한다.
처리량 모드에는 버스트와 프로비저닝 모드가 있다.
차이는 다음과 같다.
버스팅 모드 | 프로비저닝 처리량 모드 |
표준 스토리지 클래스의 파일 시스템 크기가 커짐에 따라 처리량 자동 조정 |
저장된 데이터 양에 상관없이 파일시스템의 처리량을 즉시 프로비저닝 |
2-2. 네트워크 액세스
다음 단계로 넘어가계되면 VPC를 선택할 수 있다.
default 보안 그룹이 선택이 되어있을텐데 취소 후 앞서 생성했던 EFS 보안 그룹을 선택해준다.
또한 4개의 가용 영역이 모두 선택이 되어있을텐데,
나같은 경우엔 EC2 서버가 각각 a존 c존에 생성이 되어있어서 a와 c존만 탑재대상으로 두었다.
2-3. 파일 시스템 정책
정책 옵션 선택이 가능한데, 선택 사항이니 정책이 필요한 경우 선택을 하면 될 것 같다.
검토 및 생성까지 마치면 EFS가 생성이 완료된다.
생성이 됐으니 서버에 마운트를 해보자.
3. EFS 마운트
EFS를 생성 후 콘솔에서 연결을 클릭하면 마운트 방법이 나온다.
- EFS 탑재 헬퍼 사용
sudo mount -t efs -o tls <DNS이름>:/ <마운트 할 폴더 경로>
- NFS 클라이언트 사용
sudo mount -t nfs4 -o \
nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport \
<DNS이름>.efs.ap-northeast-2.amazonaws.com:/ <마운트 할 폴더 경로>
efs 탑재 헬퍼를 사용할 경우 EFS 클라이언트를 설치를 해줘야 한다.
https://docs.aws.amazon.com/ko_kr/efs/latest/ug/installing-amazon-efs-utils.html
3-1. ubuntu에 mount
- EFS 유틸 설치
sudo apt-get update
sudo apt-get -y install git binutils
git clone https://github.com/aws/efs-utils
cd efs-utils
./build-deb.sh
sudo apt-get -y install ./build/amazon-efs-utils*deb
- 마운트 폴더 생성
나같은 경우는 root의 home에 폴더를 생성했기 때문에, 소유권을 변경해줬다.
sudo mkdir -p /test/efs_mount
sudo chown -R ubuntu:ubuntu /test/efs_mount
아래 명령어로 수동 마운트를 진행 할 수 있다.
sudo mount -t efs -o tls fs-0f9c00829d8f23bd0:/ /test/efs_mount
자동 마운트 구성은 다음과 같다.
sudo vi /etc/fstab
~
fs-0f9c00829d8f23bd0.efs.ap-northeast-2.amazonaws.com:/ /test/efs_mount efs defaults,nofail 0 0
~
sudo mount -a
mount
그 후 mount 명령어로 확인해보면 mount가 잘 된 모습을 확인할 수 있다.
파일 공유가 잘 됐는지 테스트 하기 위해서 마운트 경로에 파일을 하나 생성해놓자
cd /test/efs_mount
echo > test
3-2. Amazon linux에 mount
- EFS 유틸 설치
sudo yum install -y amazon-efs-utils
유틸 설치가 됐다면 나머지 과정은 ubuntu와 동일하다.
동일한 과정을 수행 후 파일을 확인해보자.
마운트를 한 뒤 test 파일을 생성하지 않더라도 ls 명령어를 쳤을 시
앞서 만들어 둔 test 파일이 잘 보이는 것을 확인할 수 있다.
mount point
현재 DNS 이름의 뒤의 경로가 / 로 되어있을텐데
하위 폴더를 생성하여 그 경로에 마운트를 할 수도 있다.
방법은 다음과 같다.
EFS의 최상위 경로에 마운트할 폴더를 생성 후 마운트를 한다.
sudo mkdir /efs
sudo mount -t efs -o tls <DNS 이름>:/ /efs
그 후 /efs는 EFS의 루트에 마운트가 되었으므로 /efs에 하위 폴더를 생성을 해준다.
sudo mkdir /efs/test
sudo chown ubuntu:ubuntu /efs/test
그 다음 /test 경로에 마운트를 해주면 끝
sudo mount -t efs -o tls <DNS 이름>:/test /home/ubuntu/test
여러개의 하위 폴더를 생성하면 별개의 디렉토리를 사용하게되기 때문에
특정 유저에게 권한을 줘서 특정 유저만 사용하는 용도로도 사용이 가능하다.
자동 마운트는 다음과 같이 등록 할 수 있다.
sudo vi /etc/fstab
~
<DNS이름>.efs.ap-northeast-2.amazonaws.com:/ /efs efs defaults,nofail 0 0
<DNS이름>.efs.ap-northeast-2.amazonaws.com:/test /home/ubuntu/test efs defaults,nofail 0 0
<DNS이름>.efs.ap-northeast-2.amazonaws.com:/test2 /home/ubuntu/test2 efs defaults,nofail 0 0
~
sudo mount -a
포인트는 루트 경로에 연결된 디렉토리 하위에 새로운 폴더를 생성한 후
그 경로로 mount를 하면 된다
각 마운트 포인트는 서로 파일 공유를 하지 않는 모습을 확인할 수 있다.
참조
'💻 CSP > AWS' 카테고리의 다른 글
[AWS] Lambda (0) | 2023.08.13 |
---|---|
[AWS] EKS(Elastic Kubenetes Service) (0) | 2023.08.12 |
[AWS] IAM(Identity and Access Management) (0) | 2023.07.31 |
[AWS] Network ACL, Security Group (0) | 2023.07.29 |
[AWS] AWS CLI를 사용해 SQS 대기열 관리하기 (0) | 2023.07.02 |