🧭 문제 정의: 서버리스도 결국 ‘스케일링’이 필요하다
AWS Lambda는 기본적으로 이벤트 기반 자동 스케일링이 지원됩니다. 그러나 다음과 같은 상황에서는 세밀한 제어가 어렵거나 불가능합니다.
문제 상세
동시 실행 제한 계정 혹은 함수당 concurrency 제약이 존재함
SLA 기준 없음 응답시간, 큐 백로그 등의 SLA에 따른 스케일 제어 불가
비정형 이벤트 Kafka, Redis, Custom API 트리거 처리 어려움
멀티 클라우드 연동 Lambda 외 외부 리소스 연계 자동화 어려움
→ 해결책: Lambda 트리거를 EventBridge로 통합하고, 외부 SLA 지표 기반으로 KEDA를 통해 스케일 제어 + 예약 확장 + 이벤트 기반 오토화 가능
⸻
📐 전체 아키텍처
+---------------------+ +------------------------+ +-------------------+
| Prometheus (SLA) | ----> | KEDA Metrics Adapter | ----> | Kubernetes |
| - latency | | ScaledObject (Job) | | Job (LambdaCall) |
+---------------------+ +------------------------+ +-------------------+
|
▼
+-------------------------+
| AWS EventBridge Rule |
| -> target = Lambda Fn |
+-------------------------+
⸻
🧱 핵심 구성 요소 설명
구성 요소 설명
Prometheus SLA 지표 (e.g. latency, backlog, rate limit 등) 수집
KEDA Prometheus → Kubernetes Job 생성 트리거 역할
Job (Lambda Caller) AWS CLI로 Lambda 함수 수동 실행
EventBridge Rule 수동 트리거 대신 예약 기반 실행 가능
Lambda Function 기존 서버리스 애플리케이션 또는 트리거 대상
⸻
🔧 Terraform을 활용한 인프라 선언적 구성 예
1. Lambda 및 IAM 설정
resource "aws_lambda_function" "my_lambda" {
function_name = "keda-scaled-lambda"
...
}
resource "aws_iam_role" "lambda_exec" {
name = "lambda_exec_role"
assume_role_policy = data.aws_iam_policy_document.lambda_assume.json
}
2. EventBridge Rule 생성
resource "aws_cloudwatch_event_rule" "lambda_schedule" {
name = "lambda-every-minute"
schedule_expression = "rate(1 minute)"
}
⸻
📄 KEDA ScaledObject 설정 예시 (Prometheus Trigger)
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
name: lambda-trigger
namespace: default
spec:
scaleTargetRef:
name: lambda-runner-job
triggers:
- type: prometheus
metadata:
serverAddress: http://prometheus.monitoring.svc:9090
query: |
rate(http_requests_total{job="lambda-api",status=~"5.."}[1m])
threshold: "10"
⸻
🧪 Lambda 호출을 위한 Job 예시 (Kubernetes)
apiVersion: batch/v1
kind: Job
metadata:
name: lambda-runner-job
spec:
template:
spec:
containers:
- name: aws-lambda-caller
image: amazon/aws-cli
command:
- "/bin/sh"
- "-c"
- >
aws lambda invoke \
--function-name keda-scaled-lambda \
/tmp/out.txt
restartPolicy: Never
⸻
💡 고급 팁 및 응용
주제 상세
ScaledJob 활용 단발성 이벤트 처리 시 ScaledJob이 더 적합
Slack 알림 Argo CD Notifications 또는 Alertmanager와 연동
재시도 제어 Lambda 재실행 실패 시 KEDA CooldownPeriod 설정
다중 트리거 Kafka, Redis, Prometheus 조합 가능 (Multi-Trigger)
Terraform 모듈화 Lambda + EventBridge + Role + Rule을 모듈로 재사용화
CloudWatch ↔ Prometheus cloudwatch-exporter로 CloudWatch → Prometheus 지표 통합 가능
⸻
🔚 결론
KEDA는 전통적인 Kubernetes 워크로드뿐만 아니라, Lambda 같은 서버리스 환경에도 효과적인 확장성 관리 도구로 자리잡을 수 있습니다.
특히 Prometheus 기반 SLA 지표, EventBridge를 통한 예약 실행, Terraform 기반 선언적 관리가 결합되면:
• 정량적 SLA 준수
• 낭비 없는 트래픽 기반 실행
• 하이브리드 클라우드 통합
이라는 세 가지 축이 충족됩니다.
서버리스도 더 이상 단순한 “자동”이 아닌, 정교하게 튜닝 가능한 자동화 환경으로 진화해야 할 시점입니다.
다음 단계로는 KEDA + CloudWatch + API Gateway 연계를 통한 실시간 API 수요 기반 오토스케일링 사례를 다뤄드릴 수 있습니다.
'IT & Tech 정보' 카테고리의 다른 글
Pulumi × TypeScript로 구축하는 멀티 클라우드 IaC: 진짜 ‘코드로서의 인프라’란 무엇인가 (0) | 2025.05.28 |
---|---|
OPA 기반 GitOps 정책 제어 파이프라인: GitHub Actions + Argo CD + Gatekeeper 완전 통합 (0) | 2025.05.28 |
Git 커밋도 없이 배포된다: Argo CD Image Updater로 완전 자동 GitOps 구축하기 (0) | 2025.05.28 |
SLA 기반 자동 스케일링 아키텍처 완전 해부: KEDA + Prometheus + OpenSLO + Slack 연동 (0) | 2025.05.28 |
쿠버네티스 기반의 실시간 장애 전파 및 자동 복구 시스템 설계: (0) | 2025.05.28 |