EFS (Elastic File System) 은 AWS 의 파일 시스템 서비스입니다.
EBS, S3 처럼 데이터를 저장할 수 있습니다. 하지만 각각 쓰임의 목적이 다르기 때문에 자신의 목적에 맞게 잘 사용하여야 합니다.
EFS | S3 | EBS | |
사용 케이스 | 프라이빗 이미지 레지스트리 엔터프라이즈급 데이터 백업 |
웹 서비스 및 컨텐츠 | EC2 의 부팅 볼륨 |
그리고 AWS DataSync 를 이용하면 저장소의 데이터들을 다른 곳으로 옮길 수 있습니다. 같은 VPC 내 저장소는 물론 다른 VPC, 교차 계정 모두 가능합니다.
✅ 다른 VPC, 교차 계정은 서로의 VPC 가 Peering 되거나 TGW 로 sharing 된 상태여야 합니다
자세한 동작 방식은 확인하려며 여기를 눌러주세요
그럼 간단하게 한번 DataSync 를 통해 데이터를 이전해보죠 🧐
실습의 Flow 를 이렇습니다 📊
- Mount 해서 데이터 이전이 잘되었는 지 확인할 수 있는 EC2 생성
- VPC 내 EFS A 1개 생성 후 EC2 에 마운트
- 마운트한 디렉터리에 파일 생성
- 동일한 VPC 내 EFS B 생성 후 DataSync 에 사용할 Agent 생성
- DataSync 태스크 생성 후 데이터 이전
- EC2 에 EFS B 마운트한 후 데이터 이전되었는 지 확인
Mount 해서 데이터 이전이 잘되었는 지 확인할 수 있는 EC2 생성
EC2 을 생성합니다. EC2 에 대한 자세한 생성 방법은 다른 글에서 다루도록 하겠습니다 🙂
제가 생성한 EC2 는 t2.micro 이고, Amazon Linux2 입니다.
VPC 내 EFS A 1개 생성 후 EC2 에 마운트
EFS 을 생성합니다.
- 스토리지 클래스 : Standard 를 선택합니다. 아래 명시되어있는 것처럼 Standard 는 여러 AZ 에 걸쳐 데이터를 중복 저장할 수 있습니다.
- IA 로 전환 : EFS 는 비용을 최대한 효율화하기 위해서 자주 액세스 되지 않는 데이터는 IA(Infrequent Access) 라는 곳으로 옮길 수 있습니다. 여기서 마지막 액세스 이후 30일 경과는 액세스 하지 않은 지 30일이 지나면 IA 로 옮기고 처음 액세스할 때는 IA 에서 데이터를 빼낸다는 것입니다.
- 처리량 모드 : 버스트는 알아서 스토리지 양을 늘리고, 프로비저닝은 미리 스토리지 양을 정하는 옵션입니다. 여기선 버스트를 선택합니다.
✅ 반드시 보안 그룹의 인바운드 규칙 2049 포트를 지정해줍니다. 보통 NFS 같은 경우 2049 포트를 사용하는 데 EFS 도 마찬가지입니다
1단계 스토리지 클래스에서 Standard 를 선택했기 때문에 다중 AZ 선택이 가능하고, 만약 One Zone 을 했다면 하나의 AZ 만 선택 가능합니다.
기본적으로 제공해주는 4가지 정책이 있고, 커스텀 정책 또한 생성이 가능합니다. 자신의 환경에 맞게 세팅하시면 됩니다.
저는 아무것도 하지 않겠습니다.
4가지 정책의 이름들이 워낙 구체적이여서 따로 설명은 드리지 않겠습니다 🙈
검토를 한번 하고 생성해줍니다.
EFS 를 생성했으니 그럼 EC2 에 ssh 접속 후 마운트를 해줍니다.
생성 한 파일시스템 오른쪽 상단을 보시면 연결 이라는 버튼이 있는데 이걸 눌러줍니다.
그럼 mount 할 수 있는 명령어가 있는 데 이를 복사합니다.
✅ 명령어 가장 뒤에 보면 efs 라고 되어있는 데 이것이 마운트할 경로입니다. 저는 /mnt/efs/fs1 에 합니다.
그리고 EC2 로 돌아와 amazon-efs-utils 를 설치합니다. EFS 를 보다 쉽게 마운트할 수 있도록 도와주는 AWS 자체 프로그램입니다.
$ sudo yum install -y amazon-efs-utils
저는 이 명령어를 사용해 마운트하겠습니다.
$ sudo mount -t efs -o tls fs-066ba893bc35fce6c:/ /mnt/efs/fs1
[ec2-user@ip-10-0-0-20 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 474M 0 474M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 468K 483M 1% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.6G 6.5G 20% /
tmpfs 97M 0 97M 0% /run/user/1000
tmpfs 97M 0 97M 0% /run/user/0
10.0.0.62:/ 8.0E 0 8.0E 0% /mnt/efs/fs1
가장 밑에 10.0.0.62:/ 로 마운트 된 걸 확인할 수 있습니다 😎
마운트한 디렉터리에 파일 생성
마운트한 경로에 파일을 생성해봅니다.
$ pwd
/mnt/efs/fs1/data
$ sudo mkdir data
$ sudo cd ./data
$ sudo touch test.txt
EC2 에 마운트를 하여서 EFS 내 /data/test.txt 를 생성하였습니다 🙂
동일한 VPC 내 EFS B 생성 후 DataSync 에 사용할 Agent 생성
위 과정가 동일하게 이번엔 EFS B 를 생성합니다.
그럼 EFS B 도 마찬가지로 EC2 에 마운트합니다.
[ec2-user@ip-10-0-0-20 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 474M 0 474M 0% /dev
tmpfs 483M 0 483M 0% /dev/shm
tmpfs 483M 468K 483M 1% /run
tmpfs 483M 0 483M 0% /sys/fs/cgroup
/dev/xvda1 8.0G 1.6G 6.5G 20% /
tmpfs 97M 0 97M 0% /run/user/1000
tmpfs 97M 0 97M 0% /run/user/0
10.0.0.62:/ 8.0E 0 8.0E 0% /mnt/efs/fs1
10.0.0.193:/ 8.0E 0 8.0E 0% /mnt/efs/fs2
/mnt/efs/fs2 에 마운트 된 것을 확인합니다 🤜
[ec2-user@ip-10-0-0-20 ~]$ cd /mnt/efs/fs2/
[ec2-user@ip-10-0-0-20 fs2]$ ls -l
합계 0
당연히 아무 데이터도 없겠죠? 🙂
그럼 이제 EFS A 의 /data/test.txt 를 EFS B 로 본격적으로 옮겨봅시다.
우선 이를 중재해줄 Agent 를 생성합니다. Agent 는 이름만 Agent 이지 사실 EC2 입니다.
단, Amazon Linux2 와 같은 AMI 가 아닌 특정 AMI 를 사용해야 합니다.
ami-0283240deda0331b8 가 Agent 용 AMI 입니다. 그리고 인스턴스 타입은 아래 2가지 중 선택해야 합니다.
Agent 용 EC2 를 생성하였습니다. 보안 그룹 같은 경우 인바운드 규칙 22, 80, 443 을 추가했습니다.
그리고 Agent 는 크게 VPC Endpoint 와 퍼블릭으로 연결하는 방법이 있는데 여기선 VPC Endpoint 를 선택합니다.
VPC EndPoint 에서 서비스는 반드시 datasync 로 하고, 보안그룹은 아래와 같이 만들어주셔야 합니다.
이 또한 공식 문서에 명시되어있습니다.
Agent 를 만들 준비가 되었습니다.
이전에 생성한 EC2 와 서비스 엔드포인트를 선택해줍니다.
키를 가져온 후 Agent 를 생성해줍니다.
이로써 Agent 생성도 완료됩니다.
DataSync 태스크 생성 후 데이터 이전
소스 위치는 이전할 데이터가 있는 위치입니다.
옵션을 선택하고 생성을 해줍니다.
오른쪽 시작 버튼을 눌러 태스크를 진행해줍니다.
꽤 시간이 걸리니 인내를 갖고 기다려주세요 😅
이로써 이전이 완료되었습니다.
EC2 에 EFS B 마운트한 후 데이터 이전되었는지 확인
[ec2-user@ip-10-0-0-20 fs2]$ pwd
/mnt/efs/fs2
[ec2-user@ip-10-0-0-20 fs2]$ ls -l
합계 4
drwxr-xr-x 2 root root 6144 11월 20 11:54 data
[ec2-user@ip-10-0-0-20 fs2]$ cd ./data/
[ec2-user@ip-10-0-0-20 data]$ ls -l
합계 4
-rw-r--r-- 1 root root 0 11월 20 11:54 test.txt
데이터가 잘 이전되었습니다 😀
이번 글에서 rsync 를 대신하여 datasync 를 이용하여 스토리지 간 데이터 이전 하는 방법을 알아보았습니다.
긴 글 읽어주셔서 감사합니다 🙇♂️
'AWS' 카테고리의 다른 글
[AWS] EC2 인스턴스에 HTTPS 적용하기 (10) | 2021.10.08 |
---|---|
[AWS] HTTP to HTTPS로 배포하기 (S3 기준) (6) | 2021.05.21 |
[AWS] Route 53 도메인 구매 후 연결하기 (18) | 2021.05.19 |