AWS CloudFormation với Terraform: Bạn nên chọn cái nào?

Công cụ hạ tầng như mã code [IaC] là một thuật ngữ đang được nhắc đến rất nhiều trong khoảng thời gian gần đây như một phần không thể thiếu trong lĩnh vực Điện Toán Đám Mây. Thuật ngữ “IaC” là từ viết tắt của “Infrastructure as Code, được gọi là hạ tầng được thiết lập bằng phần mềm.

Nói một cách rõ hơn, IaC cho phép các nhà phát triển hoặc nhóm vận hành tự động quản lý và cung cấp technology stack cho một ứng dụng thông qua phần mềm, thay vì sử dụng quy trình thủ công để cấu hình các thiết bị phần cứng riêng lẻ và hệ điều hành. Đây là một trong những nền tảng quan trọng của DevOps, được thiết kế để nâng cao sự linh hoạt, năng suất và chất lượng công việc trong các tổ chức.

Khi mọi người tìm kiếm các công cụ để triển khai cơ sở hạ tầng như mã code trên AWS, họ thường giới hạn lựa chọn giữa AWS CloudFormation hoặc công cụ mã nguồn mở Terraform. Hãy xem xét sự khác biệt giữa hai công cụ này để có thể xác định xem công cụ nào sẽ phù hợp với nhu cầu của doanh nghiệp/tổ chức của bạn nhé.

CloudFormation

AWS CloudFormation là một dịch vụ quản lý của AWS cung cấp một ngôn ngữ chung giúp bạn có thể mô hình hoá và cung cấp tài nguyên ứng dụng từ AWS hoặc từ bên thứ ba cho môi trường đám mây của bạn một cách an toàn và có thể lặp lại. Điều này cung cấp một điểm tham chiếu duy nhất cho việc thiết kế và phát triển cơ sở hạ tầng AWScả ánh xạ cơ sở hạ tầng AWS.

CloudFormation ẩn đi nhiều chi tiết phức tạp liên quan đến việc quản lý phụ thuộc giữa các tài nguyên AWS. Ngoài ra, CloudFormation cho phép sửa đổi và loại bỏ các tài nguyên đã cung cấp theo quy cách nhất định và dễ dự đoán, giúp việc kiểm soát phiên bản và nhân bản cơ sở hạ tầng của bạn trở nên dễ dàng hơn. CloudFormation được phát triển tập trung vào AWS và là một phần của AWS.

Với CloudFormation, bạn không cần phải xác định các dịch vụ AWS cần được cung cấp hoặc các chi tiết phức tạp về cách thiết lập các dịch vụ này – CloudFormation sẽ thay bạn thực hiện việc này. Sau khi triển khai, bạn có thể hủy bỏ và sửa đổi các tài nguyên AWS một cách dễ dàng bằng việc sử dụng CloudWatch. Nhờ đó, bạn có thể quản lý các phiên bản cơ sở hạ tầng AWS một cách hiệu quả. Bên cạnh đó, bạn còn có thể kiểm tra theo từng bước và có khả năng quay lại phiên bản trước đó (khi được cấu hình đúng).

Terraform‍

Được tạo ra bởi HashiCorp, Terraform là một công cụ phần mềm mã nguồn mở về hạ tầng như mã code, giúp người dùng thiết lập và cung cấp hạ tầng trung tâm dữ liệu. Terraform là một công cụ độc lập, được sử dụng trong lĩnh vực điện toán  đám mây, giúp mã hóa các giao diện lập trình ứng dụng (API) vào các tệp cấu hình biểu đạt có thể được chia sẻ giữa các thành viên nhóm,. Những tệp cấu hình này được xem như mã code, có thể được chỉnh sửa, được đánh giá và được quản lý phiên bản.

Đến đây, chúng ta đã tìm hiểu sơ bộ về hai nền tảng IaC phổ biến hiện nay, hãy xem chúng có những điểm khác biệt nổi bật nào nhé. 

Trạng thái quản lý

Với cả CloudFormation và Terraform, bạn cần theo dõi tất cả các tài nguyên đang được quản lý.

