티스토리 뷰

RabbitMQ 변경 이력

  • 3.3.0 버전부터 기본 어드민 계정인 guest/guest 계정의 웹 콘솔 로그인이 로컬로 제한되도록 변경되었다.

대상 그룹 생성

  • AWS Fargate 서비스로 생성되어 실행되는 RabbitMQ 컨테이너는 생성 시점마다 IP 주소가 변경된다. NLB를 생성하면 고정된 도메인 주소를 제공할 수 있다. 이를 위해 사전에 아래와 같이 5672, 15672번 포트에 대한 대상 그룹을 생성한다.
# 5672번 포트 대상 그룹 생성
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [대상 그룹] 클릭
→ [Create target group] 클릭
→ Choose a target type: [IP addresses] 선택
→ Target group name: foobar-broker-prod-5672 (대상 그룹 이름)
→ Protocol: HTTP (로드 밸런싱할 프로토콜)
→ Port: 5672 (로드 밸런싱할 포트)
→ VPC: [foobar-prod] 선택
→ Health check protocol: TCP
→ [Next] 클릭
→ [Create target group] 클릭

# 15672번 포트 대상 그룹 생성
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [대상 그룹] 클릭
→ [Create target group] 클릭
→ Choose a target type: [IP addresses] 선택
→ Target group name: foobar-broker-prod-15672 (대상 그룹 이름)
→ Protocol: HTTP (로드 밸런싱할 프로토콜)
→ Port: 15672 (로드 밸런싱할 포트)
→ VPC: [foobar-prod] 선택
→ Health check protocol: TCP
→ [Next] 클릭
→ [Create target group] 클릭

NLB 로드 밸런서 생성

  • 이제 고정된 도메인 주소를 제공하기 위한 NLB 로드 밸런서를 생성할 차례이다.
Amazon EC2 콘솔 접속
→ [로드밸런싱] → [로드밸런서] 클릭
→ [Load Balancer 생성] 클릭
→ Load Balancer 유형 선택: [Network Load Balancer] 생성

# 기본 구성
→ 이름: foobar-broker-prod (입력)
→ 체계: [내부] 선택

# 리스너
→ Load Balancer 프로토콜: [TCP] 선택 (리스닝할 프로토콜) → Load Balancer 포트: 5672 (입력) 
→ [리스너 추가] 클릭→ Load Balancer 프로토콜: [TCP] 선택 (리스닝할 프로토콜) → Load Balancer 포트: 15672 (입력)

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

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

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

# 검토
→ [생성] 클릭

EFS 생성

  • 컨테이너 기동시 미리 완성된 RabbitMQ의 환경 설정을 제공하기 위해 EFS를 아래와 같이 생성한다.
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭 → [파일 시스템 생성] 클릭
→ 이름: foobar-broker-prod (입력)
→ Virtual Private Cloud(VPC): [foobar-prod] 선택 (마운트할 인스턴스가 속한 VPC 선택)
→ [생성] 버튼 클릭
  • 다음으로 액세스 포인트를 생성한다.
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭
→ [foobar-broker-prod] 클릭
→ [액세스 포인트] 클릭
→ [액세스 포인트 생성] 버튼 클릭

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

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

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

→ [액세스 포인트 생성] 클릭
  • 다음으로 EFS 탑재 대상을 생성한다. (탑재 대상 생성을 누락할 경우 마운트 시점에 check that your file system ID is correct. 오류가 발생한다.)
Amazon EFS 콘솔 접속 → [파일 시스템] 클릭
→ [foobar-broker-prod] 클릭
→ [네트워크] 클릭
→ [탑재 대상 생성] 버튼 클릭

