# Syllabus Waypoint

## ⚠️ Lưu ý quan trọng trước khi bắt đầu

Waypoint mã nguồn mở cũ (`waypoint.hcl`, build/deploy/release, tự host) **đã bị archive**, community edition dừng ở bản 0.11.4 và không còn maintain.

# TUẦN 1 - Nền tảng IDP & kiến trúc HCP Waypoint

### Ngày 1: Khái niệm Internal Developer Platform (IDP)

*   **Mục tiêu:** Hiểu bài toán "developer self-service" mà Waypoint giải quyết.
    
*   **Nội dung:**
    
    *   Lý thuyết: Platform Engineering, golden path/golden pattern; tách vai trò Platform Engineer (định nghĩa template) vs Application Developer (tiêu thụ template).
        
    *   So sánh sơ bộ với Backstage, Port - Waypoint khác biệt vì build trực tiếp trên HCP Terraform thay vì tự có provisioning engine riêng.
        
*   **Mini-Project:** Không, warm-up.
    

### Ngày 2: Kiến trúc tổng thể HCP Waypoint

*   **Mục tiêu:** Nắm sơ đồ luồng dữ liệu.
    
*   **Nội dung:**
    
    *   Lý thuyết: `Template/Add-on definition → No-code Terraform module → Workspace → Apply`. Khi developer dùng template/cài add-on, Waypoint gọi HCP Terraform API tạo workspace + trigger run; khi destroy, Waypoint trigger destroy run và xóa workspace.
        
    *   Thực hành: Tạo HCP account, bật HCP Waypoint, kết nối tới 1 HCP Terraform organization.
        
*   **Mini-Project:** Setup kết nối HCP Waypoint ↔ HCP Terraform hoàn chỉnh với team token đúng scope.
    

### Ngày 3: No-code Ready Terraform Modules

*   **Mục tiêu:** Nền tảng bắt buộc phải giỏi trước khi làm Waypoint.
    
*   **Nội dung:**
    
    *   Lý thuyết: Điều kiện module trở thành "no-code ready" (biến/output rõ ràng, versioning); vì sao Waypoint bắt buộc dựa vào module dạng này.
        
    *   Thực hành: Viết 1 module đơn giản (vd deploy container service), publish lên private registry, đánh dấu no-code ready.
        

### Ngày 4: Templates trong HCP Waypoint

*   **Mục tiêu:** Thành thạo tạo golden pattern đầu tiên.
    
*   **Nội dung:**
    
    *   Lý thuyết: Template trừu tượng hóa application scaffolding - Terraform định nghĩa hạ tầng, dependency, workflow, access control trong 1 nơi, dùng làm blueprint tái sử dụng.
        
    *   Thực hành: Tạo Template từ module Ngày 3, developer consume template tạo application mới qua UI.
        
*   **Mini-Project:** 1 Template hoàn chỉnh: developer chỉ nhập tên app + region, hạ tầng còn lại tự động provision.
    

### Ngày 5: Input Variables cho Template

*   **Mục tiêu:** Kiểm soát biến nào khóa cứng, biến nào để developer tự nhập.
    
*   **Nội dung:**
    
    *   Lý thuyết: Platform team chọn/khóa giá trị biến, hoặc để developer tự cung cấp giá trị khi tạo ứng dụng.
        
    *   Thực hành: 1 biến khóa cứng (compliance - vd region chỉ us-east-1), 1 biến developer tự chọn (instance size).
        

# TUẦN 2 - Add-ons, Actions, RBAC & Catalog

### Ngày 6: Add-ons - quản lý dependency ứng dụng

*   **Mục tiêu:** Tách "app core infra" (Template) khỏi "dependency" (Add-on).
    
*   **Nội dung:**
    
    *   Lý thuyết: Add-on định nghĩa resource hạ tầng bằng Terraform, cung cấp như dependency (database, cache, queue) trong vòng đời ứng dụng.
        
    *   Thực hành: Tạo Add-on "Redis cache", cài vào application Ngày 4.
        
*   **Mini-Project:** Application có Template (compute) + 2 Add-on (Postgres, Redis) cài/xóa độc lập.
    

### Ngày 7: Variable Outputs

*   **Mục tiêu:** Developer đọc được kết quả provisioning mà không cần vào Terraform trực tiếp.
    
*   **Nội dung:** Lý thuyết + thực hành: Expose connection string của Add-on Redis ra UI Waypoint cho developer đọc.
    

### Ngày 8: Actions - golden workflow vận hành

*   **Mục tiêu:** Chuẩn hóa thao tác vận hành hàng ngày, không chỉ tạo hạ tầng.
    
