본문 바로가기

aws/Storage

EFS - efs(elastic file system) 간단하게 사용하기

서비스를 위한 서버를 구성할 때 storage가 필요한 경우가 많습니다. 

AWS에는 S3라는 훌륭한 storage 서비스가 있습니다. 사용하기 쉽고 가용성이 뛰어난 S3를 사용하기 위해서 

검토를 한 결과 저희 시스템이랑 호환을 할 수 없는 상황이 발생하여 다른 storage를 결정하게 되었습니다. 

 

S3를 사용할 경우 물론 파일을 읽고 쓰는데 여려움은 없지만

현재 개발중인 서버에서 사용하는 SDK가 file system 기반의 모듈을 사용해야하기 때문에 

SDK를 수정해야하는 문제가 발생했습니다. 파일의 경로로 접근하여 동작하는 모듈의 특성상 S3는 사용할 수 없다는 

결론이 났고 결과적으로 파일 스토리지 서비스인 EFS를 사용하기로 하였습니다. 

EFS를 사용하는 경우 몇가지 장점이 있습니다. 

 

1. aws의 ec2 인스턴스와 연결하게 되면 file system과 연결하여 file을 접근하는 것과 같은 방식으로 사용할 수 있습니다. 

2. aws의 ec2 인스턴스와 연결한 후에 접근 권한 또한 file system을 관리하듯 관리할 수 있습니다. 

3. aws의 많은 서비스들과 같이 HA구성에 대한 신경을 쓰지 않아도 고가용성 서버를 운영할 수 있습니다. 

 

EFS를 EC2 인스턴스와 연결하여 사용하기 위해서 다음과 같은 순서로 진행하겠습니다. 

1. EFS 생성

2. ec2 접속 후 설정

3. VPC DNS 설정(default VPC가 아닌 VPC를 구성하여 사용할 경우)

 

첫번째로 aws console에서 efs를 검색하여 efs 대시보드로 이동합니다. 

 

efs 대시보드에서 "파일 시스템 생성" 버튼을 누릅니다. 

 

첫번째 단계에서 미리 vpc를 선택합니다. 

저는 미리 test_vpc라는 vpc를 생성해놓았습니다. 

test용이기 때문에 이 vpc에는 public subnet과 그 안에 public ec2 instance가 있습니다. 

 

vpc를 선택하면 하단에 가용영역을 선택해야 합니다. 

제가 생성한 vpc에는 가용영역이 한개이기 때문에 한개만 선택할 수 있습니다. 

가용영역 선택까지 완료 되었다면 우측 하단에 "다음 단계" 버튼을 클릭하여 다음으로 넘어갑니다. 

 

두번째 단계인 "파일 시스템 설정 구성"에서는 다섯가지 설정을 해야합니다. 

1. 태그 추가 : 별칭을 부여해줍니다. 

2. 수명 주기 관리 활성화 : S3를 사용해보신 분은 아실것 입니다. 

 - 주기를 설정해 놓으면 설정해 놓은 기간 동안 파일에 접근하지 않으면 자동으로 조금 저렴한 EFS IA 서비스로 이동하게 됩니다. 

3. 처리량 모드 선택 :

 - 처리량이 많은 경우 provisioned를 선택하면 되지만 지금은 테스트용이기 때문에 기본(bursting)으로 설정합니다. 

4. 성능 모드 선택 :

 - I/O 성능에 대한 설정입니다. 처리량과 마찬가지로 테스트용이기 때문에 General Purpose로 설정합니다. 

5. 암호화 활성 : 

 - 테스트용이기 때문에 기본으로 설정합니다. 

 

모든 설정이 끝났으면 우측 하단에 "다음 단계" 버튼을 클릭하여 다음 단계로 넘어갑니다. 

 

세번째 단계인 클라이언트 엑세스 구성 단계에서는 따로 설정하지 않고 

우측 하단의 "다음 단계" 버튼을 눌러 넘어갑니다. 

 

네번째 단계인 "검토 및 생성"에서는 구성한 EFS 설정을 확인하고 

우측 하단에 "파일 시스템 생성" 버튼을 클릭하여 생성을 완료합니다. 

 