# 가용 영역
→ Virtual Private Cloud(VPC): [foobar-prod] 선택
→ [탑재 대상 추가] 클릭→ 가용 영역: [ap-northeast-2a] 선택 → 서브넷 ID: [foobar-prod-private-1] 선택 → 보안 그룹: [foobar-prod-efs-access] 선택
→ [탑재 대상 추가] 클릭→ 가용 영역: [ap-northeast-2b] 선택 → 서브넷 ID: [foobar-prod-private-2] 선택 → 보안 그룹: [foobar-prod-efs-access] 선택
→ [탑재 대상 추가] 클릭→ 가용 영역: [ap-northeast-2c] 선택 → 서브넷 ID: [foobar-prod-private-3] 선택 → 보안 그룹: [foobar-prod-efs-access] 선택
→ [저장] 클릭

EFS에 Rabbit 환경 설정 작성

  • 커뮤니티에서 제공하는 rabbitmq 도커 이미지는 환경 변수 구성이 부족한 점이 많다. 이를 극복하기 위해 EFS를 생성했으며, EFS와 같은 VPC에 위치한 EC2 인스턴스에서 아래와 같이 마운트하여 환경 설정을 완료한다.
$ mkdir ~/etc-rabbitmq

$ sudo mount -t efs -o tls,accesspoint=fsap-00dc418553a110643 fs-8ae18819: ~/etc-rabbitmq

$ cd ~/etc-rabbitmq

$ sudo nano rabbitmq.conf
default_user = foobar
default_pass = foobar123456
loopback_users = none
listeners.tcp.default = 5672
management.tcp.port = 15672
management.tcp.ip = 0.0.0.0
cluster_name = foobar-broker-prod

# 빌트인 플러그인 활성화
$ sudo nano enabled_plugins
[rabbitmq_management,rabbitmq_prometheus].
  • 도커 컨테이너를 어떤 환경 변수도 없이 기동하면 로컬에서만 웹 콘솔에 로그인 가능한 guest/guest 계정이 활성화되는데 default_user, default_pass를 별도로 설정하여 어드민 권한의 사용자 계정을 생성하였다.
  • 도커 컨테이너를 기동했을 때 컨테이너 외부에서는 웹 콘솔에 접근할 수 있는 방법이 없기 때문에 loopback_users = none 옵션을 설정하여 원격지에서 지정된 사용자 계정으로 웹 콘솔에 로그인 가능하도록 설정하였다.
  • enabled_plugins 파일에 빌트인 플러그인을 명시하면 도커 컨테이너 기동시 해당 플러그인이 활성화된다.
  • rabbitmq_prometheus 플러그인을 활성화하면 Prometheus에서 수집 가능한 형태의 http://{rabbitmq}:15692/metrics 엔드포인트를 활성화해준다. 플러그인 활성화 여부를 확인하려면 아래와 같이 엔드포인트에 요청하여 알 수 있다.
$ curl -s localhost:15692/metrics

ECS 작업 정의 생성

  • 이제 ECS 작업 정의를 생성할 차례이다.
Amazon ECS 콘솔 접속 → 작업 정의 → [새 작업 정의 생성] 클릭 → [FARGATE] 클릭
→ 작업 정의 이름: foobar-broker-prod (입력)
→ 작업 역할: [ecsTaskExecutionRole] 선택
→ 네트워크 모드: [awsvpc] 선택
→ 작업 메모리(GB): [16GB] 선택
→ 작업 CPU(vCPU): [4 vCPU] 선택

# 볼륨 추가
→ [볼륨 추가] 클릭
→ 이름: foobar-broker-prod
→ 볼륨 유형: [EFS] 선택
→ 파일 시스템 ID: [foobar-broker-prod] 선택
→ Access point ID: [etc-rabbitmq] 선택
→ [Enable transit encryption] 체크
→ [추가] 클릭

# 컨테이너 추가
→ [컨테이너 추가] 클릭
→ 컨테이너 이름: foobar-broker-prod
→ 이미지: docker.io/rabbitmq:3-management-alpine (입력)
→ 포트 매핑: 5672/TCP, 15672/TCP

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

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

참고 글

댓글
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함