Với CloudFormation, người dùng có thể thực hiện phát hiện độ drift định kỳ trên toàn bộ cơ sở hạ tầng đã cung cấp, và nhận được phản hồi chi tiết nếu có bất kỳ thay đổi nào. Một số tài nguyên trong một CloudFormation stack có thể thay đổi thông số mà không cần người dùng phải loại bỏ hoặc xây dựng lại tài nguyên đích. Trong trường hợp những tài nguyên này khác được coi là không thể thay đổi thì chúng và sẽ được xây dựng lại. Ngoài ra, trước khi CloudFormation xóa một tài nguyên, nó sẽ xác định các phụ thuộc và từ chối lệnh nếu có bất kỳ phụ thuộc nào tồn tại (sẽ còn lại sau khi loại bỏ tài nguyên).

Terraform lưu trạng thái của cơ sở hạ tầng trên máy tính đang cung cấp hoặc trong một trang web từ xa (cho việc sử dụng nhóm). Tệp trạng thái này là một định dạng JSON tùy chỉnh, đóng vai trò như một bản đồ cho Terraform, mô tả các tài nguyên mà nó quản lý và cách cấu hình các tài nguyên đó.

Article 3.1

Vì CloudFormation là một dịch vụ quản lý của AWS, nó sẽ làm điều này cho bạn. CloudFormation sẽ kiểm tra liên tục cơ sở hạ tầng mà nó đã cung cấp để xác định xem nó có duy trì trạng thái và cấu hình đó không. Nếu bạn sử dụng Terraform, nó lưu trạng thái của mình trên ổ đĩa cục bộ, và có tùy chọn trạng thái từ xa, ghi dữ liệu trạng thái vào một kho lưu trữ dữ liệu từ xa, để được chia sẻ giữa tất cả các thành viên trong nhóm. Trạng thái hỗ trợ từ xa Amazon S3, nhưng bạn cần tự cấu hình nó.

Bây giờ chúng ta đã tìm hiểu các khác biệt về quản lý trạng thái, hãy chuyển sang chủ đề về tính mô-đun.

Tính mô-đun

Trong thế giới không ngừng thay đổi của yêu cầu cơ sở hạ tầng, tính linh hoạt là yếu tố quan trọng. CloudFormation và Terraform có cách riêng để đáp ứng nhu cầu này.

Terraform có các mô-đun, đó là những đơn vị chứa nhiều tài nguyên được sử dụng cùng nhau. Mô-đun cho phép nhà phát triển trừu tượng hóa cơ sở hạ tầng của họ thành mã có thể tái sử dụng và chia sẻ, đồng thời tăng tốc độ lặp lại cho nhóm (tương tự như các hàm trong một ngôn ngữ lập trình như Ruby).

CloudFormation sử dụng một hệ thống gọi là “nested stacks” – tức là các mẫu CloudFormation được gọi từ trong các mẫu CloudFormation khác. Các nested stacks này có thể được trừu tượng hóa thành StackSets. Cần lưu ý rằng StackSets yêu cầu các quyền bổ sung, vượt quá quyền của AWS CloudFormation thông thường.

Một lợi ích của Terraform là tính linh hoạt cao hơn so với CloudFormation về mặt tính mô-đun. Các mô-đun Terraform có thể được sử dụng cho bất kỳ nhà cung cấp nào được hỗ trợ, hoặc tổ chức có thể tự tạo ra mô-đun của riêng mình.

Ngược lại, trong môi trường đa đám mây (multi-cloud) hoặc lai (hybrid-cloud), CloudFormation không dễ dàng cho phép người dùng cung cấp hoặc điều phối tự nhiên các tài nguyên không thuộc AWS. Điều này không phải là không thể, vì CloudFormation có tính năng tài nguyên tùy chỉnh, nhưng nó yêu cầu thiết kế và mẫu bổ sung để tích hợp các tài nguyên của bên thứ ba hoặc các dịch vụ AWS không có sẵn một cách tự nhiên.

Article 3.3

Cấu hình

CloudFormation và Terraform khác nhau trong cách xử lý cấu hình và tham số.

