Giới thiệu
Infrastructure as Code là cái gì
Infrastructure as Code nôm na có thể hiểu là viết code để mô tả và cung cấp infrastructure của chúng ta.
Infrastructure chính là những thứ như hệ thống máy chủ, ec2, mạng, database ... mỗi máy chủ có nhưng config mạng, security riêng phức tạp ... tiếng việt gọi là cơ sở hạ tầng Ví dụ thay vì sử dụng UI của aws để tạo ec2, vps , load balancer các kiểu thì bây giờ chúng ta sẽ viết code để tạo chúng.
Đến đây bạn có thể dễ dàng hình dung lợi ích của infrasructure , việc chung ta config bằng tay và nếu có việc phải lặp lại có thể gây sai sót, và phức tạp, lặp đi lặp lại. Rồi nếu chung ta quên document, hoặc viết sai thì sao = > infrastructure as Code cơ bản chính là document của cả hệ thống của chúng ta, mô tả lại chính xác nhưng gi chúng ta có.
Tóm gọn lại
Lợi ích của việc sử dụng Infrastructure as Code:
- Giảm thiểu rủi ro.
- Tôi ưu resource.
- Duy trì môi trường ổn đinh, nhất quán và dễ dàng triển khai.
- Tài liệu hóa infrastructure.
những đặc trưng của 1 Infrastructure
Có nhiều infrastructure as code hiện này như
- Teraform
- Ansible
- Pulumi
- Heat
- Chef
- CloudFormation
Nhìn chung để so sánh giữa chúng, thường có những đặc trưng sau đây
Type: config management vs Provisioning
config management tool tiêu biểu như là ansible và saltstack ... đặc điểm của chúng thiết kế giúp chúng ta config trên nhưng server có sẵn. Provisioning được thiết kế thiên hơn để xây dựng và provising.
Mutable vs Ummutable
Hiểu đại loại như sau: Mutable: có thể thay đổi thủ công, theo cách truyền thống. immutable: không sao giờ được sửa đổi sau khi triển khai.
ví dụ bạn có ec2 2cpu, 1 core => và bạn sử dụng terraform để tạo ra chúng, sau mỗi lần thay đổi như 1 core => 2 core, bạn cần tiếp tục sử dụng teraform để update chúng. việc bạn can thiệp bằng UI để thay đổi ec2 có thể khiến teraform không hiểu được trạng thái hiện tại và không hoạt động như mong muốn => Ummutable
Trong khi config management như Ansible có thể làm được việc này
pull vs push vs push & pull
push:bạn có instructions script gì đó, từ máy của mình bạn bấm nút => push lên server và thực thi
pull: ví dụ như Chef, sẽ được thực thi từ máy server, pull instructions scripts về.
nói chung cũng đơn giản.
approach delarative vs imperative ( nhiều docs gọi là Procedural , ý nghĩa cũng như nhau)
imperative(Procedural): bạn phải viết script step by step , tiếng việt gọi là lập trình mệnh lệnh delarative: Code của bạn chính là kết quả cuối cùng , lập trình khai báo ví dụ cho dễ hiểu
delarative:
want : 3 eggs
=> tool đưa cho bạn 3 quả trứng
sau đó bạn update
want : 5 eggs
=> tool hiểu, thèn này muốn 5 quả trứng, hôm bữa mình có đưa cho nó 3 quả rồi, giờ đưa 2 quả nữa. , đại loại là bạn khai báo nhưng gì bạn muốn
imperative: cũng tương tự như trên đổi với kiểu imperative (lập trình mệnh lệnh)
- ban đầu tool đưa bạn 3 quả trứng, sau đó đưa thêm 5 quả nữa => 8 => kêu cái gì thì tôi làm cái đó
Language
cái này thì quá trời: ruby, yaml,python, typescript, HCL ...
nguồn tại đây nhé https://alpacked.io/blog/infrastructure-as-code-for-devops/
Pulumi
Từ mấy kiến thức và cái bản phía trên chắc bạn cũng hình dung được Pulumi là gì
- Là 1 Infrastructure as Code
- Type Provisioning,
- Immutable
- Push method
- Declarative
- và sử dụng 1 đống ngôn ngữ: JS,TS,Python, Go, C# ....
Tại sao dùng Pulumi và giới thiệu về series này
Terraform là 1 Provisioning Infrastructure as Code nổi tiếng, có thể gọi là top 1 hiện nay cũng không sai.
Điểm khác biệt nổi bật giữa terraform và pulumi mà chúng ta dễ dàng nhìn thấy chính là ngôn ngữ, terraform sử dụng HCL, 1 ngôn ngữ đặc tả provison được phát triển riêng cho nó, với nhưng syntax gói gọn. trong khi pulumi sử dụng chính những program language mà chúng ta sài hàng ngày ts,js, python
=> vậy việc sài pulumi nghe có vẻ tiện lợi hơn, dễ học và dễ tiếp cận hơn, tôi cũng không chắc nữa, series này chính là quá trình tự học pulumi của tôi với 2 ngôn ngữ chính mà tôi sử dụng là python vs typescript, và với aws cloud. tôi sẽ so sánh nó trực tiếp với terraform qua từng bài viết, để đi tơi kết luận cuối cùng. Vì đây là series vừa tự học vừa viết, nên các kiến thức có thể sai , mong được mọi người góp ý và sữa đổi