Nếu bạn đang tự động hóa việc triển khai khối lượng công việc của mình trên Đám mây Amazon Web Services (AWS) bằng AWS CloudFormation, bạn có thể thực hiện các bước để tiết kiệm thời gian trong và sau quá trình phát triển ban đầu. Ngoài việc tiết kiệm thời gian, bạn có thể ngăn các mẫu của mình trở nên lỗi thời. Trong bài viết này, tôi đề cập đến một số phương pháp hay nhất để bạn sử dụng khi phát triển cơ sở hạ tầng dưới dạng code với AWS CloudFormation. Bài viết cũng bao gồm các phương pháp hay nhất để kiểm tra và duy trì các mẫu AWS CloudFormation.
Về AWS CloudFormation
AWS CloudFormation hợp lý hóa việc triển khai khối lượng công việc chính trên Đám mây AWS. Với AWS CloudFormation, bạn có thể lập mô hình và cung cấp tất cả các tài nguyên cần thiết cho các ứng dụng của mình trên nhiều Khu vực và tài khoản một cách tự động và an toàn. Bạn cũng có thể sử dụng ngôn ngữ lập trình hoặc các tệp văn bản đơn giản. Mẫu AWS CloudFormation là các tệp văn bản, được viết ở định dạng YAML hoặc JSON, xác định tài nguyên AWS sẽ được triển khai.
Bạn có thể tích hợp các công cụ tự động hóa, chẳng hạn như AWS Lambda và AWS Systems Manager, vào các mẫu AWS CloudFormation của mình. Với các công cụ tự động hóa, bạn có thể tự động hóa việc cung cấp khối lượng công việc tùy chỉnh trên cơ sở hạ tầng AWS đã xác định sẵn.
Chương trình AWS Quick Start cung cấp hơn 170 ví dụ về triển khai AWS Partner và AWS gốc, tất cả đều sử dụng mẫu AWS CloudFormation.
Phương pháp thực hành tốt nhất
Bắt đầu với các bản mẫu AWS CloudFormation hiện có
Tạo bản mẫu mô đun
Sử dụng kho hiện có làm mô đun con
Sử dụng các môi trường phát triển tích hợp được với linting
Sử dụng các tham số để xác định đường dẫn đến nội dung bên ngoài
Sử dụng tên giống nhau cho các tham số chung
Tự động kiểm tra AWS CloudFormation với TaskCat
Duy trì các bản mẫu
1. Bắt đầu với các bản mẫu AWS CloudFormation hiện có
Khi bạn sử dụng AWS CloudFormation để phát triển cơ sở hạ tầng dưới dạng mã, đầu tiên, hãy kiểm tra xem liệu kế hoạch triển khai của bạn đã được phát triển và chia sẻ với cộng đồng chưa. Hãy kiểm tra toàn bộ giải pháp của bạn và những khía cạnh của nó.
Chẳng hạn như AWS Quick Starts, chương trình mã nguồn mở và sẵn có trên GitHub. Trên trang chủ của chương trình này, bạn có thể tìm kiếm các danh mục theo đối tác, theo sản phẩm hoặc là theo từ khóa, ngoài ra, bạn cũng có thể lọc các danh mục này theo các trường hợp sử dụng phổ biến. Bên cạnh đó, AWS Labs cũng là một tổ chức mã nguồn mở trên GitHub bạn nên tham khảo. Chương trình này cung cấp một số mẫu AWS CloudFormation do AWS, cộng đồng AWS Partners và khách hàng phát triển.
Nếu bạn đang xây dựng quy trình tự động hóa việc triển khai trên cơ sở hạ tầng bao gồm các tài nguyên chung AWS thì hãy bắt đầu với một mẫu sẵn có. Điều này sẽ giúp bạn tiết kiệm được thời gian và công sức của mình. Các tài nguyên phổ biến bao gồm các Amazon Elastic Cloud Compute (Amazon EC2) instances, Amazon Simple Storage Service (Amazon S3) buckets, Lambda functions, và các cơ sở dữ liệu Amazon Relational Database Service (Amazon RDS).
2. Tạo mẫu mô-đun
Mặc dù bạn có thể sử dụng một mẫu AWS CloudFormation duy nhất để tự động hóa việc triển khai một khối lượng công việc phức tạp nhưng làm việc với nhiều mẫu nhỏ hơn sẽ khiến công việc của bạn trở nên dễ dàng hơn. Ví dụ, một ứng dụng web 3 tầng sẽ gồm các phần sau:
Một cơ sở dữ liệu Amazon RDS database với tính sẵn có cao
Một nhóm tự động co giãn Amazon EC2 cho lớp ứng dụng
Một nhóm tự động co giãn Amazon EC2 cho lớp web
Cân bằng tải cho cả lớp ứng dụng và web
Nếu bạn xác định toàn bộ của việc tự động triển khai ở trong một mẫu AWS CloudFormation duy nhất, mẫu này sẽ rất phức tạp và sẽ gây ra khó khăn cho bạn khi bạn khắc phục sự cố. Việc khắc phục sự cố và lặp lại sẽ dễ dàng hơn nếu bạn tạo mẫu AWS CloudFormation cho từng thành phần riêng biệt. Khi đó, bạn sẽ có một mẫu con cho cơ sở dữ liệu, một cho lớp ứng dụng, một cho lớp web và một mẫu mẹ triển khai các mẫu con theo trình tự.
Sử dụng phương pháp mô-đun hóa như này, bạn sẽ có thể tái sử dụng các mẫu con. Ví dụ, bạn có thể sao chép mẫu từ cơ sở dữ liệu và sử dụng nó cho một ứng dụng web khác.
3. Sử dụng các kho hiện có làm mô-đun con
Hãy sử dụng mô-đun con để tận dụng những công việc đã được thực hiện. Các mô-đun con không chỉ giúp bạn tiết kiệm thời gian trong quá trình phát triển mà còn giảm nhu cầu duy trì các tài nguyên dư thừa.
Nếu bạn đang duy trì các mẫu AWS CloudFormation của mình trong kho lưu trữ GitHub, bạn có thể nhập các kho lưu trữ GitHub khác dưới dạng mô-đun con và triển khai chúng từ mẫu AWS CloudFormation mẹ của bạn. Để thực hiện việc này, hãy sử dụng lệnh git submodule add.
Một ví dụ điển hình là Amazon Virtual Private Cloud (Amazon VPC) Quick Start. Nếu bạn đang triển khai cơ sở hạ tầng yêu cầu một VPC mới, bạn có thể thêm Amazon VPC Quick Start vào kho lưu trữ của mình dưới dạng mô-đun con. Hãy chuyển quickstart-aws-vpc repo vào tài khoản GitHub của bạn hoặc sao chép trực tiếp từ tài khoản aws-quickstart. Sau đó, stack mẹ của bạn có thể gọi mẫu mô-đun con dưới dạng stack con, chuyển các tham số vào đó để xác định VPC. Các tham số bao gồm số lượng Availability Zones sẵn sàng sử dụng, cho dù có triển khai cổng dịch địa chỉ mạng (NAT) hay không,…
Các Mô đun con phổ biến khác bao gồm Linux bastion Auto Scaling group, Microsoft Active Directory Domain Services và Amazon Elastic Kubernetes Service (Amazon EKS).
4. Sử dụng môi trường phát triển tích hợp với linting
Khoảng thời gian cần thiết để khởi chạy một mẫu AWS CloudFormation phụ thuộc vào độ phức tạp mà có thể kéo dài vài phút đến vài giờ. Với các triển khai phức tạp, nhà phát triển có thể mắc phải và bỏ qua một lỗi đơn giản cho đến khi stack bị lỗi vào giai đoạn cuối của chu trình kiểm tra. Việc phát hiện ra sai lầm vào phút cuối có thể dẫn đến sự thất vọng không cần thiết và lãng phí thời gian.
Mặc dù các mẫu và tập lệnh AWS CloudFormation có thể được phát triển bằng bất kỳ trình soạn thảo văn bản nào, nhưng làm việc trong môi trường phát triển tích hợp (IDE) có thể cải thiện quy trình này. IDE có thể bắt lỗi định dạng trong thời gian thực, có thể hiển thị các khía cạnh mã của bạn bằng các màu khác nhau để làm nổi bật chúng và có thể định dạng lại nhiều dòng mã đồng thời. Hầu hết các IDE có thể kết hợp các công cụ linting của bên thứ ba để đảm bảo rằng mã của bạn được phát triển chính xác cho các ứng dụng cụ thể, bao gồm AWS CloudFormation.
AWS CloudFormation Linter (cfn-lint) là một công cụ mã nguồn mở được duy trì bởi nhóm AWS CloudFormation. Cfn-lint phân tích các mẫu AWS CloudFormation và kiểm tra lỗi cú pháp. (Cfn trong cfn-lint là viết tắt của CloudFormation.) Bằng cách sử dụng IDE đã được cài sẵn linter này, các nhà phát triển có thể bắt lỗi ngay lập tức, giảm thời gian phát triển và thử nghiệm. Bạn có thể tìm thấy các plugin cfn-lint cho các IDE phổ biến trên trang CloudFormation Linter GitHub trong phần Plugin trình chỉnh sửa.