*   **Nội dung:**
    
    *   Lý thuyết: HCP CLI/Terraform provider dùng HCP API truy cập resource Waypoint; Action định nghĩa và thực thi golden workflow (build, rollback, thao tác private environment).
        
    *   Thực hành: Action gọi webhook trigger CI/CD pipeline (vd GitHub Actions) từ Waypoint UI.
        
*   **Mini-Project:** Action "Rollback" gắn vào Template Ngày 4 - 1 nút bấm trigger Terraform run về version trước.
    

### Ngày 9: RBAC & Access Control

*   **Mục tiêu:** Kiểm soát ai tạo Template, ai chỉ consume.
    
*   **Nội dung:**
    
    *   Lý thuyết: HCP Waypoint thực thi authentication/authorization mọi thao tác qua UI/API/CLI/Terraform Provider, quyền giới hạn theo Role-Based Access Control.
        
    *   Thực hành: Role "platform team" (full quyền Template/Add-on) vs "app developer" (chỉ consume).
        

### Ngày 10: Project Selection & tổ chức multi-team

*   **Mục tiêu:** Nhiều team dùng chung HCP org mà không đụng workspace của nhau.
    
*   **Nội dung:** Lý thuyết: Cấu hình Template/Add-on chọn HCP Terraform project cụ thể khi tạo workspace.
    

### Ngày 11: Application Catalog

*   **Mục tiêu:** Nguồn sự thật cho toàn bộ ứng dụng trong org.
    
*   **Nội dung:** Lý thuyết: Catalog giúp platform/operations team tìm câu trả lời vận hành nhanh.
    
*   Thực hành: Duyệt catalog, gắn metadata/tag cho từng application.
    

# TUẦN 3 - Production Fundamentals

### Ngày 12: Template Upgrade Path

*   **Mục tiêu:** Vận hành golden pattern theo thời gian - phần production quan trọng nhất.
    
*   **Nội dung:**
    
    *   Lý thuyết: Platform engineer cập nhật no-code module gốc → khả năng upgrade của Template đẩy cập nhật tới mọi ứng dụng đã tạo từ template đó.
        
    *   Thực hành: Sửa module Ngày 3 (thêm tag bắt buộc), publish version mới, trigger upgrade cho app cũ, quan sát Plan diff.
        
*   **Mini-Project:** Quy trình "propose → test → publish → rollout" cho 1 thay đổi compliance bắt buộc.
    

### Ngày 13: Security Model của HCP Waypoint

*   **Mục tiêu:** Đánh giá đúng mức an toàn khi giao golden pattern cho nhiều team.
    
*   **Nội dung:** Lý thuyết: Giao tiếp client↔Waypoint và nội bộ với dịch vụ khác (HCP Terraform) mã hóa TLS; dữ liệu nhạy cảm (token, output, biến sensitive dùng cho Actions) mã hóa bằng Vault Transit trước khi lưu database.
    

### Ngày 14: IaC hóa Waypoint

*   **Mục tiêu:** Quản lý Template/Add-on bằng code, không thao tác tay qua UI.
    
*   **Nội dung:**
    
    *   Lý thuyết: Terraform provider `hashicorp/hcp` quản lý resource như `hcp_waypoint_application`.
        
    *   Thực hành: Viết Terraform config định nghĩa lại Template/Add-on Ngày 4-6.
        
*   **Mini-Project:** Toàn bộ setup Waypoint (Template + Add-on + RBAC) version-controlled 100% bằng Terraform.
    

### Ngày 15: CI/CD Integration

*   **Mục tiêu:** Golden workflow gắn liền pipeline hiện có.
    
*   **Nội dung:** Lý thuyết: Waypoint tích hợp CI/CD hiện có, cung cấp lớp trừu tượng nhất quán.
    
*   Thực hành: Action trigger GitHub Actions build → kết quả hiện ngược trong catalog.
    

### Ngày 16: Bối cảnh Legacy OSS & So sánh tự build IDP (nửa ngày + nửa ngày)

*   **Mục tiêu:** Nhận diện hệ thống cũ nếu gặp, và biết khi nào nên/không nên dùng Waypoint.
    
*   **Nội dung:**
    
    *   (0.5 ngày) Legacy OSS: `waypoint.hcl`, 3-stage build/deploy/release, server tự host - chỉ cần đủ nhận diện, không đầu tư sâu vì đã archived.
        
    *   (0.5 ngày) So sánh: Waypoint tốn chi phí HCP Terraform Plus, đổi lại có UI self-service + RBAC + catalog + upgrade path sẵn - vs tự build script/portal riêng.
        

### Ngày 17: Thiết kế Golden Pattern cho tổ chức thật