생성을 완료하였다면 다음과 같은 화면이 나옵니다. 생성 직후 바로 생성이 완료되는 것이 아니고 

조금 시간이 걸릴 수 있습니다. 

 

생성이 완료되는 것을 기다릴 동안 efs에 연결할 ec2 instance를 접속하겠습니다. 

ec2 instance에 접속하는 방법은 이전 포스팅을 참고하시기 바랍니다. 

ec2 - aws ec2 만들기 "putty 접속"(2)

 

ec2 instance에 접속하여 설정을 하기 전에 선행되어야할 작업이 있습니다. 

1. 보안그룹 설정

2. vpc dns 설정

 

먼저 생성한 ec2 instance의 보안그룹을 수정해야합니다. 

생성한 인스턴스의 보안그룹에 들어갑니다. 

 

보안 그룹 창에서 우측 상단에 "Actions > Edit inbound rule"를 클릭하여 창을 이동합니다. 

 

efs는 "2049"라는 포트를 통하여 NFS(Network File System) 방식으로 접근하게 됩니다. 

따라서 위와같이

1. "Add rule" 버튼을 클릭하고 

2. 선택 박스에서 NFS를 선택하면 자동으로 2049포트를 허용하게 됩니다. 

설정이 끝났다면 우측 하단에 "Save rules" 버튼을 클릭하여 보안그룹 설정을 완료합니다. 

 

보안그룹은 state가지고 있기 때문에 inbound 설정만 해주면 ec2 instance에서 접근하여 사용할 수 있습니다. 

 

이제 ec2 instance에 들어가서 마지막 작업을 해야합니다. 

인스턴스에 접근하여 아래의 명령어를 입력하여 세팅을 해줍니다. 

# aws에서 제공하는 efs-utils를 설치합니다. 
# 이 모듈을 설치하면 더 쉽게 사용할 수 있습니다. 

# 먼저 efs-utils 파일을 받습니다. 
git clone https://github.com/aws/efs-utils

# 다운로드 받은 efs-utils 파일 경로에 접근합니다. 
# 받은 파일 안에서 build를 하게 됩니다. 
cd ./efs-utils
sudo apt-get -y install binutils
./build-deb.sh
sudo apt-get update
sudo apt-get -y install ./build/amazon-efs-utils*deb

# 임의로 efs 경로를 만들어서 사용합니다. 
cd ../
mkdir efs

# 이 명령어로 실제로 efs 서비스와 위에서 생성한 efs 경로가 연결이 됩니다. 
# "fs-64a2fc05"는 efs 대시보드에 들어가서 efs의 dns이름을 사용하시면 됩니다. 
sudo mount -t efs fs-64a2fc05:/ efs

마지막에 사용되는 명령어는 아래의 이미지에서 참조하여 사용하면 됩니다. 

 

** default vpc를 사용하고 있는 경우 여기까지 하면 동작을 하는 것이 맞지만 

별도로 vpc를 구성하였다면 동작을 하지 않는것이 맞습니다. 

 

여기서 별도로 구성한 vpc에서 dns 설정을 해주어야 합니다. 

vpc를 별도로 구성하였다면 높은 확률로 위와같이 "DNS 호스트 이름"이 "비활성화 됨"으로 되어있을 것입니다. 

efs 명령어를 사용하여 ec2 instance와 efs를 연결할 때 사용하는 efs의 dns이름을 사용할 수 있으려면 

vpc에서 dns 호스트 이름을 활성화 해주어야 합니다. 

 

vpc 대시보드에서 생성한 vpc를 선택하여 "DNS 호스트 이름 편집"을 선택하여 페이지를 이동합니다. 

 

위와같이 "DNS 호스트 이름"을 "활성화"로 만들어줍니다. 

 

설정을 하기전에는 위와같이 에러가 나지만

설정을 하게 되면 에러 없이 진행됩니다.

("DNS 호스트 이름" 설정을 변경하면 바로 반영되지 않고 1~2분 정도 소요됩니다. )

 

이렇게 간단하게 efs 서비스를 사용하여 ec2 instance에 연결하는 방법에 대해 알아보았습니다.