Blog
Thoughts on engineering, design, and building great products.
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.
CodeBuild Nâng Cao: Biến Môi Trường, Secret và Cache
Build thật cần config và secret: URL API, khóa, mật khẩu database. Bài này truyền chúng vào CodeBuild đúng cách — biến thường khai trực tiếp, còn giá trị nhạy cảm lấy từ SSM Parameter Store và Secrets Manager, được CodeBuild tự che trong log. Kèm bật cache để build nhanh hơn. Tất cả test thật và xem log.
CodeBuild: Project, buildspec.yml và Lần Build Đầu Tiên
Dựng chặng build: tạo một CodeBuild project nối tới repo CodeCommit, viết buildspec.yml định nghĩa các phase build, chạy build thật rồi đọc log CloudWatch để thấy từng phase chạy ra sao. Mổ cơ chế CodeBuild dựng một container tạm, chạy buildspec theo thứ tự phase, đẩy artifact lên S3 và log lên CloudWatch.
CodeCommit: Nguồn Code Cho Pipeline
Dựng chặng source: tạo repo CodeCommit, kết nối Git bằng git-remote-codecommit (dùng credential AWS, không cần lưu mật khẩu Git riêng), đẩy một ứng dụng mẫu lên, rồi đi qua luồng branch và pull request bằng AWS CLI. Đây là nơi code sống và là điểm khởi đầu cho mọi lần chạy pipeline ở các bài sau.