*   **Mục tiêu:** Áp dụng vào bài toán thực tế.
    
*   **Nội dung:** Thực hành: Liệt kê 3-5 loại ứng dụng phổ biến (web service, batch job, static site...), thiết kế Template + Add-on tương ứng cho mỗi loại.
    

# TUẦN 4 - HCP Terraform

### Ngày 18: Workspace Lifecycle

*   **Mục tiêu:** Hiểu chính xác điều gì xảy ra khi Waypoint "âm thầm" gọi API.
    
*   **Nội dung:**
    
    *   Lý thuyết: Vòng đời `Create Workspace → Plan → Policy Check → Apply → Destroy`; execution mode (remote/local/agent); mỗi application/add-on = 1 workspace riêng.
        
    *   Thực hành: Tìm workspace Waypoint tự tạo ở Ngày 4, đọc log Plan/Apply thô.
        
*   **Mini-Project:** Trace toàn bộ vòng đời 1 workspace từ "Create App" đến Apply xong, ghi chú từng bước API call.
    

### Ngày 19: Run Tasks

*   **Mục tiêu:** Chèn kiểm tra tùy chỉnh giữa Plan và Apply.
    
*   **Nội dung:**
    
    *   Lý thuyết: Run Task là webhook gọi ở post-plan/pre-apply, tích hợp scan bên thứ 3 (cost estimation, security scan).
        
    *   Thực hành: Đăng ký Run Task chặn Apply nếu Plan thiếu tag bắt buộc.
        

### Ngày 20: Policy Sets (Sentinel/OPA)

*   **Mục tiêu:** Guardrail ở tầng Terraform, không chỉ ở tầng Template.
    
*   **Nội dung:**
    
    *   Lý thuyết: Policy Set gắn workspace/project, chạy tự động mọi run; `advisory` (cảnh báo) vs `hard-mandatory` (chặn cứng).
        
    *   Thực hành: Viết Sentinel policy chặn instance type ngoài whitelist, gắn vào project chứa workspace Waypoint.
        

### Ngày 21: Variable Sets & Dynamic Credentials (OIDC)

*   **Mục tiêu:** Quản lý credential tập trung, không hardcode secret.
    
*   **Nội dung:**
    
    *   Lý thuyết: Variable Set dùng chung nhiều workspace; Dynamic Provider Credentials qua OIDC - lấy short-lived credential từ AWS/Azure/GCP mỗi run thay vì static key.
        
    *   Thực hành: Cấu hình OIDC trust HCP Terraform ↔ AWS IAM role, verify workspace Waypoint chạy không cần static access key.
        
*   **Mini-Project:** Pipeline Waypoint → HCP Terraform → AWS chạy 100% dynamic credentials, có ít nhất 1 Sentinel policy chặn vi phạm compliance.
    

# TUẦN 5 - Registry Design, Versioning, Multi-cloud

### Ngày 22: Private Module Registry Architecture

*   **Mục tiêu:** Registry không hỗn loạn khi scale.
    
*   **Nội dung:**
    
    *   Lý thuyết: Phân lớp theo domain (`networking/` → aws-vpc, aws-eks, aws-rds; `application/` → web-service, batch-job, cron-job); registry thiết kế kém → Template rời rạc, khó audit.
        
    *   Thực hành: Tái cấu trúc registry đã dùng theo layer domain, naming convention thống nhất.
        

### Ngày 23: Semantic Versioning Strategy cho Template

*   **Mục tiêu:** Upgrade có kiểm soát, không chỉ "upgrade được".
    
*   **Nội dung:**
    
    *   Lý thuyết: Semver (`v1.0.0 → v1.1.0 → v2.0.0`); `non-breaking` (thêm optional variable) vs `breaking` (đổi tên/xóa output); trạng thái `supported` vs `deprecated`.
        
    *   Thực hành: Changelog cho module Ngày 3, giả lập breaking change (đổi tên output), viết migration note.
        
*   **Mini-Project:** Văn bản chính sách versioning: quy tắc bump version, deprecation window, cách thông báo breaking change qua catalog.
    

### Ngày 24: Multi-Cloud Pattern Design

*   **Mục tiêu:** Template không khóa cứng vào 1 cloud.
    
*   **Nội dung:**
    
    *   Lý thuyết: Tách `Abstract Template` (interface chung) khỏi `Provider-specific module` bên dưới - Template "Web Service" map tới AWS ECS / Azure Container Apps / Cloud Run tùy `cloud_provider`.
        
    *   Thực hành: 2 module cùng interface biến/output (`aws-ecs-service`, `gcp-cloudrun-service`), 1 Template chọn theo biến.
        
