Syllabus học Packer
TUẦN 0 - Nền tảng tư duy
Ngày 1: Triết lý Immutable Infrastructure & vị trí của Packer
Mục tiêu: Hiểu vì sao Packer tồn tại, không chỉ cách chạy nó.
Nội dung:
Lý thuyết: Immutable vs mutable infra, config drift, so sánh Packer build với Docker build layer; pipeline chuẩn
Source → Packer → Golden Image → Terraform → Production.Thực hành: Cài Packer,
packer version,packer plugins install github.com/hashicorp/amazon.
Mini-Project: Vẽ sơ đồ pipeline image factory dự kiến cho hệ thống của bạn (base → hardened → app image).
TUẦN 1 - Sử dụng thành thạo HCL2 & Core usage
Ngày 2: Cấu trúc HCL2 Template
Mục tiêu: Nắm 5 block chính và thứ tự thực thi thật.
Nội dung:
Lý thuyết:
packer{},variable{},local{},data{},source{},build{}.Thực hành: Viết template tối giản build
amazon-ebstừ Ubuntu AMI, chạypacker init+packer validate.
Mini-Project: Template build 1 AMI Nginx cơ bản.
Ngày 3: Variables, Locals, Data Sources
Mục tiêu: Tham số hóa toàn bộ template.
Nội dung:
Lý thuyết:
variablevalidation/sensitive,localcomputed values,data "amazon-ami"để tự động lấy AMI mới nhất.Thực hành: Tách file
variables.pkr.hcl+*.pkrvars.hcl, chạy-var-file.
Mini-Project: Refactor template Ngày 2 để region/instance_type/tags đều là biến, dùng
datasource lấy AMI base tự động thay vì hardcode AMI ID.
Ngày 4: Builders cơ bản
Mục tiêu: Thành thạo
amazon-ebs,docker.Nội dung:
Lý thuyết: Communicator (SSH), lifecycle build cơ bản (launch → connect → provision → snapshot → cleanup).
Thực hành: Build cùng 1 app image cho cả AMI và Docker image từ 1 template dùng nhiều
source.
Mini-Project: Không, gộp vào Ngày 8.
Ngày 5: Builders nâng cao - Multi-cloud
Mục tiêu: Biết builder cho các cloud khác.
Nội dung:
Lý thuyết:
amazon-chroot(build không cần launch instance mới) vsamazon-ebs;azure-arm;googlecompute;vsphere-isocho on-prem.Thực hành: Build thử
amazon-chroottrên 1 EC2 instance, so sánh thời gian build vớiamazon-ebs.
Ngày 6: Provisioners
Mục tiêu: Thành thạo cấu hình OS bên trong image.
Nội dung:
Lý thuyết:
shell,shell-local,file,ansible;only/except;on_failure(cleanup,abort).Thực hành: Viết provisioner cài Nginx + copy config file + chạy Ansible playbook.
Ngày 7: Post-processors & Manifest
Mục tiêu: Xuất metadata phục vụ pipeline downstream.
Nội dung:
Lý thuyết:
manifest,compress,checksum,docker-push; chain post-processor.Thực hành: Xuất
manifest.jsonchứa AMI ID, đọc bằngjqtrong script CI.
Ngày 8: Multi-builder & Parallel build
Mục tiêu: Build song song nhiều target từ 1 source logic.
Nội dung:
Lý thuyết:
build{}block với nhiềusources, biến-only.Thực hành: Build đồng thời AMI (us-east-1, ap-southeast-1) + Docker image.
Mini-Project: Template "1 nguồn, nhiều đích" build image Nginx+app cho AWS 2 region + Docker, output manifest hợp nhất.
Ngày 9: Communicator (SSH/WinRM internals)
Mục tiêu: Hiểu kênh giao tiếp Packer ↔ instance tạm.
Nội dung:
Lý thuyết: SSH handshake, key pair tạm Packer tự sinh, timeout tuning (
ssh_timeout), bootstrap script.Thực hành: Chạy
packer build -debugđể thấy từng bước dừng, quan sát key pair/SG tạm trên AWS Console.
Ngày 10: Ôn tập & Mini-Project tổng hợp Tuần 1
- Mini-Project: Pipeline hoàn chỉnh: build AMI Nginx + app từ biến hóa đầy đủ, provision qua Ansible, xuất manifest, build song song 2 region.
TUẦN 2 - Internals (Plugin architecture, Go source)
Ngày 11: Kiến trúc Plugin-based & go-plugin
Mục tiêu: Hiểu vì sao Packer 1.7+ tách plugin.
Nội dung:
Lý thuyết:
go-plugin(RPC/gRPC) - cơ chế chung với Terraform/Vault/Nomad; lý do tách: independent release, giảm core size.Thực hành:
packer plugins installed, xem binary plugin nằm ở đâu (~/.config/packer/plugins/).
Ngày 12: Packer Core object & Build lifecycle
Mục tiêu: Hiểu luồng nội bộ khi chạy
packer build.Nội dung:
Lý thuyết:
core.Build(), mỗi build 1 goroutine, context cancellation khi Ctrl-C → graceful cleanup.Thực hành: Ctrl-C giữa chừng 1 build AMI, quan sát AWS tự cleanup instance/SG tạm.
Ngày 13: HCL2 parsing pipeline
Mục tiêu: Hiểu từ file
.pkr.hclđến Go struct.Nội dung:
Lý thuyết:
hashicorp/hcl/v2→ AST →hcldecdecode →ctytype system (chung nền tảng với Terraform).Thực hành: Đọc source
packer-plugin-sdk/hcl2helper.
Ngày 14: Plugin SDK - interface Builder/Provisioner/PostProcessor
Mục tiêu: Nắm interface bắt buộc mọi plugin phải implement.
Nội dung:
Lý thuyết:
Prepare(),Run(),Cancel().Thực hành: Đọc source
packer-plugin-amazonđể thấy implement thật.
Ngày 15: Tự viết custom Provisioner plugin
Mục tiêu: Thực chiến internals.
Nội dung:
- Thực hành: Viết plugin Go đơn giản (in system info), compile, cài local, gọi trong template.
Mini-Project: Provisioner plugin custom "print build metadata" hoạt động end-to-end.
Ngày 16: Tự viết custom Post-processor plugin
Mục tiêu: Mở rộng thêm 1 loại plugin khác.
Nội dung:
- Thực hành: Viết post-processor ghi thêm metadata (build time, git commit) vào file JSON riêng.
Ngày 17: Debug RPC & Plugin handshake
Mục tiêu: Biết debug khi plugin lỗi.
Nội dung:
Lý thuyết:
PACKER_LOG=1,PACKER_LOG_PATH; lỗi "plugin handshake failed" thường do version mismatch.Thực hành: Cố tình gây lỗi handshake (sai version plugin), đọc log để chẩn đoán.
Ngày 18: Source Code Reading Roadmap
Mục tiêu: Có lộ trình đọc code hiệu quả thay vì đọc lan man.
Nội dung: Đọc theo thứ tự:
packer-plugin-sdk→packercore →packer-plugin-amazon→packer-plugin-docker→packer-plugin-ansible.Mini-Project: Viết note tóm tắt kiến trúc mỗi repo (1 trang/repo).
TUẦN 3 - AWS/Cloud Internals & Windows Image Engineering
Ngày 19: AMI Internals
Mục tiêu: Hiểu quan hệ AMI ↔ EBS Snapshot ↔ Volume.
Nội dung:
Lý thuyết:
AMI → Snapshot → EBS Volume → EC2; Block Device Mapping.Thực hành: Trace 1 AMI trong Console, xem snapshot backing nó, tính chi phí lưu trữ.
Ngày 20: Launch Template & Block Device Mapping nâng cao
Mục tiêu: Kết nối image với hạ tầng launch.
Nội dung:
Lý thuyết: Launch Template version, ENA/NVMe, volume encryption khi build.
Thực hành: Config
launch_block_device_mappingstrong Packer template, verify volume type sau build.
Ngày 21: amazon-ebs vs amazon-chroot - internals sâu
Mục tiêu: Hiểu tradeoff kỹ thuật thật sự, không chỉ "cái nào nhanh hơn".
Nội dung:
Lý thuyết: chroot mount volume trực tiếp vào instance đang chạy Packer (không launch instance mới) → nhanh nhưng phải chạy trên EC2, cùng architecture.
Thực hành: Benchmark thời gian build 2 phương pháp trên cùng 1 EC2.
Ngày 22: Windows Image Engineering - WinRM
Mục tiêu: Mở rộng khỏi Linux-centric.
Nội dung:
Lý thuyết:
communicator = "winrm", WinRM port/auth khác SSH hoàn toàn.Thực hành: Build thử 1 Windows AMI cơ bản, provisioner PowerShell cài IIS.
Ngày 23: Windows - Sysprep, EC2Launch/EC2Config, Chocolatey
Mục tiêu: Build Windows image production-ready.
Nội dung:
Lý thuyết: Vì sao cần Sysprep trước khi tạo AMI (reset SID); EC2Launch v2 vs EC2Config cũ; Chocolatey để cài package như apt/yum.
Thực hành: Template Windows Server hoàn chỉnh: cài app qua Chocolatey → Sysprep → tạo AMI.
Mini-Project: Windows base image chuẩn hóa cho công ty (updates + agent monitoring + hardening cơ bản).
Ngày 24: So sánh internals Azure/GCP
Mục tiêu: Không bị khóa tư duy vào AWS.
Nội dung:
Lý thuyết: Azure managed image/Shared Image Gallery vs GCP image family; khác biệt về snapshot/versioning.
Thực hành: Build 1 image tối giản trên Azure hoặc GCP, so sánh manifest output với AWS.
TUẦN 4 - Image Factory Architecture & Security
Ngày 25: Image Factory Architecture - Image Lineage
Mục tiêu: Thiết kế hệ thống phân lớp image, không build 1 image "phẳng" cho mọi thứ.
Nội dung:
Lý thuyết:
Base Image → Hardened Image → Runtime Image → Application Image; image inheritance, image promotion.Thực hành: Thiết kế sơ đồ 4 lớp cho hệ thống thật (vd: Amazon Linux → CIS Hardened → Company Base → Product Image).
Ngày 26: Xây dựng Base Image & Hardened Image
Mục tiêu: Build lớp nền tái sử dụng được.
Nội dung:
- Thực hành: Template build "Base Image" (chỉ OS + agent chuẩn), publish AMI ID, sau đó template "Hardened Image" build from Base Image AMI đó (kế thừa).
Mini-Project: Chain 2 template: Base → Hardened, xác nhận Hardened image build đúng trên nền Base vừa tạo (dùng
datasource lấy AMI mới nhất của Base).
Ngày 27: Security Hardening
Mục tiêu: Đưa compliance vào image thay vì làm thủ công sau deploy.
Nội dung:
Lý thuyết: CIS Benchmark, STIG, SSH hardening,
auditd, FIPS mode.Thực hành: Provisioner chạy
LynishoặcOpenSCAPscan, in kết quả compliance score.
Ngày 28: Image Scanning & Secrets Management
Mục tiêu: Không bake secret vào image, phát hiện lỗ hổng trước khi publish.
Nội dung:
Lý thuyết: Vì sao secret phải lấy runtime (instance metadata/Vault/Secrets Manager) chứ không hardcode; nguyên lý image scanning.
Thực hành: Tích hợp
Trivyscan image sau build, fail pipeline nếu có CVE critical.
Ngày 29: Testing Image trước khi Promote
Mục tiêu: Có bước "kiểm định" trước khi image được coi là production-ready.
Nội dung:
Lý thuyết: Pattern
Build → Test → Promote → Deploy.Thực hành: Viết test bằng
GosshoặcInSpeckiểm tra service running, port mở, package version.
Mini-Project: Pipeline build → scan (Trivy) → test (Goss) → chỉ tag "validated" nếu tất cả pass.
Ngày 30: AMI Lifecycle Management & Retention
Mục tiêu: Giải quyết bài toán "đau đầu hơn cả build" - quota và chi phí.
Nội dung:
Lý thuyết: Tag lifecycle (
latest,latest-validated,production,rollback), retention policy 30/90/180 ngày, AMI/snapshot quota, storage cost.Thực hành: Viết script (hoặc dùng AWS Data Lifecycle Manager) tự động deregister AMI cũ + xóa snapshot orphan.
TUẦN 5 - CI/CD, Terraform/HCP, Kubernetes
Ngày 31: CI/CD hóa Packer build
Mục tiêu: Build tự động, không chạy tay.
Nội dung:
Lý thuyết: Pipeline stages
packer init → validate → build; build matrix nhiều region.Thực hành: Viết GitHub Actions workflow build + upload manifest artifact.
Ngày 32: HCP Packer Registry & Channel Management
Mục tiêu: Quản lý version/governance tập trung.
Nội dung:
Lý thuyết:
hcp_packer_registryblock, channeldev/staging/prodtrỏ tới image version khác nhau.Thực hành: Đăng ký build lên HCP Packer, tạo channel, promote thủ công.
Ngày 33: Terraform + Packer Integration sâu
Mục tiêu: Nối liền pipeline image → hạ tầng.
Nội dung:
Lý thuyết:
data "hcp_packer_image"vsdata "aws_ami"; workflowPacker → HCP Registry → Terraform → ASG/EKS NodeGroup.Thực hành: Terraform apply dùng
data "hcp_packer_image"lấy "latest validated" image cho Launch Template.
Mini-Project: Full loop: build image mới → validate → promote channel "production" → Terraform tự pick lên mà không sửa code Terraform.
Ngày 34: Kubernetes Node Images
Mục tiêu: Ứng dụng Packer cho Platform Engineering hiện đại.
Nội dung:
Lý thuyết: Custom EKS node image (Amazon Linux + SSM Agent + Datadog + Falco + security config), dùng cho Managed Node Group / Karpenter / self-managed node.
Thực hành: Build 1 custom node AMI, dùng làm
amiSelectorcho Karpenter hoặc launch template của node group.
Ngày 35: Debugging & Troubleshooting nâng cao
Mục tiêu: Xử lý sự cố thực chiến - nơi tốn thời gian nhất trong production.
Nội dung:
Lý thuyết: Phân loại lỗi thường gặp: SSH timeout, provisioner failed, plugin handshake failed, AMI creation failed, snapshot timeout, API rate limit.
Thực hành: Cố tình gây từng loại lỗi (vd: sai SG rule chặn SSH), luyện đọc
PACKER_LOGđể chẩn đoán nhanh.
TUẦN 6 - Ecosystem & Capstone
Ngày 36: Packer Ecosystem
Mục tiêu: Hiểu vị trí Packer trong toàn hệ sinh thái HashiCorp.
Nội dung: Lý thuyết: quan hệ Packer ↔ Terraform ↔ Vault (secrets runtime) ↔ Nomad (chạy image) ↔ Boundary (access) ↔ Waypoint (legacy, ít dùng).
Ngày 37: Tối ưu hiệu năng & chi phí tổng hợp
Mục tiêu: Build nhanh, rẻ, gọn.
Nội dung: Thực hành: parallel provisioning, base layer caching pattern (build kế thừa thay vì build lại từ đầu), giảm kích thước image (cleanup cache, sparsify QEMU).
Ngày 38: Capstone Project - Image Factory hoàn chỉnh
Mục tiêu: Tổng hợp toàn bộ 38 ngày thành 1 hệ thống thật.
Yêu cầu capstone:
Kiến trúc 4 lớp image (Base → Hardened → Runtime → App) với lineage rõ ràng.
CI/CD tự động build + Trivy scan + Goss test + promote qua HCP Packer channel.
Terraform tiêu thụ image qua
data "hcp_packer_image"để deploy ASG hoặc EKS node group.Retention policy tự động cleanup AMI/snapshot cũ.
Custom plugin (provisioner hoặc post-processor) tự viết được dùng trong pipeline này.
1 image Windows và 1 image Linux, cả hai đều pass CIS hardening scan.