서비스를 운영하다보면 다양한 요구사항이 있습니다.
예를들어 컨테이너를 운영하기 위한 설정 파일을 미리 공유하고 싶은 경우, 컨테이너에서 발생하는 로그를 별도의 파일 저장소에서 관리하고 싶은 경우 등 여러가지 상황이 존재 합니다.
일반적인 EC2 인스턴스에서 서비스를 배포중이면 EBS 서비스를 이용하여 중요한 데이터를 보존할 수 있습니다.
Elastic File System
을 사용하여 이 문제를 해결할 수 있습니다.
컨테이너 환경인 ECS Fargate에서는 EBS를 지원하지 않습니다.
AWS VPC내의 지정된 가용영역에 배치되는 파일 시스템입니다.
EFS는 다음과 같은 장점을 가지고 있습니다.
Nginx 컨테이너를 이용해서 EFS를 적용 해보겠습니다.
nginx는 초기 페이지의 기본 경로를 /usr/share/nginx/html
를 이용하고 있습니다.
Fargate 내부의 nginx 컨테이너의 /usr/share/nginx/html
디렉토리를 EFS의 /bsdata/nginx/html
이라는 디렉토리에 마운트 하여 index.html 을 EFS에 직접 업데이트 하고 변화를 확인합니다.
ECS Fargate를 생성하는 과정은 생략합니다.
별도의 설정이 부여되지 않은 Nginx 컨테이너를 이용하여 Fargate mount EFS를 확인합니다.
NFS 포트를 사용하므로, EFS에 사용하기 위한 보안그룹을 생성합니다.
보안그룹의 인바운드 규칙으로 2049 포트를 허용합니다.
이름은 test
로 EFS를 생성합니다.
다른 옵션은 그래도 두고서 EFS를 생성합니다.
위에서 생성한 인바운드 (NFS) 2049 포트가 허용된 보안그룹을 적용합니다.
EFS 액세스 포인트는 파일 시스템에 마운트된 유저가 사용하는 기본 경로가 되는 지점을 생성하는 과정입니다.
액세스 포인트는 POSIX 사용자 구조를 그대로 이용할 수 있도록 설정할 수 있어, Fargate 생성 전, 로컬 영역에서 이미지를 배포하고, 마운트 하고자하는 파일의 소유자의 ID를 기억하는 것이 중요합니다.
로컬에서 Docker 를 이용하여 Nginx의
/usr/share/nginx/html
의 소유권 확인합니다.
id : root / gid : root / 권한 : 755
인 것을 확인할 수 있습니다.
이름을 기입하고, 마운트 시 기본 디렉터리로 사용할 경로를 기입합니다.
마운트 과정 중 폴더가 존재 하지 않을 경우 간혹 에러가 발생할 수 있습니다.
이러한 문제를 미연에 방지하기 위해 루트 권한으로 생성할 수 있도록 설정합니다.
Nginx 서비스에 명시된 작업 정의를 수정합니다.
Volume 추가
액세스 포인트 지정시 루트 디렉터리는 액세스 포인트의 루트 디렉토리로 자동으로 매칭 됩니다.
컨테이너 마운트
탑재 지점을 컨테이너에서 마운트 하고자 하는 경로를 지정합니다.
EC2에 동일한 EFS를 마운트해서 파일 시스템이 의도한 바와 같이 동작 중인지 확인합니다.
Fargate의 퍼블릭 IP로 접속할 경우 403 Forbidden
이 출력됩니다.
EC2를 생성하여 EFS를 마운트하고, index.html을 EFS에 직접 만들어 보겠습니다.
Amazon Linux 2 AMI를 사용할 경우 EFS 클라이언트를 손쉽게 설치할 수 있습니다.
# EFS 클라이언트 설치
sudo yum install -y amazon-efs-utils
# EFS 마운트 폴더 생성
mkdir efs
# EFS를 efs 폴더에 마운트
sudo mount -t efs -o tls < efs의 id > efs
하위 경로를 확인하면 마운트 폴더가 생성되어 있는것을 확인할 수 있습니다.
마운트 경로에서 index.html 파일을 생성 합니다.
vi bsdata/nginx/html/index.html
아래 내용을 기입하고 저장합니다.
# index.html
<html>
<body>
<h1> EFS Mount is Working !!! </h1>
</body>
</html>
다시 페이지를 확인하면 index.html의 내용을 확인할 수 있습니다.
Nginx 컨테이너를 이용해서 Fargate 시스템에서 EFS를 마운트하고 이를 확인하며 동작을 구현했습니다.
다양한 서비스에 적용하여 컨테이너로 관리하는 인프라를 구축하고, 중요한 파일을 관리할 수 있습니다.