안녕하세요! 오늘은 클라우드 엔지니어링을 하다 보면 마주칠 수 있는 아주 난감한 상황을 해결하는 방법을 공유하려 합니다.
혹시 이런 요구사항을 받아보신 적 있나요?
"고객사 보안 정책상 서버(EC2)에 직접 SSL 인증서를 설치할 수 없고, ALB나 CloudFront 같은 앞단 장비도 쓸 수 없는 상황입니다.
하지만 서비스 도메인에는 무조건 HTTPS가 적용되어야 해요."
정말 난감하죠. 하지만 AWS의 API Gateway와 Lambda를 조합하면, 마치 프록시(Proxy) 서버처럼 구성하여 이 문제를 해결할 수 있습니다.
핵심 흐름: 사용자 (HTTPS) → API Gateway (SSL 처리) → Lambda (중계) → EC2 (HTTP 통신)
1. 사전 준비: Lambda Layer 만들기
우리가 만들 Lambda 함수는 HTTP 요청을 보내기 위해 파이썬의 requests 라이브러리를 사용합니다. 하지만 AWS Lambda 기본 환경에는 이 라이브러리가 없기 때문에, **Layer(계층)**를 먼저 만들어야 합니다.
로컬 PC에서 압축 파일 생성
폴더를 하나 만들고 이름은 반드시 **python**으로 합니다. (이 이름이 아니면 인식이 안 됩니다!)
해당 폴더 안에 requests 라이브러리를 설치합니다.
결과적으로 압축 파일 내부 구조는 python/requests/... 형태가 되어야 합니다.
AWS 콘솔에서 Layer 등록
[AWS Lambda 콘솔] > 좌측 메뉴 [계층(Layers)] > [계층 생성] 클릭.
이름: my-requests-layer (원하는 대로)
업로드: 방금 만든 .zip 파일을 올립니다.
호환 아키텍처: x86_64 (또는 환경에 맞게)
호환 런타임: Python 3.x 선택 후 생성 완료.
2. Lambda 함수 생성 (중계 역할)
이제 실제 트래픽을 EC2로 토스해 줄 함수를 만듭니다.
함수 생성
[AWS Lambda 콘솔] > [함수 생성] 클릭.
함수 이름: proxy-function
런타임: Python 3.x
생성 버튼 클릭.
Layer 추가
생성된 함수 화면 하단부의 [계층(Layers)] 섹션 > [계층 추가(Add a layer)] 클릭.
'사용자 지정 계층' 선택 > 아까 만든 my-requests-layer 선택 후 추가.
코드 작성
아래 코드를 붙여넣습니다. 이 코드는 API Gateway로 들어온 요청(Method, Path, Header, Body)을 그대로 받아서, 목적지 EC2로 쏘아주고 응답을 다시 반환하는 역할을 합니다 .
Deploy 버튼을 눌러 배포합니다.
3. API Gateway 구성 (HTTPS 진입점)
이제 외부에서 들어올 대문인 API Gateway를 만듭니다.
API 생성
[API Gateway 콘솔] > [API 생성] 클릭.
API 유형: HTTP API 선택 (REST API보다 저렴하고 설정이 간편합니다).
통합(Integrations): 'Lambda'를 선택하고, 위에서 만든 proxy-function을 지정합니다.
API 이름: ssl-proxy-api 등 입력 후 [다음].
경로(Route) 구성
메서드: ANY (모든 HTTP 메서드 허용)
리소스 경로: / (모든 경로 허용)
통합 대상: 방금 연결한 Lambda 함수 확인.
이렇게 설정하면 https://도메인/* 으로 들어오는 모든 요청이 Lambda로 넘어갑니다.
스테이지 구성
자동 배포(Auto-deploy)가 켜진 상태로 기본값($default) 그대로 두고 [생성] 완료.
4. 도메인 연결 및 SSL 인증서 적용
여기가 가장 중요한 HTTPS 적용 단계입니다. 미리 AWS ACM(Certificate Manager)에 사용할 도메인의 인증서가 발급되어 있어야 합니다.
사용자 지정 도메인 이름 생성
[API Gateway 콘솔] 좌측 메뉴 > [사용자 지정 도메인 이름(Custom domain names)] 클릭.
[생성] 클릭.
도메인 이름: 서비스할 도메인 입력 (예: api.demo-mc1.com).
TLS 버전: 1.2 권장.
ACM 인증서: 미리 발급받은 해당 도메인의 인증서를 선택합니다
[도메인 이름 생성] 클릭.
API 매핑 (API Mapping)
방금 만든 도메인을 클릭하고 [API 매핑] 탭으로 이동합니다.
[매핑 구성(Configure API mappings)] > [새 매핑 추가] 클릭.
API: 아까 만든 ssl-proxy-api를 선택합니다.
단계(Stage): $default 선택.
저장합니다.
5. DNS 연결 (Route 53)
마지막으로 도메인 접속 시 API Gateway로 연결되도록 설정합니다.
Route 53 콘솔 이동 > 해당 도메인의 호스팅 영역 선택.
레코드 생성 클릭.
레코드 이름: 위에서 설정한 서브 도메인(예: api).
레코드 유형: A 레코드.
별칭(Alias): 활성화.
트래픽 라우팅 대상: API Gateway API로 별칭 선택.
리전: 서울(ap-northeast-2) 등 해당 리전 선택.
엔드포인트: 목록에서 아까 만든 API Gateway 도메인이 뜰 겁니다. 선택.
[레코드 생성] 완료.
마무리 및 테스트
이제 브라우저 주소창에 https://내도메인을 입력해 보세요.
**브라우저(Client)**는 API Gateway와 HTTPS로 안전하게 통신합니다.
API Gateway는 Lambda를 호출합니다.
Lambda는 내부적으로 **EC2(HTTP 80)**와 통신하여 데이터를 가져옵니다.
이 구성을 사용하면 서버 설정은 1도 건드리지 않고, AWS 관리형 서비스만으로 빠르고 안전하게 HTTPS 환경을 구축할 수 있습니다. ALB 비용이 부담스럽거나 서버 접근이 제한된 환경에서 꼭 한번 활용해 보세요!


