ec2 2대로 로드밸런싱을 하고 있던 운영 서버에서 파일 업로드가 제대로 안되고 있다고 확인 요청이 왔습니다.
확인 해본 결과 업로드 한 임시파일을 찾지 못해서 생기는 오류 였습니다.
현재 파일을 저장 하는 순서는 아래와 같습니다.
1. 파일 업로드 시 ec2 로컬 디렉토리에 meta data 파일을 임시저장
2. 저장 api 호출 시 meta data 조회 후 실제 db에 저장
was1 was2 가 있다고 가정해봅시다.
위 1번 작업을 was1 에서 진행 하고 저장 api 호출 할 때 로드밸런싱에서 was2로 밸런싱 하게 되면 1번에서 저장한 임시파일을 조회 할 수 없어서 파일을 저장할 수 없게 됩니다
여기서 고민을 했던 선택지는 2가지 였습니다
로드밸런싱 옵션을 Sticky Session로 바꾸게 되면 과부하를 줄여주는 로드밸런싱의 사용 의미와 멀어지게 되는거라서 NFS를 채택했고, 그중 아마존에서 서비스 하는 EFS를 사용하기로 했습니다
AWS 클라우드 서비스와 온프레미스 리소스에서 사용할 수 있는 간단하고 확장 가능하며 탄력적인 파일 스토리지를 제공하는 서비스
마운트 할 ec2 에서 사용하는 vpc를 선택하고 인바운드 규칙으로 ec2에서 사용중인 보안그룹을 추가해줍니다.


성능 및 옵션, 요금은 공식 홈페이지를 참조
https://aws.amazon.com/ko/efs/features/
https://aws.amazon.com/ko/efs/pricing/
여기서 자세히 볼 부분은 네트워크 입니다. 1번에서 생성한 보안그룹(EFS-TEST)을 마운트 할 ec2가 위치하는 가용영역 마다 추가해주시면 됩니다.


마운트 할 EC2의 보안그룹에 1번에서 생성 한 보안그룹을 추가해줍니다.

생성한 EFS 파일시스템 상세 -> 연결 버튼 클릭

DNS 탑재, IP 탑재 방식 중 선택


EFS의 탑재 헬퍼를 사용하려면 amazon-efs-utils 패키지를 설치 해야합니다.
설치 후 마운트 할 디렉토리 생성 후 위에서 확인 한 명령어로 마운트 시켜줍니다.
yum install -y amazon-efs-utils
sudo apt install git
git clone https://github.com/aws/efs-utils
sudo apt install -y binutils
cd efs-utils
./build-deb.sh
sudo apt install ./build/amazon-efs-utils*deb
Ubuntu 14버전 이하는 종속성 문제로 설치가 되지 않는것으로 확인 됐습니다. 버전이 낮은 Ubuntu를 사용중이신 분은 EFS 헬퍼가 아닌 nfs-common 설치 후 마운트 진행하시면 됩니다
apt-get install nfs-common
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport {{ip}}:/ /{{mount-directory}}