[AWS] Kafka Client (feat. Private Subnet EC2 - SSM 접속)

yong·2025년 9월 7일

Kafka Broker와 Kafka Client

카프카 브로커 (서버)

모든 프로듀서와 컨슈머로부터 오는 데이터를 받고, 디스크에 저장하고, 복제하고, 파티션을 관리하는 등 모든 무거운 작업을 처리하는 서버 역할 (일꾼)

수많은 연결을 동시에 처리하고 디스크 I/O를 빠르게 수행하기 위해 많은 메모리(RAM), 빠른 디스크(SSD), 여러 개의 CPU 코어가 필수적이다.

현재 프로젝트에서는 MSK가 브로커 역할을 하고 있다.

카프카 클라이언트 (프로듀서/컨슈머)

카프카 브로커에 접속해서 데이터를 보내거나(Produce), 데이터를 받는(Consume) 요청을하고 응답을 받는 역할 (손님)

단순히 데이터를 보내고 받는 역할 자체는 리소스를 거의 사용하지 않기 때문에 사양에 크게 구애받지 않는다. (클라이언트가 받아온 데이터를 가지고 무슨 일을 하느냐에 따라 결정할 문제)

현재 프로젝트에서는 아래에서 만들 EC2가 클라이언트 역할을 하게 된다.

🤔 '카프카를 돌리기 위해서는 고사양이 필요하다?'
이는 브로커에 해당하는 말로, 현재 프로젝트에서는 이 역할을 MSK에게 맡겼기 때문에 직접 고사양 서버를 관리할 필요가 없다.

EC2 생성

인스턴스 유형
카프카 클라이언트(컨슈머) 역할을 하는 EC2이므로 아주 고사양일 필요는 없고, 테스트용이기 때문에 t2.micro로 선택했다.

네트워크 설정
MSK 클러스터와 동일한 내부망에 있어야 직접 통신이 가능하므로 이전 포스트에서 생성한 vpc의 private 서브넷에 생성한다.

  • VPC : 생성한 VPC 선택 (fms-project-vpc)
  • 서브넷 : 'Private' 서브넷 중 하나를 선택
  • 퍼블릭 IP 자동 할당 : '비활성화' (Private Subnet에 있으므로 공인 IP가 필요 없음)
  • 방화벽 (보안 그룹) : 기존 보안 그룹에서 클라이언트용으로 만들었던 보안 그룹 선택(fms-client-sg)

EC2 접속을 위한 IAM Role 생성

Private Subnet에 EC2를 생성했기 때문에 외부 인터넷과 직접 연결된 IP 주소가 없으므로 일반적인 SSH 방식으로는 접속할 수 없다.

따라서 AWS Systems Manager Sessioin Manager를 이용해서 SSH 키 페어 없이 브라우저나 터미널을 통해 비공개 인스턴스에 접속해야 한다.

AWS Systems Manager Sessioin Manager를 사용하기 위해서는 EC2 인스턴스에 접속 권한을 부여하는 IAM 역할이 필요하다.

1. EC2 접속용 IAM 역할 생성

사용사례

  • EC2를 선택해도 되지만 이는 “EC2 인스턴스가 사용할 역할을 만들겠다." 라는 가장 기본적인 선택지로, 사용자가 직접 필요한 권한 정책(예: S3 접근 권한, DynamoDB 접근 권한 등)을 수동으로 검색해서 추가해야 한다.

  • EC2 Role for AWS Systems Manager 는 "EC2 인스턴스가 Systems Manager를 사용하기 위한 역할을 만들겠다." 라는 명확한 목적을 가진 '템플릿'과 같은 것으로 EC2를 선택하면 직접 검색해서 추가해야 했던 AmazonSSMManagedInstanceCore 정책이 이미 자동으로 선택되어 있으므로 더 적합한 선택지이다.

    이름(fms-ec2-ssm-role)만 지정하고 나머지 설정은 건드리지 않은 상태로 역할을 생성한다.

2. 생성한 IAM 역할을 EC2 인스턴스에 연결

SSM으로 EC2 접속

⚠️ 2번 과정을 통해 EC2에 SSM 접속이 가능해졌다. 하지만 SSM 연결을 하려고 보니 다음과 같은 에러가 뜨면서 연결이 안됐다.

이는 IAM 역할이 EC2와 연결되는데 시간이 소요되기 때문에 발생하는 경고로, 일정 시간이 지난 뒤 다시 연결을 시도하면 다음과 같이 잘 연결된다.

로컬 터미널에서 SSH로 접속 가능하게 설정

AWS EC2 인스턴스에서 SSM 연결을 하면 위와 같이 AWS 웹 콘솔의 터미널이 제공되지만 로컬 터미널에서도 접속할 수 있게 몇가지 설정을 해보자.

로컬 컴퓨터의 cmd를 통해 ssm 접속을 하기 위해서는 (1)AWS CLI와 (2)Session Manager Plugin을 설치해야 한다.

(1) AWS CLI가 잘 설치됐다면 aws --version 명령 실행 결과가 잘 나온다.

(2) Session Manager Plugin이 잘 설치됐다면 session-manager-plugin 명령 실행 결과가 다음과 같이 잘 나온다.

AWS CLI로 AWS 계정을 연결하고 aws ssm start-session --target [인스턴스 ID] --region [리전] 형식의 명령어로 EC2에 접속한다.

SSH 접속 설정
로컬 컴퓨터의 ~/.ssh/config 파일에 다음 내용을 추가하고 저장하면 표준 SSH 명령어로도 접속할 수 있다.

# SSM-powered SSH connection(MAC or Linux용)
host i-* mi-*
    ProxyCommand sh -c "aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters 'portNumber=%p'"
#----------
# Windows용
ProxyCommand aws ssm start-session --target %h --document-name AWS-StartSSHSession --parameters portNumber=%p
# ---------
# 위 내용의 conf 파일 생성 후 일반적인 ssh 접속 방식으로 접속
ssh -i [키페어 경로] ec2-user@[인스턴스 ID]

profile
꿈틀꿈틀

0개의 댓글