Blog
Thoughts on engineering, design, and building great products.
CodePipeline: Nối Source, Build, Deploy Thành Dây Chuyền
Tới giờ mỗi chặng chạy bằng tay. CodePipeline nối chúng thành một dây chuyền tự động: Source kéo code từ CodeCommit, Build gọi CodeBuild, Deploy gọi CodeDeploy — artifact chảy từ stage này sang stage kia. Bài này dựng pipeline đầu tiên, chạy thật, và mổ cách artifact truyền giữa các stage.
Blue/Green Deploy Với ALB và Rollback Tự Động
Deploy in-place có một khoảng máy offline. Blue/green tránh điều đó: dựng một fleet mới (green) song song, kiểm tra, rồi chuyển traffic qua bằng load balancer — blue vẫn còn nguyên để quay về tức thì. Bài này dựng ALB, đổi deployment group sang blue/green, chạy thật (kèm một lỗi IAM rất thực tế), và cấu hình rollback tự động theo CloudWatch alarm.
Deploy Lên Auto Scaling Group và Deployment Config
Từ một instance lên nhiều: deploy lên Auto Scaling Group. Tạo launch template và ASG, gắn deployment group vào ASG, rồi chọn deployment config (OneAtATime, HalfAtATime, AllAtOnce) để điều khiển deploy lần lượt hay đồng loạt. Và cơ chế quan trọng: CodeDeploy tự deploy bản mới nhất lên instance mà ASG khởi thêm về sau.
CodeDeploy Lifecycle Hooks: Thứ Tự, Biến, và Khi Hook Fail
Mổ sâu phần hook của CodeDeploy: chuỗi lifecycle event chạy theo thứ tự nào, hook nào hợp việc gì, vì sao ApplicationStop chạy từ revision cũ chứ không phải mới, những biến môi trường CodeDeploy truyền vào script, và chuyện gì xảy ra khi một hook fail — deploy dừng đúng ở đó, các event sau không chạy.
CodeDeploy: Deploy In-Place Đầu Tiên Lên EC2
Mở Part IV: đưa artifact lên EC2 bằng CodeDeploy. Dựng một instance có agent, tạo application và deployment group nhắm theo tag, viết appspec.yml với các hook vòng đời, rồi chạy lần deploy in-place đầu tiên — xem agent kéo revision từ S3 và chạy qua từng lifecycle event tới khi app phục vụ thật.
CodeArtifact: Kho Package Nội Bộ Cho Build
Build thật phụ thuộc hàng loạt package từ Internet — rủi ro khi nguồn ngoài đổi hoặc biến mất. CodeArtifact là kho package được quản lý: vừa làm proxy cache cho PyPI/npm public, vừa lưu package riêng của bạn. Bài này tạo domain và repository, publish một package Python rồi cài lại từ CodeArtifact, và nối nó vào CodeBuild.
CodeBuild Test Report: Build Không Chỉ Chạy Mà Phải Đúng
Một build thành công không có nghĩa code đúng — nó chỉ nghĩa các lệnh chạy không lỗi. Bài này cho CodeBuild chạy test thật (pytest) và gom kết quả thành test report xem được: tổng số test, đạt/trượt, từng case. Và vì sao nên để test trượt làm build trượt, chặn code hỏng trước khi tới deploy.