Pulumi Hetzner 상용 미구현 항목 — 구현 체크리스트
목적: pulumi-ansible-step1-step2-plan.md §1.6 상용 단계에서 정의한 항목 중 아직 prego-pulumi에 반영되지 않은 것의 구현 순서·체크리스트.
기준 코드: /Users/marco/prego-pulumi/__main__.py, config/region.py
요약
| # | 항목 | 기획 § | 우선순위 | 비고 |
|---|---|---|---|---|
| 1 | 상용 서버 타입 (CPX31 이상) | 1.6 | 높음 | test_mode 아님일 때 cpx31 적용 |
| 2 | Backups 활성화 옵션 | 1.6 | 높음 | 상용 모드에서 backups=True |
| 3 | Hetzner Volume (20~50GB) | 1.6 | 중간 | App/DB 데이터 분리 |
| 4 | Placement group (Spread) | 1.6 | 중간 | App·DB 서로 다른 물리 호스트 |
| 5 | Cloud-init (user_data) | 1.6 | 낮음 | 선택: Docker 사전 설치 등 |
| 6 | Runbook 리소스 수·체크리스트 정리 | runbook | 문서 | §5.1, §5.2 현재 구조 반영 |
1. 상용 서버 타입 (CPX31 이상)
- 설정 경로:
__main__.py—test_mode가 False일 때 기본server_typecpx31 적용. - Config:
pulumi config set prego-pulumi:serverType cpx31(또는 cpx41 등)로 지정 가능. - DB 서버: 동일 변수로 상용 시 cpx31 적용.
- 참고: §1.7 — CPX31 기준 월 비용 예시 있음.
2. Backups 활성화 옵션
- 설정:
pulumi config set prego-pulumi:enableBackups true또는 환경변수PULUMI_ENABLE_BACKUPS=true. - 기본값:
False(테스트 비용 절감). - App 서버·DB 서버 둘 다 동일 옵션 적용.
3. Hetzner Volume (20~50GB)
- 리소스:
hcloud.VolumeApp용·DB용 각 1개.pulumi config set prego-pulumi:volumeSizeGb 20(기본 20, 20~50 범위).enableVolumes true로 활성화. - 부착:
hcloud.VolumeAttachment로 각 서버에 automount=True 부착. - 마운트 경로: Ansible에서 처리. Pulumi는 생성·부착만.
- 기본: enableVolumes 기본값 False(기존 스택 영향 없음). 상용에서 True 시 App 1개 + DB 1개 생성.
4. Placement group (Spread)
- 리소스:
hcloud.PlacementGroupprego-spread,type="spread". - 연결: App·DB 서버에
placement_group_id전달. 테스트 모드에서는 비활성(enable_placement_group=False). - 설정:
enablePlacementGroup기본 True(상용). False로 끄기 가능.
5. Cloud-init (user_data)
- 선택 사항:
pulumi config set prego-pulumi:userData "..."또는PULUMI_USER_DATA. App·DB 서버 둘 다에 전달. - 예시:
#cloud-config또는 스크립트. Runbook §1.6 참고. - 주의: Ansible에서도 Docker 설치 시 중복 가능. Ansible 우선이면 userData 비워두기.
6. Runbook 업데이트
- 파일: docs/runbook/pulumi-step1-hetzner-server.md
- §5.1: 스택 리소스 문구 수정(Server×2, Firewall×2, DnsRecord, R2Bucket, PlacementGroup, Volume 등).
- §5.2: prego-db-01, prego-db-fw 체크리스트 반영 완료.
구현 순서 제안
- 1 → 2: 상용 서버 타입 + Backups 옵션 (상용 전환 시 필수).
- 6: Runbook 정리 (배포·검증 시 혼동 방지).
- 3 → 4: Volume, Placement group (용량·가용성 요구 시).
- 5: Cloud-init은 필요 시에만.
Config 요약 (구현 반영)
| Config key | 타입 | 기본값 | 비고 |
|---|---|---|---|
prego-pulumi:testMode | bool | false | true 시 CAX11+hel1, 볼륨/배치 비활성 |
prego-pulumi:serverType | string | cpx31 | 상용 기본 |
prego-pulumi:enableBackups | bool | false | App·DB 둘 다 |
prego-pulumi:enableVolumes | bool | false | true 시 Volume 2개 + Attachment |
prego-pulumi:volumeSizeGb | int | 20 | 20~50, enableVolumes 시만 |
prego-pulumi:enablePlacementGroup | bool | true | false 시 Spread 미사용 |
prego-pulumi:userData | string | — | cloud-init (선택) |
환경변수: PULUMI_ENABLE_BACKUPS, PULUMI_ENABLE_VOLUMES, PULUMI_VOLUME_SIZE_GB, PULUMI_USER_DATA 등 동일 이름으로 대체 가능.
문서 위치: docs/planning/pulumi-hetzner-production-todo.md