다크 모드
인프라
Pulumi 프로젝트
| 항목 | 값 |
|---|---|
| 프로젝트명 | truloop-functions-infra |
| 런타임 | Node.js (TypeScript) |
| 백엔드 | Pulumi Cloud (butbeautiful 조직) |
| 스택 | dev, prod |
| AWS 리전 | ap-northeast-2 |
리소스 구성
Stack Reference
truloop-functions는 두 개의 외부 Pulumi 스택을 참조합니다.
| 소스 스택 | Output | 용도 |
|---|---|---|
truloop-core-infra/{env} | schedulerExecutionRoleName | EventBridge Scheduler 실행 역할에 Lambda 호출 권한 추가 |
truloop-core-infra/{env} | schedulerDlqArn | Scheduler DLQ에 메시지 전송 권한 추가 |
truloop-assistant-infra/{env} | triggerEventsQueueUrl | Lambda 환경변수로 주입 (SQS 큐 URL) |
truloop-assistant-infra/{env} | triggerEventsQueueArn | Lambda IAM 정책에 SQS SendMessage 권한 설정 |
주의
배포 순서 의존성: truloop-core-infra (TLP-333) → truloop-assistant-infra (TLP-336) → truloop-functions-infra (TLP-334) 순으로 배포해야 합니다. Stack Reference가 존재하지 않으면 배포에 실패합니다.
Exports
truloop-functions가 내보내는 outputs:
| Output | 타입 | 설명 |
|---|---|---|
triggerDispatcherFnArn | string | Lambda 함수 ARN |
triggerDispatcherFnName | string | Lambda 함수 이름 |
truloop-core가 ESC를 통해 이 값들을 ECS 환경변수로 주입하여 EventBridge Scheduler 생성 시 사용합니다.
IAM 구성
Lambda 실행 역할
truloop-trigger-dispatcher-{env} 역할에 부여된 권한:
| 정책 | 권한 | 대상 |
|---|---|---|
AWSLambdaBasicExecutionRole (Managed) | CloudWatch Logs 쓰기 | CloudWatch Logs |
Inline: trigger-dispatcher-sqs | sqs:SendMessage | truloop-assistant의 trigger-events 큐 |
Scheduler 실행 역할 확장
truloop-core-infra가 생성한 Scheduler 실행 역할에 추가하는 인라인 정책:
| 권한 | 대상 |
|---|---|
lambda:InvokeFunction | trigger-dispatcher Lambda ARN |
sqs:SendMessage | Scheduler DLQ ARN |
Lambda 설정
| 항목 | 값 |
|---|---|
| 런타임 | python3.13 |
| 아키텍처 | arm64 (Graviton2) |
| 핸들러 | handler.handler |
| 타임아웃 | 300초 (5분) |
| 메모리 | 256MB |
| 비동기 재시도 | 최대 2회 |
| 패키징 | FileArchive (trigger-dispatcher/ 디렉토리 직접 업로드) |
환경변수
| 변수명 | 소스 | 설명 |
|---|---|---|
SQS_ASSISTANT_QUEUE_URL | truloop-assistant-infra StackRef | SQS trigger-events 큐 URL |
TRULOOP_CORE_INTERNAL_API_URL | ESC 환경 (truloop-functions/{env}) | Core Internal API URL (ALB) |
TRULOOP_CORE_INTERNAL_API_KEY | ESC 환경 (truloop-functions/{env}) | Core Internal API 인증 키 |
CI/CD 파이프라인
CI (ci.yml)
| 단계 | 도구 | 대상 |
|---|---|---|
| 정적 분석 | Biome | infra/ (TypeScript) |
| 타입 체크 | tsc --noEmit | infra/ (TypeScript) |
정보
Lambda 코드(Python)는 표준 라이브러리만 사용하므로 별도 빌드/테스트 단계가 없습니다.
CD (cd.yml)
| 트리거 | 환경 | 동작 |
|---|---|---|
main push (CI 성공 후) | Development | 자동 배포 |
PR (infra/**, trigger-dispatcher/**) | - | Pulumi Preview (dev + prod) |
workflow_dispatch | Development / Production 선택 | 수동 배포 |
Production 배포 제약: main 브랜치에서만 Production 배포가 허용됩니다.
동시 실행 제어
동일 환경에 대한 동시 배포를 방지합니다.
| 트리거 | Concurrency Group |
|---|---|
| PR | cd-preview-{PR번호} (이전 실행 자동 취소) |
| 배포 | cd-{environment} |
태깅 규칙
모든 AWS 리소스에 적용되는 태그:
| 태그 | 값 |
|---|---|
Environment | dev / prod |
ManagedBy | Pulumi |
Project | truloop-functions |
Stack | dev / prod |
변경 이력
| 날짜 | 내용 |
|---|---|
| 2026-03-11 | Lambda ARM64 (Graviton2) 아키텍처 전환 반영 |
| 2026-03-11 | 최초 작성 — truloop-functions 인프라 문서 |