Terraform sử dụng các nguồn dữ liệu cụ thể của nhà cung cấp. Cài đặt được thực hiện theo kiểu mô-đun, cho phép lấy dữ liệu hoặc tính toán để sử dụng ở bất kỳ đâu trong cấu hình Terraform. Điều này cho phép cấu hình Terraform sử dụng thông tin được xác định bên ngoài Terraform (như địa chỉ Elastic IP) để cập nhật hoặc cung cấp cơ sở hạ tầng.

CloudFormation sử dụng các tham số và có tối đa 60 tham số cho mỗi mẫu. Mỗi tham số phải có một ID logic và duy nhất so với tất cả các tham số khác trong mẫu. Các tham số phải thuộc loại được hỗ trợ bởi CloudFormation và phải được cung cấp trong thời gian chạy của stack. Ngoài ra, mỗi tham số phải được khai báo và được tham chiếu từ cùng một mẫu. CloudFormation có khả năng sử dụng Dynamic References để lấy các tham số tại thời gian chạy từ bộ lưu trữ tham số của AWS Systems Manager, nếu đã được cấu hình đúng cách.

Ngôn ngữ

Terraform sử dụng HashiCorp Configuration Language (HCL) , một ngôn ngữ được xây dựng bởi HashiCorp. Nó hoàn toàn tương thích với JSON và được tạo ra để cân bằng giữa ngôn ngữ thân thiện với con người và máy tính, trong khi vẫn có thể được hiểu bởi con người.

AWS CloudFormation sử dụng JSON hoặc YAML, trong đó phiên bản YAML dễ đọc hơn một chút (cũng như gọn hơn). CloudFormation cũng có giới hạn 51.000 byte cho phần thân của mẫu. Nếu cần một mẫu lớn hơn, AWS khuyến nghị các nhà phát triển tách các tài nguyên thành các nested stacks.

Sau khi đã xác định những khác biệt đó, hãy xem một số trường hợp sử dụng của Renova Cloud, nơi chúng tôi đã sử dụng Terraform như một giải pháp cho khách hàng.

Trường hợp sử dụng của khách hàng: GSM

GSM là nhà sản xuất xe điện hàng đầu tại Việt Nam. Họ quyết định chuyển sang sử dụng điện toán đám mây AWS, hợp tác với Renova Cloud với tư cách là nhà cung cấp dịch vụ được quản lý. Renova Cloud đã hỗ trợ việc áp dụng Amazon EKS, tin tưởng giao phó khả năng điều phối vùng chứa của nó sẽ cung cấp giải pháp mạnh mẽ cho cơ sở hạ tầng CNTT phức tạp của GSM. Kết quả là, công ty sau đó đã có thể mở rộng quy mô hoạt động của nền tảng trên nhiều khu vực khác nhau, đảm bảo hiệu suất và khả năng phản hồi tối ưu.

6 1

Bức tranh lớn hơn – CloudFormation hoặc Terraform

Cả hai đều là công cụ quản lý cơ sở hạ tầng đám mây mạnh mẽ. Nếu bạn đã sử dụng AWS và sử dụng tất cả các công cụ AWS, CloudFormation có thể thuận tiện hơn, đặc biệt nếu bạn không có sự ràng buộc bên ngoài nào từ bên thứ ba. Tuy nhiên, nếu bạn đang tìm kiếm sự linh hoạt bổ sung từ nền tảng bất khả tri trên nền tảng đám mây tích hợp với các dịch vụ AWS (và của tất cả các nhà cung cấp phổ biến khác), Terraform có thể hữu ích hơn cho tổ chức của bạn. Điều quan trọng là không chỉ nhìn vào những gì đang hoạt động hiện tại – mà cả trạng thái tương lai của bất kỳ cơ sở hạ tầng nào có thể ra sao. Cả hai bộ công cụ đều có lợi ích lâu dài và quyết định cuối cùng có thể phụ thuộc vào khả năng sử dụng đơn giản và sự thoải mái của nhà phát triển. Cho dù bạn đưa ra lựa chọn nào thì việc sử dụng một trong những “con dao của quân đội Thụy Sĩ” này của cơ sở hạ tầng AWS chắc chắn sẽ tăng năng suất, tính di động và hiệu quả.

