Công cụ xử lý việc sắp xếp tài nguyên trong quy trình DevOps của bạn
Ngày 05/07/2024 - 05:07.png)
Tôi đã nghỉ phép vào đầu năm nay, và điều tuyệt vời về việc nghỉ phép là không bao giờ thiếu những điều để học. Câu hỏi về việc kỳ nghỉ phép này sẽ có lợi như thế nào cho sự nghiệp của tôi với tư cách là một kỹ sư phần mềm chưa bao giờ rời xa tâm trí tôi, và tôi cảm thấy áp lực đó tăng lên khi thế giới lao vào suy thoái. Đó là lý do tại sao tôi chọn tập trung vào DevOps làm lĩnh vực chuyên môn chính của mình. Là một kỹ sư phần mềm, khả năng chuyển đổi vốn trí tuệ thành vốn tài chính của bạn bị hạn chế bởi khả năng vận chuyển các sản phẩm đang hoạt động đến những khách hàng trả tiền — nói cách khác, quy trình DevOps của bạn phức tạp như thế nào. Trong tất cả những thách thức mà việc xây dựng một quy trình DevOps tuyệt vời đặt ra, thì thách thức mà tôi dành nhiều thời gian nhất để giải quyết là điều phối tài nguyên.
Tôi không có nhiều kinh nghiệm trong việc đưa các hệ thống cũ, quy mô lớn lên đám mây, nhưng tôi đã đưa các dự án nhỏ hơn, chẳng hạn như blog công nghệ của tôi , lên AWS. Theo kinh nghiệm của tôi, việc cấu hình chỉ ba tài nguyên khác nhau trên đám mây (S3 + CloudFront + Route 53) để chúng hoạt động tốt với nhau có thể trở nên khá rắc rối nếu bạn không biết mình đang làm gì. Đó là lúc một công cụ như AWS CloudFormation phát huy tác dụng. Nếu định nghĩa ngăn xếp của bạn không hoạt động, chỉ cần phá bỏ, cập nhật và triển khai lại. Nếu bạn có tài nguyên khác để thêm, hãy đưa nó vào định nghĩa ngăn xếp. Nếu bạn cần triển khai cùng một ngăn xếp với các biến cấu hình khác nhau, hãy viết một tập lệnh bash khác hoặc thêm mục tiêu Makefile. Các hệ thống có độ phức tạp tùy ý có thể được mô tả, triển khai và quản lý bằng cách sử dụng phương pháp này. Là một điểm dữ liệu, tôi gửi các trang đích của riêng mình cho nhiều ý tưởng kinh doanh khác nhau và những thứ tương tự thay vì sử dụng trang web của bên thứ ba và tôi đã có thể cắt giảm thời gian gửi cá nhân của mình từ vài ngày xuống còn một giờ. Nó có thể không được tối ưu hóa tốt hoặc đi kèm với các chủ đề mặc định của trang đích, nhưng về cơ bản là miễn phí. Thậm chí tốt hơn, phương pháp này có nghĩa là bất cứ thứ gì tôi vận chuyển, tôi đều sở hữu hoàn toàn.
Nói như vậy, sau một thời gian, bạn sẽ bắt đầu thấy cách một công cụ như CloudFormation hoặc giải pháp thay thế mã nguồn mở của nó, Terraform , có thể được cải thiện. Cái nhìn sâu sắc cốt lõi là cách chúng ít là các khuôn khổ cơ sở hạ tầng dưới dạng mã và nhiều hơn là các khuôn khổ cơ sở hạ tầng dưới dạng dữ liệu. Thay vì sử dụng ngôn ngữ lập trình để mô tả các ngăn xếp, mỗi ngăn xếp là một tệp dữ liệu, như tệp JSON hoặc YAML, được truyền đến một số máy chủ thực hiện các lệnh gọi API từ xa thay mặt cho bạn. Họ không thực sự sử dụng ngôn ngữ lập trình theo nghĩa thông thường để xác định các ngăn xếp cơ sở hạ tầng.
Nếu không có ngôn ngữ lập trình, cuối cùng bạn sẽ phải dùng đến các giải pháp thay thế thú vị khi ngăn xếp của bạn mở rộng. Ví dụ, tôi muốn chia ngăn xếp của mình thành nhiều ngăn xếp con có thể triển khai độc lập với nhau vì việc tạo ngăn xếp bị tắc nghẽn bởi tài nguyên có hiệu suất chậm nhất. Thật không may, CloudFormation không có câu lệnh "nhập" như Python hoặc TypeScript; thay vào đó, nó có các hàm nội tại mà bạn kết hợp để có được hành vi mong muốn. Trong trường hợp của tôi, tôi đã kết hợp !Ref và Fn::ImportValue để nhập tham chiếu đến tài nguyên CloudFormation bên ngoài. Quá trình này trở nên khá tẻ nhạt khi bạn mở rộng ngăn xếp của mình và số lượng tài nguyên phụ thuộc trên các ngăn xếp con tăng lên.
Một tình huống khác mà tôi gặp phải là cố gắng giữ cho các câu lệnh nhập của tôi vừa an toàn vừa minh bạch. Bất kỳ tham chiếu CloudFormation nào bạn xuất từ ngăn xếp CloudFormation đều được xuất dưới dạng văn bản thuần túy, vì vậy nếu bạn cần tham chiếu URI cơ sở dữ liệu của mình khi thiết lập các container, bạn đang công bố mật khẩu của mình cho bất kỳ ai có thông tin xác thực IAM chính xác. Để giải quyết vấn đề này, bạn có thể xuất đầu ra ngăn xếp sang AWS Secrets Manager để sử dụng trong các ngăn xếp khác, nhưng điều đó sẽ tạo thêm một bước mà bạn cần tạo mẫu cho mọi biến mà bạn muốn giữ bí mật, có thể mất tới vài giờ trong mỗi lần cập nhật ngăn xếp.
CloudFormation và Terraform là những công cụ tuyệt vời, nhưng trải nghiệm này khiến tôi tự hỏi liệu có cách nào tốt hơn để giải quyết vấn đề này không.
Nhập Pulumi
Gần đây, tôi có cơ hội làm việc với Pulumi , một khuôn khổ cơ sở hạ tầng dưới dạng mã nguồn mở, Turing-complete. Lần đầu tiên tôi biết về Pulumi là từ bài đăng Hacker News này . Thay vì sử dụng tệp dữ liệu như tệp JSON hoặc YAML với các phần mở rộng DSL tùy chọn, bạn sử dụng ngôn ngữ thực, như TypeScript hoặc Python hoặc Golang, và nhập Pulumi và bất kỳ SDK của bên thứ ba nào để mô tả ngăn xếp cơ sở hạ tầng của bạn. Mã nguồn này sau đó được đưa đến máy chủ Pulumi từ xa, nơi sắp xếp quản lý tài nguyên thay mặt bạn thông qua HTTP. Tôi vừa hoài nghi vừa thấy thích thú với Pulumi, và một số điểm nổi bật.
Điều đầu tiên tôi nhận thấy là Pulumi có bao nhiêu phụ thuộc bên dưới. Nhiều thư viện của bộ công cụ phát triển phần mềm, chẳng hạn như `@pulumi/aws` , chỉ gọi Terraform bên dưới mui xe bằng cách sử dụng một lớp cầu nối, vì vậy tôi nghĩ rằng công cụ này sẽ chỉ hữu ích như các công cụ mà nó phụ thuộc vào. Điều này hóa ra không phải là vấn đề đáng kể vì bản chất nguồn mở của công cụ có nghĩa là bạn có thể tự thêm hỗ trợ của riêng mình cho các tính năng không tồn tại. Điều này trái ngược với AWS CloudFormation, là độc quyền và thực sự mất vài tháng để bắt kịp với các tính năng AWS mới.
Điều thứ hai khiến tôi ngạc nhiên về Pulumi là giá cả. AWS CloudFormation miễn phí, như đã nêu trên trang giá của nó . Terraform cũng vậy, cho tối đa năm người dùng . Pulumi miễn phí cho một ngăn xếp dự án và một người dùng, sau đó tăng giá nhanh chóng cho bất kỳ quy trình làm việc có ý nghĩa nào dựa trên tổ chức. Tôi vẫn hơi bất ngờ vì giá quá cao, nhưng tôi nghĩ đối với các tổ chức kỹ thuật lớn hơn, chi phí này khá nhỏ khi so sánh với việc thuê một kỹ sư DevOps khác. Pulumi cũng cung cấp dịch vụ chuyên nghiệp trong việc chuyển đổi từ Terraform sang Pulumi , nếu điều đó có thể giúp ích.
Cuối cùng, tôi tự hỏi hỗ trợ khách hàng của Pulumi trông như thế nào, vì ít nhất là đối với AWS CloudFormation, nó được tích hợp với hỗ trợ khách hàng của AWS. Là một nền tảng AWS, tôi đã nghĩ CloudFormation có quyền ưu tiên tìm hiểu những sản phẩm mới mà AWS đang cung cấp. Khi tôi làm việc với Pulumi, đây không phải là vấn đề lớn. Bất kể tài liệu chính thức có thể không đồng đều như thế nào, giữa Google, Stack Overflow, Slack cộng đồng và GitHub Issues, hỗ trợ cho câu hỏi chung của Pulumi nên được công bố và có thể tìm kiếm được.
Tôi nghĩ kiến trúc của Pulumi giải quyết các vấn đề mà tôi đã đề cập trước đó tốt hơn nhiều so với CloudFormation. Với một ngôn ngữ lập trình, bạn có thể tự viết mã các nguyên hàm bậc cao để giải quyết hầu hết các vấn đề. Ví dụ, quản lý bí mật trong Pulumi có sẵn ngay lập tức và cũng có thể tận dụng bất kỳ dịch vụ quản lý bí mật nào của nhà cung cấp (Hashicorp Vault, AWS KMS, v.v.). Pulumi cũng mô tả các mẫu khác nhau trong xây dựng ngăn xếp , từ đơn khối đến ngăn xếp siêu nhỏ; nó thậm chí còn hỗ trợ các hướng dẫn về các phương pháp hay nhất như Pulumi Crosswalk , có thể hữu ích để tạo mẫu và kiến trúc tham chiếu cho các kiến trúc sư giải pháp.
Có lẽ tôi sẽ nói nhiều hơn về Pulumi sau khi sử dụng nó một thời gian, nhưng đủ để nói rằng đây là một công nghệ mới đầy hứa hẹn mà tôi sẽ chú ý.










