다크 모드
Infrastructure
truloop의 인프라는 Pulumi + TypeScript로 관리되는 AWS 기반 Infrastructure as Code(IaC) 프로젝트입니다. 모든 리소스는 ap-northeast-2 (서울) 리전에 배포됩니다.
프로젝트 개요
| 항목 | 내용 |
|---|---|
| IaC 도구 | Pulumi (TypeScript) |
| 클라우드 | AWS |
| 리전 | ap-northeast-2 (서울) |
| 조직 | butbeautiful (Pulumi Cloud) |
| 환경 | dev, prod |
| 레포지토리 | truloop-infra |
아키텍처: 공유 인프라 + 서비스별 인프라
truloop의 인프라는 공유 인프라와 서비스별 인프라로 분리되어 관리됩니다.
공유 인프라 (truloop-infra)
모든 서비스가 공통으로 사용하는 기반 리소스:
- VPC, Subnet, Security Group
- ALB (Listener만, Target Group은 서비스별)
- ECS Cluster (Service는 각 레포에서)
- S3 Bucket
- CloudFront CDN
- Route53, ACM
- IAM Role/Policy
- SQS + Lambda (이미지 그룹핑 파이프라인, 선택적)
서비스별 인프라 (각 레포의 /infra)
각 서비스가 자체 관리하는 리소스:
- truloop-core/infra: ECR, Target Group, Listener Rules, ECS Service
- truloop-assistant/infra: ECR, Target Group, Listener Rules, ECS Service
- truloop-media-service/infra: ECR, Target Group, Listener Rules, ECS Service
- truloop-ai-server/infra: ECR, Target Group, Listener Rules, ECS Services (FastAPI + Celery)
Stack Reference
서비스별 인프라는 truloop-infra의 outputs를 Stack Reference로 참조합니다.
typescript
const infraStack = new pulumi.StackReference("butbeautiful/truloop-infra/dev");
const vpcId = infraStack.getOutput("vpcId");
const ecsClusterArn = infraStack.getOutput("ecsClusterArn");주요 AWS 서비스
| 카테고리 | 서비스 | 용도 |
|---|---|---|
| 네트워킹 | VPC, Subnet, NAT Gateway | 네트워크 격리 및 라우팅 |
| 로드밸런싱 | ALB (Application Load Balancer) | HTTPS 트래픽 분배 |
| 컴퓨팅 | ECS Fargate | 컨테이너 오케스트레이션 |
| 데이터베이스 | Aurora PostgreSQL | 관계형 데이터 저장 |
| 캐시 | ElastiCache Redis | 세션/캐시 저장 |
| 스토리지 | S3 | 미디어, 설정, 에셋 저장 |
| CDN | CloudFront | 정적 에셋 배포 |
| DNS | Route53 | 도메인 관리 |
| 인증서 | ACM | TLS/SSL 인증서 |
| 보안 | IAM, OIDC | 인증/인가 |
| 메시징 | SQS | 이미지 그룹핑 작업 큐 (DLQ 포함) |
| 서버리스 | Lambda | 이미지 그룹핑 프로세서 (Node.js, SQS 트리거) |
| 접근 | SSM Session Manager, EC2 Bastion | SSM Port Forwarding을 통한 RDS 접근 |
환경 구성
- ECS Cluster:
truloop-dev - 서비스: truloop-core-dev, chatter-dev, truloop-ai-server-fastapi-dev, truloop-ai-server-celery-worker-dev, truloop-media-service-dev, prometheus, grafana
- RDS: 단일 인스턴스
- Redis: 단일 노드
- ESC 환경:
truloop/infra-dev
관리 원칙
정보
Convention over Configuration: 환경별 차이는 Pulumi config YAML에서만 관리하고, 코드에서는 intelligent defaults를 제공합니다.
- Import 기반 관리: 기존 AWS 리소스를 Pulumi State로 Import하여 코드로 관리
- 최소 ignoreChanges: CI/CD가 관리하는 필드(
taskDefinition,desiredCount)만 제외 - 자동 태깅: 모든 AWS 리소스에
Environment,ManagedBy,Project,Stack태그 자동 적용 - 리소스 보호: 주요 리소스에
protect: true설정으로 실수 삭제 방지
변경 이력
| 날짜 | 변경 내용 |
|---|---|
| 2026-03-12 | 이미지 그룹핑 인프라 추가: SQS 큐 (GroupingQueue) + Lambda 프로세서 (GroupingProcessor). 선택적 배포 (Pulumi config 기반) |
| 2026-03-10 | 소스 코드 검증: SSM 접근 설명 수정, ECS 서비스 목록에 truloop-media-service 추가 |