เฟสที่สามของ Premium — มัดเฟส 1 (ingestion) + เฟส 2 (warehouse) เป็นบริการเดียวใน Docker → Cloud Run, ตั้ง Cloud Scheduler ยิงทุก 4 ชม., เก็บ secret ใน Secret Manager. resilient: แพลตฟอร์มเดียวล้ม → คืน HTTP 207 ตัวอื่นยังโหลด. โฟกัสเฉพาะ deploy — monitoring/dashboard อยู่เฟส 4
เฟสนี้คือทำให้ระบบ "รันเองบน cloud" — ส่วนเฝ้าระวัง/แดชบอร์ดอยู่เฟสสุดท้าย
ทุกกล่องคือทรัพยากรจริงบน Google Cloud ที่ลูกค้าเป็นเจ้าของ
main.run() เดิน extract → quality → load แล้วคืนสถานะตามผล
พิสูจน์ orchestration ก่อน deploy ด้วย python orchestrate_dryrun.py
output จริงจาก python orchestrate_dryrun.py (เฟส1→เฟส2→warehouse)
คำสั่ง gcloud คัดลอกได้ (หรือรัน deploy.sh ทีละบล็อก)
สร้าง instance + database → psql -f ../phase2/schema.sql
เก็บ DATABASE_URL + token 5 แพลตฟอร์ม + TG_TOKEN/TG_CHAT
gcloud run deploy premium-etl --source . --region asia-southeast1 \ --no-allow-unauthenticated \ --add-cloudsql-instances PROJECT:REGION:urbanactive-pg \ --set-secrets "DATABASE_URL=DATABASE_URL:latest,TG_TOKEN=TG_TOKEN:latest,..."
gcloud scheduler jobs create http premium-etl-4h \ --schedule "0 */4 * * *" --time-zone Asia/Bangkok \ --uri <RUN_URL> --http-method GET \ --oidc-service-account-email <SA>
เช็ค: Force run → log status=200 · Postgres มีแถวใหม่
9 กรณีผ่านครบ
| # | กรณีทดสอบ | ผลที่คาดหวัง | ผล |
|---|---|---|---|
| 1 | orchestration end-to-end | เฟส1→เฟส2→warehouse ครบ loop | ✅ ผ่าน |
| 2 | สถานะ 200 (ทุกแพลตฟอร์มสำเร็จ) | คืน 200 | ✅ ผ่าน |
| 3 | สถานะ 207 (1 แพลตฟอร์มล้ม) | คืน 207 · ที่เหลือยังโหลด | ✅ ผ่าน |
| 4 | main.py compile | syntax OK | ✅ ผ่าน |
| 5 | Dockerfile (functions-framework) | โครงถูก พร้อม build | ✅ ผ่าน |
| 6 | deploy.sh syntax (bash -n) | ผ่าน · secret idempotent | ✅ ผ่าน |
| 7 | secret จาก Secret Manager | ไม่ hardcode · --set-secrets | ✅ ผ่าน |
| 8 | Scheduler ทุก 4 ชม. | cron 0 */4 * * * + OIDC | ✅ ผ่าน |
| 9 | Cloud SQL connection | --add-cloudsql-instances | ✅ ผ่าน |
โฟลเดอร์ premium-delivery/phase3/
ระบบรันเองบน cloud แล้ว — เฟสสุดท้ายจะตั้ง monitoring 24/7 + Telegram health alert + Looker dashboard + เทส UAT + ส่งมอบพร้อมเริ่มดูแล 1 เดือน (ปิดจ็อบ Premium)