Thách Thức Resume Đám Mây: Triển Khai GCP của Tôi
Trong vài tuần qua, tôi đã làm việc trên Thách Thức Resume Đám Mây - một dự án thực hành kết hợp hạ tầng đám mây, CI/CD, API và một chút công việc frontend. Mục tiêu của tôi là xây dựng một trang web hồ sơ hoàn toàn chạy trên đám mây, được lưu trữ trên Google Cloud Platform (GCP), với tất cả hạ tầng được quản lý bằng mã và triển khai tự động.
Bạn có thể xem nó tại đây: temitayoapata.online
Những gì tôi đã xây dựng
Lưu trữ Hồ sơ Tĩnh
Tôi đã lưu trữ HTML và CSS của hồ sơ trong một bucket Google Cloud Storage (GCS) công khai. Thay vì thiết lập Google Cloud Load Balancer (cái mà đã thêm phức tạp và chi phí liên tục), tôi đã kết nối bucket với Cloudflare. Cloudflare xử lý DNS, CDN và SSL miễn phí.
Cách tiếp cận này giúp tôi có được caching toàn cầu, tốc độ tải nhanh và bảo mật HTTPS mà không cần hạ tầng thêm. Bằng cách dựa vào tầng miễn phí của Cloudflare thay vì cân bằng tải trả phí của Google Cloud, tôi đã giữ cho thiết lập của mình nhẹ nhàng và tránh được chi phí không cần thiết, trong khi vẫn cung cấp một trang web chuyên nghiệp, sẵn sàng cho sản xuất.
API Đếm Lượt Truy Cập
Một API nhỏ viết bằng Flask chạy trên Cloud Run và kết nối với Firestore. Mỗi khi trang được tải, API sẽ tăng một bộ đếm và trả về giá trị đã được cập nhật.
Hạ Tầng Như Mã
Tôi đã cung cấp mọi thứ - dịch vụ Cloud Run, quyền IAM, kích hoạt API, v.v. - bằng Terraform, giúp thiết lập trở nên lặp lại và có thể kiểm soát phiên bản.
Tự Động Hóa CI/CD
Tôi đã sử dụng GitHub Actions và Cloud Build để triển khai tự động, vì vậy việc đẩy mã sẽ kích hoạt các cập nhật hạ tầng và triển khai lại mà không cần can thiệp thủ công.
Những Kinh Nghiệm và Thách Thức của Tôi
Hạ Tầng Như Mã là sức mạnh, nhưng cũng khó khăn lúc đầu
Terraform đã giúp hạ tầng trở nên có thể tái tạo, nhưng cũng rất khắt khe. Các lỗi chính tả trong tên tài nguyên hoặc liên kết IAM đã gây ra nhiều vòng thử nghiệm thất bại. Tôi phải làm quen với việc đọc thông báo lỗi của Terraform và học cách áp dụng, lập kế hoạch hoặc hoàn tác.
Pipeline CI/CD dạy tôi kỷ luật
Thiết lập một pipeline GitHub Actions để tự động triển khai thay đổi là một quá trình học tập lớn. Nó không chỉ đơn thuần là “làm cho nó hoạt động”. Tôi phải nghĩ đến vấn đề bảo mật, quản lý bí mật, và kiểm thử đúng cách trước khi đẩy mã lên sản xuất.
Một thách thức cụ thể là cấu hình Workload Identity Federation để GitHub Actions có thể xác thực với Google Cloud mà không lưu trữ các khóa lâu dài. Tôi đã gặp phải nhiều lỗi với các điều kiện thuộc tính, và chỉ sau khi kiểm tra kỹ tài liệu của Google, tôi mới có thể làm cho nó hoạt động. Chiến thắng nhỏ đó cảm thấy như một bước tiến lớn.
Kiểm thử và chất lượng mã là quan trọng
Làm việc trên dự án này đã giúp tôi nhận ra tại sao kiểm thử là không thể thương lượng. Việc viết các bài kiểm thử tự động cho API Cloud Run của tôi đã cho thấy những sai sót nhỏ có thể dễ dàng lọt vào mã. Điều này cũng khiến tôi phải viết mã Python sạch hơn, đáng tin cậy hơn trong khi đảm bảo rằng bộ đếm lượt truy cập của tôi hoạt động như mong đợi mỗi lần.
Kiểm thử tự động cũng mang lại cho tôi sự yên tâm. Mỗi lần tôi đẩy mã, tôi biết rằng nếu có gì đó bị hỏng, pipeline sẽ bắt lỗi trước khi nó đến phiên bản sản xuất.
CORS và Yêu Cầu API
Triển khai API đếm lượt truy cập trên Cloud Run với tích hợp Firestore không diễn ra suôn sẻ như tôi tưởng tượng. Do frontend chạy trên một nguồn gốc khác (Cloudflare) so với backend (Cloud Run), tôi đã gặp phải vấn đề CORS khi gọi API. Flask-CORS đã giúp khắc phục điều này, nhưng nó dạy tôi tầm quan trọng của việc cấu hình đúng nguồn gốc, tiêu đề và phương thức.
Điều tôi học được là nhật ký là bạn tốt nhất của bạn. Kiểm tra nhật ký Cloud Run, thông báo lỗi Firestore và đầu ra GitHub Actions đã trở thành một phần trong quy trình làm việc hàng ngày của tôi. Theo thời gian, tôi đã nhanh chóng phát hiện ra nơi mà vấn đề nằm.
Bài học lớn nhất: tư duy toàn diện
Dự án này không chỉ là viết mã Python hay triển khai một VM, mà là suy nghĩ toàn diện.
- Frontend kết nối với backend như thế nào?
- Backend giao tiếp an toàn với cơ sở dữ liệu như thế nào?
- Làm thế nào để đảm bảo rằng các triển khai có thể lặp lại và an toàn?
- Làm thế nào để tránh quản lý bí mật một cách thủ công?
Trả lời những câu hỏi này đã giúp tôi hiểu cách mà DevOps và kỹ thuật đám mây liên kết mọi thứ lại với nhau.
Thách Thức Resume Đám Mây không dễ dàng, nhưng đó chính là mục đích. Nó đã buộc tôi phải học các kỹ năng thực tế trong hạ tầng đám mây, pipeline CI/CD, bảo mật, và tự động hóa. Quan trọng nhất, nó đã mang lại cho tôi sự tự tin rằng tôi có thể xử lý các dự án đám mây phức tạp và phân tách chúng thành các bước có thể quản lý.
Nếu bạn đang tìm cách phát triển trong lĩnh vực đám mây hoặc DevOps, tôi rất khuyên bạn nên thử thách này. Nó không chỉ kiểm tra kỹ năng kỹ thuật của bạn, mà còn thay đổi cách bạn nghĩ về việc xây dựng và triển khai phần mềm.
Các Thực Hành Tốt Nhất
- Sử dụng Infrastructure as Code: Luôn sử dụng công cụ như Terraform để quản lý hạ tầng một cách có thể lặp lại và dễ quản lý.
- Tích cực kiểm thử: Tạo các bài kiểm thử tự động cho mã của bạn để đảm bảo chất lượng và giảm rủi ro.
- Quản lý bí mật một cách an toàn: Sử dụng các phương pháp xác thực an toàn như Workload Identity Federation.
Những Cạm Bẫy Thường Gặp
- Bỏ qua kiểm thử: Nhiều nhà phát triển dễ dàng bỏ qua kiểm thử, nhưng điều này có thể dẫn đến lỗi nghiêm trọng trong sản phẩm cuối cùng.
- Không quản lý phiên bản cho mã hạ tầng: Quản lý phiên bản cho mã hạ tầng là rất quan trọng để theo dõi thay đổi và khôi phục khi cần thiết.
Mẹo Tối Ưu Hiệu Suất
- Sử dụng CDN: Sử dụng Cloudflare hoặc các dịch vụ CDN khác để cải thiện tốc độ tải trang và bảo mật.
- Tối ưu hóa API: Thiết kế API để giảm thiểu độ trễ và tăng tốc độ phản hồi.
Giải Quyết Vấn Đề
- Xem nhật ký: Sử dụng nhật ký từ Cloud Run và Firestore để phát hiện và khắc phục lỗi nhanh chóng.
- Tham khảo tài liệu: Luôn tham khảo tài liệu chính thức của Google Cloud để có thông tin cập nhật và giải pháp cho các vấn đề bạn gặp phải.
Câu Hỏi Thường Gặp (FAQ)
1. Tôi cần những kỹ năng gì để tham gia vào Thách Thức Resume Đám Mây?
Bạn cần có kiến thức cơ bản về cloud, CI/CD, và một ngôn ngữ lập trình như Python.
2. Thời gian hoàn thành thách thức này là bao lâu?
Thời gian hoàn thành tùy thuộc vào kỹ năng và sự chuẩn bị của bạn, nhưng có thể mất từ vài tuần đến vài tháng.
3. Tôi có thể sử dụng các công cụ nào cho dự án này?
Bạn có thể sử dụng Terraform, GitHub Actions, Flask và các dịch vụ của Google Cloud như Cloud Run và Firestore.