*   **Mini-Project:** Template "Web Service" chạy trên cả AWS và GCP chỉ bằng đổi 1 biến.
    

# TUẦN 6 - Analytics, FinOps, Day-2, Ecosystem

### Ngày 25: Platform Analytics & Observability

*   **Mục tiêu:** IDP phải tự đo được sức khỏe/mức sử dụng của chính nó.
    
*   **Nội dung:**
    
    *   Lý thuyết: 4 loại chỉ số - audit log (ai tạo/xóa app), usage metrics (Template dùng nhiều nhất), adoption metrics (% team đã dùng Waypoint), error rate theo Template.
        
    *   Thực hành: Export audit log ra dashboard đơn giản, tính adoption rate giả lập.
        

### Ngày 26: FinOps & Cost Controls trong Template

*   **Mục tiêu:** Ngăn developer tạo tài nguyên vượt ngân sách từ thiết kế.
    
*   **Nội dung:**
    
    *   Lý thuyết: Ép giới hạn trong biến Template (whitelist `instance_type`, `max_size` autoscaling, tag `cost_center` bắt buộc); kết hợp Sentinel cost policy (Ngày 20) để chặn cứng.
        
    *   Thực hành: Validation block trong module Terraform giới hạn `instance_type`.
        
*   **Mini-Project:** Template có cost guardrail đầy đủ: whitelist size, tag bắt buộc, cảnh báo vượt ngưỡng qua Run Task.
    

### Ngày 27: Day-2 Operations

*   **Mục tiêu:** Trả lời "Template tạo app xong, 6 tháng sau thì sao?"
    
*   **Nội dung:**
    
    *   Lý thuyết: Scaling, backup định kỳ, credential/certificate rotation, patch management (Add-on version bump theo lịch).
        
    *   Thực hành: Action "Backup Database" gọi API snapshot Add-on Postgres, lên lịch chạy định kỳ qua CI/CD trigger.
        
*   **Mini-Project:** Runbook Day-2 đầy đủ cho 1 application: scale, backup, rotate credential, patch - mỗi quy trình có 1 Action tương ứng.
    

### Ngày 28: Ecosystem Integration

*   **Mục tiêu:** Waypoint hiếm khi đứng một mình trong enterprise lớn.
    
*   **Nội dung:**
    
    *   Lý thuyết: Backstage làm catalog UI tổng hợp (Waypoint là 1 data source), Jira/ServiceNow cho approval workflow trước khi Action chạy, Datadog/PagerDuty nhận alert khi Apply fail hoặc Day-2 Action lỗi.
        
    *   Thực hành: Action gửi notification Slack/PagerDuty khi Terraform run fail.
        
*   **Mini-Project:** Sơ đồ tích hợp Waypoint vào hệ sinh thái enterprise giả định: Backstage + Jira + Datadog + PagerDuty.
    

# TUẦN 7 - Governance tổng hợp & Capstone

### Ngày 29: Governance & Compliance tổng hợp

*   **Mục tiêu:** Hợp nhất toàn bộ guardrail đã học thành 1 chính sách governance nhất quán.
    
*   **Nội dung:** Thực hành: Khóa cứng biến compliance (region, tagging, encryption) trong Template kết hợp Sentinel policy (Ngày 20) - viết thành 1 tài liệu governance duy nhất cho tổ chức.
    

### Ngày 30: Capstone - Internal Developer Platform Enterprise-grade

*   **Yêu cầu:**
    
    1.  Registry phân lớp domain rõ ràng (`networking/`, `application/`), naming convention nhất quán.
        
    2.  Tối thiểu 2 Template hỗ trợ multi-cloud (cùng interface, khác provider - AWS + GCP hoặc AWS + Azure).
        
    3.  Chính sách semantic versioning bằng văn bản, đã test rollout 1 breaking change có migration note.
        
    4.  Toàn bộ workspace chạy bằng Dynamic Credentials (OIDC) - không secret tĩnh.
        
    5.  Ít nhất 1 Sentinel policy hard-mandatory + 1 Run Task (cost estimation hoặc security scan).
        
    6.  Cost guardrail trong Template (whitelist size, tag bắt buộc, cảnh báo vượt ngân sách).
        
    7.  Ít nhất 2 Action Day-2 (backup + rollback) hoạt động thật, lên lịch được.
        
    8.  Dashboard theo dõi adoption/error rate theo Template.
        
    9.  Ít nhất 1 điểm tích hợp ecosystem thật (Slack/PagerDuty alert khi Apply fail).
        
    10.  RBAC phân quyền platform team vs developer, toàn bộ Template/Add-on định nghĩa bằng Terraform (`hashicorp/hcp` provider), version-controlled trên Git.
