Skip to content

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미디어, 설정, 에셋 저장
CDNCloudFront정적 에셋 배포
DNSRoute53도메인 관리
인증서ACMTLS/SSL 인증서
보안IAM, OIDC인증/인가
메시징SQS이미지 그룹핑 작업 큐 (DLQ 포함)
서버리스Lambda이미지 그룹핑 프로세서 (Node.js, SQS 트리거)
접근SSM Session Manager, EC2 BastionSSM 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를 제공합니다.

  1. Import 기반 관리: 기존 AWS 리소스를 Pulumi State로 Import하여 코드로 관리
  2. 최소 ignoreChanges: CI/CD가 관리하는 필드(taskDefinition, desiredCount)만 제외
  3. 자동 태깅: 모든 AWS 리소스에 Environment, ManagedBy, Project, Stack 태그 자동 적용
  4. 리소스 보호: 주요 리소스에 protect: true 설정으로 실수 삭제 방지

변경 이력

날짜변경 내용
2026-03-12이미지 그룹핑 인프라 추가: SQS 큐 (GroupingQueue) + Lambda 프로세서 (GroupingProcessor). 선택적 배포 (Pulumi config 기반)
2026-03-10소스 코드 검증: SSM 접근 설명 수정, ECS 서비스 목록에 truloop-media-service 추가