티스토리 뷰

개요

  • Metabase는 다양한 데이터 소스로부터 데이터 시각화 기능을 제공하는 오픈 소스 BI 솔루션이다. 이번 글에서는 Metabase 설치형 도커 이미지를 기반으로 Amazon ECS에 서비스를 기동하는 방법을 설명하고자 한다. (예제에 나오는 foobar 네이밍은 하나의 예로서 다른 문자열을 사용해도 무방하다.)

사전 지식

Metabase 로컬 실행

  • 아래는 Metabase를 로컬에서 실행하는 예이다. MetabaseAmazon Athena를 공식으로 지원하지 않아 써드파티 Amazon Athena 드라이버를 포함해서 도커 이미지를 새로 빌드하는 방법을 이용했다.
# metabase 도커 이미지에 써드파티 Amazon Athena 드라이버를 추가
$ notepad Dockerfile
FROM metabase/metabase:v0.38.0.1
ADD --chown=2000:2000 \
    https://github.com/dacort/metabase-athena-driver/releases/download/v1.2.0-pre1/athena.metabase-driver.jar \
    /plugins/athena.metabase-driver.jar

# 추가된 도커 이미지를 빌드
$ docker build -f Dockerfile -t foobar-metabase .

# 3000 포트로 로컬에서 실행
$ docker run --name foobar-metabase -p 3000:3000 foobar-metabase
  • 로컬에서 도커 컨테이너 실행 후 브라우저에서 http://localhost:3000 주소로 접속이 가능하다.

Metabase 이미지 ECR 업로드

  • 아래는 운영 환경에서 안정적인 배포를 위해서 앞서 빌드한 도커 이미지를 Amazon ECR에 업로드하는 예이다.
$ aws ecr get-login-password --region {region}
{login-password}

$ docker login -u AWS -p {login-password} *****.dkr.ecr.{region}.amazonaws.com

$ docker tag foobar-metabase:latest *****.dkr.ecr.{region}.amazonaws.com/foobar-metabase:prod

$ docker push *****.dkr.ecr.{region}.amazonaws.com/foobar-metabase:prod

Metabase 데이터베이스 EFS 생성

  • Metabase는 환경 설정 등을 저장할 데이터베이스로 H2를 기본값으로 사용한다. 아래는 이러한 데이터베이스를 영구적으로 보존하기 위해 Amazon EFS를 생성하는 예이다.
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭 → [파일 시스템 생성] 클릭
→ 이름: foobar-metabase-prod (입력)
→ Virtual Private Cloud(VPC): [foobar-prod] 선택 (마운트할 인스턴스가 속한 VPC 선택)
→ [생성] 버튼 클릭
  • EFS 생성 후 액세스 포인트를 생성할 차례이다.
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭
→ [foobar-metabase-prod] 클릭
→ [액세스 포인트] 클릭
→ [액세스 포인트 생성] 버튼 클릭

# 액세스 포인트 생성 > 세부 정보
→ 이름: metabase-db (입력)
→ 루트 디렉토리 경로: /metabase.db (입력)

# 액세스 포인트 생성 > POSIX 사용자
→ 사용자 ID: 2000 (입력)
→ 그룹 ID: 2000 (입력)

# 액세스 포인트 생성 > 루트 디렉터리 생성 권한
→ 소유자 사용자 ID: 2000 (입력)
→ 소유자 그룹 ID: 2000 (입력)
→ 권한: 0755 (입력)

→ [액세스 포인트 생성] 클릭

Metabase ECS 작업 정의 생성

  • 업로드된 도커 이미지와 EFS를 이용하여 Amazon ECS에 작업 정의를 생성할 차례이다.
Amazon ECS 콘솔 접속 → 작업 정의 → [새 작업 정의 생성] 클릭 → [FARGATE] 클릭
→ 작업 정의 이름: foobar-metabase-prod (입력)
→ 작업 역할: [ecsTaskExecutionRole] 선택
→ 네트워크 모드: [awsvpc] 선택
→ 작업 메모리(GB): [8GB] 선택
→ 작업 CPU(vCPU): [2 vCPU] 선택

# 볼륨 추가
→ [볼륨 추가] 클릭
→ 이름: foobar-metabase-prod
→ 볼륨 유형: [EFS] 선택
→ 파일 시스템 ID: [foobar-metabase-prod] 선택
→ Access point ID: [metabase-db] 선택
→ [추가] 클릭

# 컨테이너 추가
→ [컨테이너 추가] 클릭
→ 컨테이너 이름: foobar-metabase-prod
→ 이미지: *****.dkr.ecr.{region}.amazonaws.com/foobar-metabase:prod (입력)
→ 포트 매핑: 3000/TCP

# 작업 및 컨테이너 정의 구성
→ [생성] 클릭

# 컨테이너 추가 > 스토리지 및 로깅
→ 탑재 지점
→ 소스 볼륨: foobar-metabase-prod (작업 정의에서 추가한 EFS 볼륨을 선택)
→ 컨테이너 경로: /metabase.db (컨테이너에서 EFS 볼륨을 마운트할 경로 입력)
→ [추가] 클릭

