[AWS] EFS - 웹 자동화
EFS(Elastic File System)란?
AWS EFS는 클라우드 기반의 관리형 파일 시스템 서비스로
여러 EC2 인스턴스에서 동시에 공유할 수 있는 파일 스토리지를 제공
저는 다른 가용 영역에 있는 웹 인스턴스끼리의 자동화를 위해서 efs를 사용해주도록 하겠습니다.
(기본 구성으로 가용영역 a에 web1 인스턴스 가용영역 b에 web2 인스턴스 생성)
1. EFS 파일 시스템 생성
vpc-1 선택,가용영역을 2a, 2b 선택.
sg는 사전에 만들어둔 for-efs를 넣어줌.
사전에 만들어둔 sg 내용.
Network File System(NFS) 포트번호 2049
source에 web1의 sg를 선택해야함
2. EFS 마운트
1) DNS name 을 확인 할 수 있다.
생성된 filesystem 상세페이지에서 attach를 눌러서 efs를 mount 하는 명령어 복사 가능
2) cli 접속
sudo apt update
sudo apt install - y nfs-common
sudo mkdir /mnt/efs
sudo apt-get install awscli -y
// mount : 파일 시스템을 특정 디렉토리에 연결하거나 마운트하는 작업
sudo mount -t nfs4 -o nfsvers=4.1,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport fs-01f288ad2206de817.efs.ap-northeast-2.amazonaws.com:/ /mnt/efs
df -h 명령어로 마운트 확인
sudo cp -r /var/www/html/* /mnt/efs/
3. 웹 root 디렉토리 경로 변경
vi /etc/nginx/sites-available/default
root 경로를 /mnt/efs 로 변경해줌.
4. 동기화 스크립트 작성
vi /etc/fstab
/etc/fstab 파일은 리눅스 시스템에서 부팅 시 자동으로 마운트할 파일 시스템을 설정하는 파일
fs-01f288ad2206de817.efs.ap-northeast-2.amazonaws.com:/ /mnt/efs nfs defaults,_netdev 0 0
마운트 명령어를 재부팅 파일에 넣어서시스템 부팅 시자동으로 마운트 되도록 설정
sudo chown -R www-data:www-data /mnt/efs
sudo apt-get install inotify-tools rsync
inotify-tools: 파일 시스템 이벤트를 모니터링할 수 있는 유틸리티 모음
rsync: 파일을 효율적으로 전송하고 동기화하는 유틸리티
vi /usr/local/bin/sync_web_changes.sh
- 변경사항이 생길때마다실시간으로 동기화되는 로직
WEB_DIR="/mnt/efs"-> 웹 애플리케이션 코드가 위치한 디렉토리
WEB2_HOST="43.202.155.78"
-> 동기화할 인스턴스 지정
sync_changes 함수는 변경 사항을 감지하고 해당 파일을 rsync를 사용하여 웹2 인스턴스로 동기화
local file="$1" 첫번째 인자 저장
${file}: 변경된 파일의 경로
-e ssh: SSH 프로토콜을 사용하여 전송.
-avz: 파일을 재귀적으로 전송하고, 전송 상세 내역을 출력하며, 파일 압축을 사용하여 전송.
5. 확인
web1에서 변경을 주고 web2로 접속해보면 정상적으로 변경이 되었음을 확인 가능.