[AWS] EFS Mount @Fargate

xgro·2023년 2월 9일
1

AWS

목록 보기
12/19
post-thumbnail

📌 Summary

  • ECS 컨테이너 환경에서 Fargate와 EFS 볼륨을 마운트합니다.
  • 예상하지 못한 상황에서 태스크가 중단되어도 중요한 파일을 유지 보존 할 수 있습니다.

📌 Fargate mount EFS

서비스를 운영하다보면 다양한 요구사항이 있습니다.

예를들어 컨테이너를 운영하기 위한 설정 파일을 미리 공유하고 싶은 경우, 컨테이너에서 발생하는 로그를 별도의 파일 저장소에서 관리하고 싶은 경우 등 여러가지 상황이 존재 합니다.

일반적인 EC2 인스턴스에서 서비스를 배포중이면 EBS 서비스를 이용하여 중요한 데이터를 보존할 수 있습니다.

Elastic File System 을 사용하여 이 문제를 해결할 수 있습니다.

컨테이너 환경인 ECS Fargate에서는 EBS를 지원하지 않습니다.

👉 EFS란?

AWS VPC내의 지정된 가용영역에 배치되는 파일 시스템입니다.

EFS는 다음과 같은 장점을 가지고 있습니다.

  • 99.999999999%(9가 11개)의 내구성과 최대 99.99%(9가 4개)의 가용성을 제공하도록 설계되었고 완전관리형 파일 시스템을 통해 안전하고 안정적으로 파일에 액세스 합니다.
  • 스토리지 및 성능이 완전 탄력적이므로, 용량에 대해서 미리 선점할 필요가 없습니다.
  • 사용한 스토리지에 대한 요금만 지불하면 되며, 자주 액세스 하지 않는 파일을 자동으로 이동하여 비용을 절감하여 운영할 수 있습니다.
  • 운영체제의 File 관리 체계와 동등한 수준으로 (POSIX) 권한을 통해 파일 시스템에 대한 액세스를 제어할 수 있습니다.

📌 Mount Container

Nginx 컨테이너를 이용해서 EFS를 적용 해보겠습니다.

nginx는 초기 페이지의 기본 경로를 /usr/share/nginx/html 를 이용하고 있습니다.

Fargate 내부의 nginx 컨테이너의 /usr/share/nginx/html 디렉토리를 EFS의 /bsdata/nginx/html이라는 디렉토리에 마운트 하여 index.html 을 EFS에 직접 업데이트 하고 변화를 확인합니다.

👉 EFS 사용하기 전 준비 사항

ECS Fargate를 생성하는 과정은 생략합니다.

별도의 설정이 부여되지 않은 Nginx 컨테이너를 이용하여 Fargate mount EFS를 확인합니다.

NFS 포트를 사용하므로, EFS에 사용하기 위한 보안그룹을 생성합니다.

보안그룹의 인바운드 규칙으로 2049 포트를 허용합니다.

Step 01. EFS 생성

이름은 test로 EFS를 생성합니다.

다른 옵션은 그래도 두고서 EFS를 생성합니다.

✅ Step 02. EFS 보안그룹 적용

위에서 생성한 인바운드 (NFS) 2049 포트가 허용된 보안그룹을 적용합니다.

Step 03. EFS 액세스 포인트 생성

EFS 액세스 포인트는 파일 시스템에 마운트된 유저가 사용하는 기본 경로가 되는 지점을 생성하는 과정입니다.

액세스 포인트는 POSIX 사용자 구조를 그대로 이용할 수 있도록 설정할 수 있어, Fargate 생성 전, 로컬 영역에서 이미지를 배포하고, 마운트 하고자하는 파일의 소유자의 ID를 기억하는 것이 중요합니다.

로컬에서 Docker 를 이용하여 Nginx의 /usr/share/nginx/html 의 소유권 확인합니다.

id : root / gid : root / 권한 : 755 인 것을 확인할 수 있습니다.

이름을 기입하고, 마운트 시 기본 디렉터리로 사용할 경로를 기입합니다.

마운트 과정 중 폴더가 존재 하지 않을 경우 간혹 에러가 발생할 수 있습니다.

이러한 문제를 미연에 방지하기 위해 루트 권한으로 생성할 수 있도록 설정합니다.

Step 04. Task-definition 수정

Nginx 서비스에 명시된 작업 정의를 수정합니다.

Volume 추가
액세스 포인트 지정시 루트 디렉터리는 액세스 포인트의 루트 디렉토리로 자동으로 매칭 됩니다.

컨테이너 마운트

탑재 지점을 컨테이너에서 마운트 하고자 하는 경로를 지정합니다.

(Advanced) EC2 마운트

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의 내용을 확인할 수 있습니다.


📌 Conclusion

Nginx 컨테이너를 이용해서 Fargate 시스템에서 EFS를 마운트하고 이를 확인하며 동작을 구현했습니다.

다양한 서비스에 적용하여 컨테이너로 관리하는 인프라를 구축하고, 중요한 파일을 관리할 수 있습니다.


📌 Reference

profile
안녕하세요! DevOps 엔지니어 이재찬입니다. 블로그에 대한 피드백은 언제나 환영합니다! 기술, 개발, 운영에 관한 다양한 주제로 함께 나누며, 더 나은 협업과 효율적인 개발 환경을 만드는 과정에 대해 인사이트를 나누고 싶습니다. 함께 여행하는 기분으로, 즐겁게 읽어주시면 감사하겠습니다! 🚀

0개의 댓글