Metabase 대상 그룹 생성

  • 이제 Metabase의 서비스 리스닝 포트인 3000 포트에 대한 대상 그룹을 생성할 차례이다.
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [대상 그룹] 클릭
→ [Create target group] 클릭
→ Choose a target type: [IP addresses] 선택
→ Target group name: foobar-metabase-prod-public-3000 (대상 그룹 이름)
→ Protocol: [HTTP] 선택 (로드 밸런싱할 프로토콜)
→ Port: 3000 (로드 밸런싱할 포트)
→ VPC: [foobar-prod] 선택
→ Health check protocol: HTTP
→ [Next] 클릭
→ [Create target group] 클릭

Metabase 퍼블릭 로드 밸런서 생성

  • 앞서 생성한 대상 그룹을 이용하여 퍼블릭 로드 밸런서를 생성할 차례이다.
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [로드밸런서] 클릭
→ [Load Balancer 생성] 클릭
→ Load Balancer 유형 선택: [Application Load Balancer] 생성

# 기본 구성
→ 이름: foobar-metabase-prod-public (입력)
→ 체계: [인터넷 경계] 선택

# 리스너
→ Load Balancer 프로토콜: [HTTPS] 선택 (리스닝할 프로토콜) → Load Balancer 포트: 443 (입력) 

# 가용 영역
→ VPC: [foobar-prod] 선택 (로드 밸런싱할 대상 인스턴스 위치한 VPC 선택)
→ 가용 영역: [ap-northeast-2a] 체크 → [foobar-prod-public-1] 선택
→ 가용 영역: [ap-northeast-2b] 체크 → [foobar-prod-public-2] 선택
→ 가용 영역: [ap-northeast-2c] 체크 → [foobar-prod-public-3] 선택

# 보안 설정 구성
→ 인증서 유형: [ACM에서 인증서 선택] 선택
→ 인증서 이름: [*.foobar.com] 선택
→ 보안 정책: [ELBSecurityPolicy-FS-1-2-RES-2020-10] 선택
→ [다음: 보안 그룹 구성] 클릭

# 보안 그룹 구성
→ 보안 그룹 할당: [기존 보안 그룹 선택] 체크 -> [foobar-prod-metabase] 체크
→ [다음: 라우팅 구성] 클릭

# 라우팅 구성
→ 대상 그룹: [기존 대상 그룹] 선택
→ 이름: [foobar-metabase-public-prod-3000] 선택
→ [다음: 대상 등록] 클릭

# 대상 등록
→ [다음: 검토] 클릭

# 검토
→ [생성] 클릭

Metabase ECS 서비스 생성 및 실행

  • Metabase를 기동하기 위한 선행 조건을 모두 완료했다. 이제 마지막으로 Amazon ECS 서비스를 생성하고 실행할 차례이다.
Amazon ECS 콘솔 접속 → 클러스터 → 서비스를 생성할 클러스터 클릭 → [서비스] 클릭 -> [생성] 클릭

# 서비스 구성
→ 시작 유형: [FARGATE] 선택
→ 작업 정의: foobar-metabase-prod
→ 버전: 1 (latest)
→ 플랫폼 버전: [1.4.0] 선택
→ 클러스터: [foobar-prod] 선택
→ 서비스 이름: foobar-metabase-prod (입력)
→ 작업 개수: 1 (입력)
→ 최소 정상 상태 백분율: 100 (입력)
→ 최대 백분율: 200 (입력)
→ 배포 유형: [롤링 업데이트] 선택
→ [다음 단계] 클릭

# 네트워크 구성
→ 클러스터 VPC: [foobar-prod] 선택
→ 서브넷: [foobar-prod-private-1], [foobar-prod-private-2], [foobar-prod-private-3] 선택
→ 보안 그룹: [foobar-prod-api], [foobar-prod-efs-access] 선택
→ 자동 할당 퍼블릭 IP: [DISABLED] 선택
→ 로드 밸런서 유형: [Application Load Balancer] 선택
→ 로드 밸런서 이름: [foobar-metabase-prod-public] 선택
→ 컨테이너 선택: [foobar-metabase-prod:3000:3000] 선택 → [로드 밸런서에 추가] 클릭
→ 프로덕션 리스너 포트: [443:HTTPS] 선택
→ 대상 그룹 이름: [foobar-metabase-prod-public-3000] 선택
→ [다음 단계] 클릭

# Auto Scaling
→ 서비스 Auto Scaling: [서비스 Auto Scaling을 구성하여 원하는 서비스 개수를 조정합니다.] 선택
→ 최소 작업 개수: 1
→ 최대 작업 개수: 2
→ 조정 정책 유형: [대상 추적] 선택
→ 정책 이름: foobar-metabase-prod (입력)
→ ECS 서비스 측정치: [ECSServiceAverageCPUUtilization] 선택
→ 대상 값: 70 (입력)
→ [다음 단계] 클릭

# 검토
→ [서비스 생성] 클릭

참고 글

댓글
댓글쓰기 폼