FAQ

Làm thế nào AWS CloudFormation và Terraform tích hợp với các công cụ DevOps và CI/CD khác?

Khi xem xét tích hợp và tương thích của AWS CloudFormation và Terraform với các công cụ DevOps và CI/CD khác, quan trọng là nhận ra rằng cả hai đều được thiết kế với sự tự động hóa và cộng tác trong tư duy. Terraform, là một công cụ mã nguồn mở, thường có phạm vi tích hợp rộng hơn với nhiều công cụ DevOps khác nhau nhờ vào hệ thống plugin phong phú và đóng góp từ cộng đồng. Nó hoạt động mượt mà với các công cụ CI/CD như Jenkins, GitLab và GitHub Actions, cho phép thay đổi cơ sở hạ tầng là một phần của các đường ống CI/CD. AWS CloudFormation, mặc dù cung cấp tích hợp sâu trong hệ sinh thái AWS, bao gồm tích hợp trực tiếp với AWS CodePipeline và các dịch vụ AWS khác, có thể yêu cầu các công cụ bổ sung hoặc kịch bản tùy chỉnh để tích hợp với các nền tảng CI/CD của bên thứ ba.

article 3.4

AWS CloudFormation và Terraform hoạt động như thế nào trên quy mô lớn, đặc biệt là trong các môi trường lớn, phức tạp với hàng trăm hoặc hàng nghìn tài nguyên?

Về hiệu suất và khả năng mở rộng, cả hai công cụ đều được thiết kế để xử lý việc triển khai cơ sở hạ tầng quy mô lớn, nhưng cách tiếp cận của chúng khác nhau. Quản lý trạng thái của Terraform cho phép nó quản lý và theo dõi trạng thái của số lượng lớn tài nguyên một cách hiệu quả trên nhiều nhà cung cấp, điều này có lợi trong các môi trường phức tạp. Tuy nhiên, việc quản lý trạng thái Terraform ở quy mô rất lớn có thể trở nên khó khăn và có thể yêu cầu các biện pháp quản lý trạng thái cẩn thận, chẳng hạn như khóa trạng thái và lưu trữ trạng thái từ xa. CloudFormation được tích hợp sâu với AWS và được tối ưu hóa để quản lý tài nguyên AWS, điều này có thể giúp nó đạt hiệu quả cao trong môi trường AWS. Tuy nhiên, việc quản lý các hoạt động triển khai rất lớn bằng CloudFormation có thể yêu cầu tổ chức mẫu tỉ mỉ và có thể gặp phải các giới hạn dành riêng cho từng dịch vụ.

Lộ trình học tập liên quan đến AWS CloudFormation và Terraform dành cho người mới bắt đầu là gì và tôi có thể tìm hỗ trợ cho những công nghệ này ở đâu?

Lộ trình học tập cho cả AWS CloudFormation và Terraform có thể khác nhau tùy thuộc vào kiến thức nền tảng của người dùng. Việc sử dụng HCL (Ngôn ngữ cấu hình HashiCorp) của Terraform thường được khen ngợi vì tính dễ đọc và đơn giản, điều này có thể giúp người mới bắt đầu dễ nắm bắt hơn. Các tài liệu, hướng dẫn và diễn đàn cộng đồng phong phú góp phần tạo nên một môi trường học tập hỗ trợ. CloudFormation sử dụng JSON hoặc YAML, có thể quen thuộc hơn với những người đã quen làm việc với các dịch vụ AWS, nhưng độ phức tạp tổng thể của các cấu hình dành riêng cho AWS có thể khiến quá trình học tập trở nên khó khăn hơn. Sự hỗ trợ cộng đồng dành cho CloudFormation rất mạnh mẽ trong cộng đồng người dùng AWS, mặc dù bản chất nguồn mở của Terraform đã thúc đẩy mạng lưới hỗ trợ cộng đồng lớn hơn, đa dạng hơn.