added content
This commit is contained in:
parent
121a9a987f
commit
5b9432bcfa
@ -1,27 +1,35 @@
|
|||||||
## Cơ sở hạ tầng dưới dạng mã (Iac): Bức Tranh Toàn Cảnh!
|
---
|
||||||
|
title: '#90DaysOfDevOps - Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC) - Ngày 56'
|
||||||
|
published: false
|
||||||
|
description: 90DaysOfDevOps - Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC)
|
||||||
|
tags: 'devops, 90daysofdevops, learning'
|
||||||
|
cover_image: null
|
||||||
|
canonical_url: null
|
||||||
|
id: 1048709
|
||||||
|
---
|
||||||
|
|
||||||
Ngày nay ở bất kì lĩnh vực nào, chúng ta đang ở trong thời kì phát triển và tận dụng tối đa máy tính, máy móc thay con người xử lý các việc lặp đi lặp lại để bảo đảm giảm thiểu sai sót cá nhân trong mọi công việc
|
## Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC)
|
||||||
Ví dụ: máy đóng hàng, phân loại hàng, dây chuyền sản xuất nước ngọt v..v. Hay nói riêng lĩnh vực công nghệ thông tin: xây dựng hạ tầng, tự động hóa triển khai ứng dụng
|
|
||||||
|
|
||||||
Vậy? chúng ta - là những lập trình viên xây dựng ra các ứng dựng, hệ thống tự động hóa nói trên như thế nào
|
Con người phạm sai lầm và tự động hoá là đường đi đúng đắn!
|
||||||
Chúng đã xây dựng những kịch bản trong trường hợp rủi ro mất toàn bộ hạ tầng vật lý, ảo hóa, điện toán đám mây?
|
|
||||||
Mất bao lâu để chúng ta có thể thay thế toàn bộ chúng trong trường hợp nêu trên?
|
|
||||||
|
|
||||||
Cơ sở hạ tầng dưới dạng mã ra đời nhằm giúp chúng ta có khả năng trả lời các câu hỏi trên, kiểm tra, thay thế trong trường hợp sự cố, tuy nhiên chúng ta không nên nhầm lẫn chúng với khái niệm sao lưu và phục hồi. Thay vào đó, xét theo khía cạnh về cơ sở hạ tầng và các môi trường phát triển phần mềm, chúng ta có khả năng triển khai, vận hành và thay đổi chúng một cách thân thiện, và dễ dàng nhất.
|
Bạn đang làm thế nào để xây dựng hế thống của bạn?
|
||||||
|
|
||||||
TLDR; Chúng ta có khả năng sử dụng mã để xây dựng lại toàn bộ môi trường từ đầu.
|
Kế hoạch của bạn là gì nếu bạn mất tất cả mọi thứ hôm nay, các máy chủ vật lý, máy ảo, VMs trên điện toán đám mây, Cloud PaaS...?
|
||||||
|
|
||||||
Nếu còn nhớ ngay từ những ngày đầu tiên chúng ta đã nhắc đến khái niệm DevOps nói chung là một cách để phá vỡ rào cản để cung cấp hệ thống cho môi trường (production) của một hệ thống công nghệ thông tin một cách an toàn và nhanh chóng.
|
Bạn sẽ mất bao lâu để thay đổi mọi thứ?
|
||||||
|
|
||||||
Cơ sở hạ tầng dưới dạng mã giúp chúng ta cung cấp các hệ thống này, chúng ta cũng đã nói đến rất nhiều các quy trình, công cụ. IaC mang đến chúng ta những công cụ đơn giản để thực hiện quy trình triển khai hạ tầng như vậy.
|
Cơ sở hạ tầng dưới dạng mã (Infrastructure as Code - IaC) cung cấp giải pháp để có thể thực hiện được việc này, đồng thời có thể kiểm thử chúng, chúng ta không nên nhầm lẫn điều này với sao lưu và phục hồi, xét về cơ sở hạ tầng và môi trường, các nền tảng của bạn sẽ được xử lý và đối xử như cách bạn nuôi thú cưng và gia xúc.
|
||||||
|
|
||||||
Ở phần này, chúng ta sẽ tập trung vào cơ sở hạ tầng dưới dạng mã (IaC). Các bạn cũng có thể nghe nói đến cơ sở hạ tầng từ mã, cấu hình dạng mã (CaS). Tuy nhiên xét đến mức độ phổ biến chúng ta sẽ hiểu nó là Cơ Sở Hạ Tầng Dưới Dạng Mã (IaC)
|
TLDR là chúng ta có thể sử dụng mã để xây dựng lại toàn bộ môi trường của mình.
|
||||||
|
|
||||||
Ở bài viết gốc, tác giả nhắc đến việc sử dụng IaC giống như chúng ta đang chăn nuôi gia súc và vật nuôi trong nhà với sự hài hòa, thân thiện với con người.
|
Nếu chúng ta còn nhớ ngay từ đầu, chúng ta đã nói về DevOps nói chung là một cách phá vỡ các rào cản để triển khai các hệ thống đến production một cách nhanh chóng và an toàn.
|
||||||
|
|
||||||
|
Cơ sở hạ tầng dưới dạng mã (IaC) giúp chúng ta triển khai các hạ tầng hệ thống, chúng ta đã nói rất nhiều về quy trình và các công cụ. IaC mang đến cho chúng ta nhiều công cụ để có thể có thể quen thuộc với việc làm điều này trong quy trình triển khai hệ thống.
|
||||||
|
|
||||||
|
Chúng ta sẽ tập trung vào Cơ sở hạ tầng dưới dạng mã trong tuần này. Bạn cũng có thể nghe điều này được đề cập với các khái niệm như Cơ sở hạ tầng từ mã hoặc cấu hình dưới dạng mã. Tôi nghĩ thuật ngữ phổ biến nhất vẫn sẽ là "Cơ sở hạ tầng dưới dạng mã - IaC"
|
||||||
### Tính thân thiện
|
### Tính thân thiện
|
||||||
|
|
||||||
Cùng xem xét đến các yếu tố ban đầu của DevOps, chúng ta đã nghe nói đến yêu cầu của việc xây dựng một ứng dụng mới, hầu hết trước đây chúng ta sẽ triển khai, chuẩn bị các hệ thống máy chủ một cách thủ công. Các bước này bao gồm:
|
Nếu chúng ta xem xét về thời trước khi có DevOps, nếu chúng ta có yêu cầu xây dựng ứng dụng mới, chúng ta sẽ chuẩn bị phần lớn các máy chủ của mình theo cách thủ công, việc này cũng giống như bạn chăm sóc cho thú cưng của mình.
|
||||||
|
|
||||||
- Triển khai máy ảo | Trước khi có công nghệ ảo hóa thì sẽ là các máy chủ vật lý và cài đặt hệ điều hành
|
- Triển khai máy ảo | Trước khi có công nghệ ảo hóa thì sẽ là các máy chủ vật lý và cài đặt hệ điều hành
|
||||||
- Cài đặt, cấu hình mạng
|
- Cài đặt, cấu hình mạng
|
||||||
@ -30,7 +38,7 @@ Cùng xem xét đến các yếu tố ban đầu của DevOps, chúng ta đã ng
|
|||||||
- Cấu hình phần mềm
|
- Cấu hình phần mềm
|
||||||
- Cài đặt cơ sở dữ liệu
|
- Cài đặt cơ sở dữ liệu
|
||||||
|
|
||||||
Đương nhiên là trước đây, tất cả các tác vụ này đều được thực hiện thủ công bởi chuyên viên quản trị hệ thống SysAdmin. Đối với ứng dụng có quy mô lớn hơn, cần nhiều tài nguyên và máy chủ hơn, đương nhiên sẽ cần nhiều công sức hơn để cài đặt chúng. Do vậy chúng sẽ lấy đi rất nhiều công sức của nhân lực lao động (là chính chúng ta) cũng như thời gian, điều mà các doanh nghiệp sẽ phải chi trả trong toàn bộ quá trình xây dựng môi trường công nghệ thông tin ứng dụng này. Đặc biệt là ngay từ đầu nội dung buổi hôm nay tác giả đã chia sẻ, việc gặp rủi ro từ cá nhân đều có thể xẩy ra khiến chi phí để bù lấp sai lầm này có thể sẽ rất lơn, vì vậy tự động hóa sẽ là sự lựa chọn hàng đầu.
|
Trước đây, tất cả các tác vụ này đều được thực hiện thủ công bởi chuyên viên quản trị hệ thống SysAdmin. Đối với ứng dụng có quy mô lớn hơn, cần nhiều tài nguyên và máy chủ hơn, đương nhiên sẽ cần nhiều công sức hơn để cài đặt chúng. Do vậy chúng sẽ lấy đi rất nhiều công sức của nhân lực lao động (là chính chúng ta) cũng như thời gian, điều mà các doanh nghiệp sẽ phải chi trả trong toàn bộ quá trình xây dựng môi trường công nghệ thông tin ứng dụng này. Đặc biệt là ngay từ đầu nội dung bài viết tôi đã chia sẻ, việc gặp rủi ro từ cá nhân đều có thể xảy ra khiến chi phí để bù lấp sai lầm này có thể sẽ rất lơn, vì vậy tự động hóa sẽ là sự lựa chọn hàng đầu.
|
||||||
|
|
||||||
Quay trở lại nội dung chính, tiếp theo sau khi các bước cài đặt ban đầu hoàn thiện, chúng ta vẫn còn cần tiến hành bảo trì, quản lý và vận hành các hệ thống máy chủ nói trên, bao gồm:
|
Quay trở lại nội dung chính, tiếp theo sau khi các bước cài đặt ban đầu hoàn thiện, chúng ta vẫn còn cần tiến hành bảo trì, quản lý và vận hành các hệ thống máy chủ nói trên, bao gồm:
|
||||||
|
|
||||||
@ -43,31 +51,34 @@ Quay trở lại nội dung chính, tiếp theo sau khi các bước cài đặt
|
|||||||
|
|
||||||
Các bạn hãy tưởng tượng từng đó công việc sẽ được lặp đi lặp lại cho các môi trường phát triển như: dev, test, production ... độ phức tạp vì vậy cũng tăng lên.
|
Các bạn hãy tưởng tượng từng đó công việc sẽ được lặp đi lặp lại cho các môi trường phát triển như: dev, test, production ... độ phức tạp vì vậy cũng tăng lên.
|
||||||
|
|
||||||
Đó cũng chính là lý do mà IaC giải quyết được các vấn đề này, việc triển khai lúc này cũng giống như việc chúng ta nuôi dưỡng một vật nuôi trong gia đình, chúng ta có thể đặt tên cho chúng, nuôi dưỡng chúng và sống cùng chúng ta, gọi là vòng đời của một phần mềm (SDLC)
|
Đây là lúc cơ sở hạ tầng dưới dạng mã xuất hiện, ở trên đã có nhiều việc chúng ta chăm sóc những máy chủ này như những thú cưng, mọi người thậm chí còn còn gọi các máy chủ của mình với tên gọi như thú cưng hoặc ít nhất là đặt tên cho chúng vì chúng sẽ ở đó một thời gian và họ hi vọng chúng sẽ trở thành một phần của "gia đình" trong một thời gian.
|
||||||
|
|
||||||
Với IaC, chúng ta tự động hóa tất cả các bước nêu trên từ đầu đến cuối. IaC chính là khái niệm và một số các công cụ chúng ta quan tâm để khởi tạo tự động hạ tầng, trong trường hợp xấu, rủi ro xẩy ra và ảnh hưởng đến hệ thống máy chủ, chúng ta hoàn toàn có thể loại bỏ nó và khởi tạo một máy chủ khác để thay thế nó. Cũng chính vì nó được tự động hóa hoàn toàn nên khi máy chủ mới được khởi tạo nó sẽ giống chính xác hoàn toàn với các đoạn mã mà chúng ta viết. **Câu này khó quá** `At this point we don't care what they are called they are there in the field serving their purpose until they are no longer in the field and we have another to replace it either because of a failure or because we updated part or all of our application.`
|
Với cơ sở hạ tầng dưới dạng mã IaC, chúng ta có thể tự động hoá tất các tác vụ này từ đầu đến cuối. Cơ sở hạ tầng dưới dạng mã là một khái niệm và có một số cung cụ thực hiện việc cung cấp cơ sở hạ tầng một cách tự động, và nếu có điều gì đó xảy ra với máy chủ, bạn sẽ vứt bỏ nó và khởi động lại một cái mới. Quá trình này được tự động hoá và máy chủ sẽ được tại chính xác như những gì được cấu hình trong mã. Tại thời điểm này, chúng ta không quan tâm chúng được gọi là gì, chúng ở đó phục vụ mục đích của chúng ta cho đến khi không còn ở đó nữa và chúng ta sẽ có cái khác để thay thế, có thể do bị lỗi hoặc vì chúng ta đã cập nhật một phần hoặc toàn bộ ứng dụng của mình.
|
||||||
|
|
||||||
IaC được sử dụng ở hầu hết mọi nền tảng, công nghệ ảo hóa, công nghệ điện toán đám mấy và công nghệ ứng dụng khai thác lợi ích của điện toán đám mây (Cloud Native) như Kubernetes hay containers.
|
IaC được sử dụng ở hầu hết mọi nền tảng, công nghệ ảo hóa, công nghệ điện toán đám mấy và công nghệ ứng dụng khai thác lợi ích của điện toán đám mây (Cloud Native) như Kubernetes hay containers.
|
||||||
|
|
||||||
## Khởi tạo cơ sở hạ tầng
|
## Khởi tạo cơ sở hạ tầng
|
||||||
Thay vì việc nhắc đến `chef`, `puppet` và `ansible` ngay từ đầu là những công cụ vô cùng phù hợp để giải quyết yêu cầu khởi tạo, cài đặt ứng dụng và quản lý chúng.
|
|
||||||
|
|
||||||
Ở các tác vụ về việc khởi tạo cơ sở hạ tầng dưới đây, IaC không hoàn toàn hỗ trợ được hết các tác vụ này. Tuy nhiên với Terraform (quan điểm cá nhân mình đánh giá đây không phải ngôn ngữ lập trình mà là dạng khai báo), đây là công cụ cho phép chúng ta thực hiện tốt và đầy đủ 2 yếu tố được nêu ở phía dưới, nó cho phép chúng ta khởi tạo hạ tầng từ số 0, chúng ta định nghĩa hạ tầng bằng các đoạn mã với các tham số mà chúng ta đã lên kịch bản rồi triển khai nó (deploy). IaC cũng cho phép chúng ta quản lý hạ tầng và cũng có thể triển khai ứng dụng, tuy nhiên hạn chế của nó là không theo dõi được trạng thái hiện tại của ứng dụng sau khi chúng ta triển khai, về việc này ở nội dung bài sau chúng ta sẽ đề cập đến một công cụ khác là Ansile - một công cụ quản lý cấu hình.
|
Không phải các công cụ IaC sẽ bao gồm tất cả những điều bên dưới, bạn sẽ thấy rằng công cụ chúng ta tìm hiểu ở phần này chỉ thực sự bao gồm 2 lĩnh vực đầu tiên trong danh sách dưới đây. Terraform là công cụ mà chúng ta sẽ cho phép chúng ta bắt đầu từ số không, định nghĩa trong code xem cơ sở hạ tầng của chúng ta sẽ trông như thế nào và sau đó triển khai nó, nó cũng cho phép chúng ta quản lý cơ sở hạ tầng đó và ban đầu cũng có thể triển khai một ứng dụng nhưng sau đó, nó sẽ không quản lý ứng dụng nữa, đây là nơi mà phần tiếp theo sẽ xuất hiện và một công cụ quản lý cấu hình như Ansible sẽ đáp ứng được nhu cầu này một cách tốt hơn.
|
||||||
|
|
||||||
|
Các công cụ như `chef`, `puppet` và `ansible` ngay từ đầu là những công cụ vô cùng phù hợp để giải quyết yêu cầu khởi tạo, cài đặt ứng dụng và quản lý chúng.
|
||||||
|
|
||||||
Vậy các công việc khởi tạo, cài đặt cấu hình một phần mềm sẽ gồm những gì?
|
Vậy các công việc khởi tạo, cài đặt cấu hình một phần mềm sẽ gồm những gì?
|
||||||
|
|
||||||
- Khởi tạo máy chủ đồng loạt
|
- Khởi tạo máy chủ mới
|
||||||
- Cấu hình mạng máy tính
|
- Cấu hình mạng máy tính
|
||||||
- Cấu hình bộ cân bằng tải ứng dụng
|
- Cấu hình bộ cân bằng tải ứng dụng
|
||||||
- Cấu hình ở mức hạ tầng
|
- Cấu hình ở mức hạ tầng
|
||||||
|
|
||||||
### Cấu hình cơ sở hạ tầng
|
### Cấu hình cơ sở hạ tầng
|
||||||
|
|
||||||
- Cài đặt các ứng dụng, phần mềm theo yêu cầu lên máy chủ (các phần mềm để chạy được ứng dụng ví dụ: python, go...)
|
- Cài đặt các ứng dụng, phần mềm theo yêu cầu lên máy chủ (các phần mềm để chạy được ứng dụng ví dụ: python, go...)
|
||||||
- Chuẩn bị hàng loạt máy chủ để triển khai ứng dụng (lặp lại các bước trên trên rất nhiều máy chủ)
|
- Chuẩn bị hàng loạt máy chủ để triển khai ứng dụng (lặp lại các bước trên trên rất nhiều máy chủ)
|
||||||
|
|
||||||
### Triển khai phần mềm
|
### Triển khai phần mềm
|
||||||
|
|
||||||
Sau khi hạ tầng máy chủ đã sẵn sàng chúng ta sẽ triển khai ứng dụng lên các máy chủ này, việc này bao gồm các bước sau:
|
Sau khi hạ tầng máy chủ đã sẵn sàng chúng ta sẽ triển khai ứng dụng lên các máy chủ này, việc này bao gồm các bước sau:
|
||||||
|
|
||||||
- Triển khai, quản lý ứng dụng (bao gồm ứng dụng, thư viện hỗ trợ)
|
- Triển khai, quản lý ứng dụng (bao gồm ứng dụng, thư viện hỗ trợ)
|
||||||
- Bảo trì
|
- Bảo trì
|
||||||
- Cập nhật phần mềm (cũng có thể là các thư viện phụ thuộc)
|
- Cập nhật phần mềm (cũng có thể là các thư viện phụ thuộc)
|
||||||
@ -75,41 +86,43 @@ Sau khi hạ tầng máy chủ đã sẵn sàng chúng ta sẽ triển khai ứn
|
|||||||
|
|
||||||
### Sự khác nhau giữa các công cụ IaC
|
### Sự khác nhau giữa các công cụ IaC
|
||||||
|
|
||||||
Khai báo và trình tự thực hiện
|
Khai báo và trình tự thực hiện (Declarative vs procedural)
|
||||||
Declarative vs procedural
|
|
||||||
|
|
||||||
Trình tự thực hiện
|
Trình tự thực hiện
|
||||||
|
|
||||||
- Các bước trong IaC được làm tuần tự, theo từng bước
|
- Các bước trong IaC được làm tuần tự, theo từng bước
|
||||||
- Khởi tạo máy chủ, thêm máy chủ vào hệ thống và thay đổi cấu hình
|
- Khởi tạo máy chủ, thêm máy chủ vào hệ thống và thay đổi cấu hình
|
||||||
|
|
||||||
Khai báo
|
Khai báo
|
||||||
- Khai báo kết quả mong muốn (eg: tạo 1 hoặc nhiều máy chủ cùng lúc)
|
|
||||||
- Ví dụ: Khởi tạo 2 máy chủ, hoặc 2 bucket
|
|
||||||
|
|
||||||
Tính bất biến và tính khả biến (có thể và không thể thay đổi)
|
- Khai báo kết quả mong muốn (VD: tạo 1 hoặc nhiều máy chủ cùng lúc)
|
||||||
Tác giả so sánh tính khả biến với các con thú cưng, tính bất biến với các loại gia súc
|
- Ví dụ: Khởi tạo 2 máy chủ, hoặc 2 buckets
|
||||||
|
|
||||||
|
Tính bất biến (gia súc) và tính khả biến (thú cưng)
|
||||||
|
|
||||||
Khả biến
|
Khả biến
|
||||||
- Có thể thay đổi cấu hình thay vì ghi đè hoặc thay thế (ví dụ: thay đổi tên của máy chủ Windows, đổi tagging của s3 bucket)
|
- Có thể thay đổi cấu hình thay vì ghi đè hoặc thay thế (ví dụ: thay đổi tên của máy chủ Windows, đổi tagging của s3 bucket)
|
||||||
- Vì có tính khả biến nên vòng đời sẽ lâu hơn.
|
- Vì có tính khả biến nên vòng đời sẽ lâu hơn.
|
||||||
|
|
||||||
Bất biến
|
Bất biến
|
||||||
- Khi muốn thay đổi chúng ta buộc phải thay thế mới
|
- Khi muốn thay đổi chúng ta thay thế mới
|
||||||
- Vòng đời ngắn hơn.
|
- Vòng đời ngắn hơn.
|
||||||
|
|
||||||
Mỗi tài nguyên trong hệ thống đều có thể có một hoặc nhiều tính khả biến và bất biến
|
Mỗi tài nguyên trong hệ thống đều có thể có một hoặc nhiều tính khả biến và bất biến.
|
||||||
|
|
||||||
Lấy ví dụ như sau:
|
Lấy ví dụ như sau:
|
||||||
- 01 AWS S3 bucket khi đã đặt tên (bucket name) sẽ bắt buộc là duy nhất và không thể thay đổi được tuy nhiên ta hoàn toàn có thể thay đổi nhãn (tag) của chúng mà không cần phải tạo mới bucket
|
- 01 AWS S3 bucket khi đã đặt tên (bucket name) sẽ bắt buộc là duy nhất và không thể thay đổi được tuy nhiên ta hoàn toàn có thể thay đổi nhãn (tag) của chúng mà không cần phải tạo mới bucket
|
||||||
- Ví dụ thứ 2, với một container image, chúng ta sẽ cần nó là bất biến, nghĩa là khi muốn cập nhật mã nguồn chúng ta bắt buộc phải tạo container image mới
|
- Ví dụ thứ 2, với một container image, chúng ta sẽ cần nó là bất biến, nghĩa là khi muốn cập nhật mã nguồn chúng ta bắt buộc phải tạo container image mới
|
||||||
|
|
||||||
Với các ví dụ trên, có rất nhiều lựa chọn cho IaC, tuy nhiên không có công cụ IaC nào có thể định nghĩa cũng như giải quyết được hết các tính chất này, thay vào đó chúng ta phải hiểu được tính chất của từng tài nguyên (resource, infra - hạ tầng)
|
Với các ví dụ trên, có rất nhiều lựa chọn cho IaC, tuy nhiên không có công cụ IaC nào có thể định nghĩa cũng như giải quyết được hết các tính chất này, thay vào đó chúng ta phải hiểu được tính chất của từng tài nguyên (resource, infra - hạ tầng)
|
||||||
|
|
||||||
Cũng trong seri này, chúng ta sẽ bắt đầu thực hành với Terraform, công cụ được coi là thích hợp nhất ở thời điểm hiện tại để giúp chúng ta thấy được lợi ích mà IaC mang lại. Việc thực hành cũng là cách tốt nhất để nâng cao khả năng, kỹ năng lập trình.
|
Cũng trong series này, chúng ta sẽ bắt đầu thực hành với Terraform, công cụ được coi là thích hợp nhất ở thời điểm hiện tại để giúp chúng ta thấy được lợi ích mà IaC mang lại. Việc thực hành cũng là cách tốt nhất để nâng cao khả năng, kỹ năng lập trình.
|
||||||
|
|
||||||
Tiếp theo, bắt đầu với lý thuyết về Terraform ở mức độ cơ bản (101) sau đó chúng ta sẽ bắt đầu thực hành
|
Tiếp theo, bắt đầu với lý thuyết về Terraform ở mức độ cơ bản (101) sau đó chúng ta sẽ bắt đầu thực hành
|
||||||
|
|
||||||
## Tài liệu Tham khảo
|
## Tài liệu Tham khảo
|
||||||
Tác giả đã liệt kê ra rất nhiều nội dung bên dưới đây để chúng ta có thể bắt đầu học và tham khảo, với các nội dung này phần nào có thể giúp chúng ta nhanh chóng nắm được khái niệm và các lý thuyết xung quanh IaC
|
|
||||||
|
Tôi đã liệt kê ra rất nhiều nội dung bên dưới đây để chúng ta có thể bắt đầu học và tham khảo, với các nội dung này phần nào có thể giúp chúng ta nhanh chóng nắm được khái niệm và các lý thuyết xung quanh IaC
|
||||||
|
|
||||||
- [What is Infrastructure as Code? Difference of Infrastructure as Code Tools](https://www.youtube.com/watch?v=POPP2WTJ8es)
|
- [What is Infrastructure as Code? Difference of Infrastructure as Code Tools](https://www.youtube.com/watch?v=POPP2WTJ8es)
|
||||||
- [Terraform Tutorial | Terraform Course Overview 2021](https://www.youtube.com/watch?v=m3cKkYXl-8o)
|
- [Terraform Tutorial | Terraform Course Overview 2021](https://www.youtube.com/watch?v=m3cKkYXl-8o)
|
||||||
@ -122,4 +135,5 @@ Tác giả đã liệt kê ra rất nhiều nội dung bên dưới đây để
|
|||||||
- [Terraform Tutorial - The Best Project Ideas](https://www.youtube.com/watch?v=oA-pPa0vfks)
|
- [Terraform Tutorial - The Best Project Ideas](https://www.youtube.com/watch?v=oA-pPa0vfks)
|
||||||
- [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform)
|
- [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform)
|
||||||
|
|
||||||
Hẹn gặp lại các bạn ở ngày tiếp theo [Day 57](day57.md)
|
Hẹn gặp lại các bạn ở ngày [ngày 57](day57.md)
|
||||||
|
|
||||||
|
96
2022/vi/Days/day57.md
Normal file
96
2022/vi/Days/day57.md
Normal file
@ -0,0 +1,96 @@
|
|||||||
|
---
|
||||||
|
title: '#90DaysOfDevOps - Giới thiệu về Terraform - Ngày 57'
|
||||||
|
published: false
|
||||||
|
description: 90DaysOfDevOps - Giới thiệu về Terraform
|
||||||
|
tags: 'devops, 90daysofdevops, learning'
|
||||||
|
cover_image: null
|
||||||
|
canonical_url: null
|
||||||
|
id: 1048710
|
||||||
|
---
|
||||||
|
|
||||||
|
## Giới thiệu về Terraform
|
||||||
|
|
||||||
|
"Terraform là một công cụ để xây dựng, thay đổi và quản lý phiên bản cơ sở hạ tầng một cách an toàn và hiệu quả"
|
||||||
|
|
||||||
|
Trích dẫn trên đến từ HashiCorp, công ty đứng đằng sau Terraform.
|
||||||
|
|
||||||
|
"Terraform là một công cụ phần mềm cơ sở hạ tầng dưới dạng mã mã nguồn mở cung cấp quy trình làm việc với CLI để quản lý hàng trăm dịch vụ điện toán đám mây. Terraform mã hoá các API của các nhà cung cấp thành các tệp cấu hình khai báo"
|
||||||
|
|
||||||
|
HashiCorp có nguồn tài nguyên tuyệt vời tại [HashiCorp Learn](https://learn.hashicorp.com/terraform?utm_source=terraform_io&utm_content=terraform_io_hero) bao gồm tất cả các sản phẩm của họ và cung cấp một số bản demo hướng dẫn rất tốt khi bạn đang cố gắng làm việc với Cơ sở hạ tầng dưới dạng mã.
|
||||||
|
|
||||||
|
Tất cả các nhà cung cấp điện toán đám mây và on-prem thường cung cấp cho chúng ta quyền truy cập vào bảng điều khiển quản lý cho phép chúng ta tạo các tài nguyên của mình thông qua giao diệu người dùng, các nền tảng này cũng cung cấp CLI hoặc truy cập API để tạo các tài nguyên đó nhưng với API, chúng ta có thể khởi tạo rất nhanh chóng.
|
||||||
|
|
||||||
|
Cơ sở hạ tầng dưới dạng mã cho phép chúng ta kết nối với các API đó để triển khai tài nguyên của mình ở trạng thái mong muốn.
|
||||||
|
|
||||||
|
Các công cụ khác cũng được liệt kê ở dưới đây, nếu có công cụ khác, xin các bạn hãy chia sẻ thông qua một PR
|
||||||
|
|
||||||
|
| Nhà cung cấp cụ thể | Không phụ thuộc vào nhà cung cấp |
|
||||||
|
| ------------------------------- | -------------- |
|
||||||
|
| AWS CloudFormation | Terraform |
|
||||||
|
| Azure Resource Manager | Pulumi |
|
||||||
|
| Google Cloud Deployment Manager | |
|
||||||
|
|
||||||
|
Đây là một lý do khác tại sao chúng ta đang sử dụng Terraform, chúng ta không muốn bị phụ thuộc vào một nhà cung cấp cụ thể hoặc nền tảng mà chúng ta muốn sử dụng cho các demos của mình cũng như trong thực tế.
|
||||||
|
|
||||||
|
## Tổng quan về Terraform
|
||||||
|
|
||||||
|
Terraform là một công cụ tập trung vào việc cung cấp hạ tầng, Terraform là một CLI có khả năng khởi tạo, cung cấp các môi trường cơ sở hạ tầng phức tạp. Với Terraform, chúng ta có thể xác định các yêu cầu cơ sở hạ tầng phức tạp tồn tại cục bộ hoặc từ xa (điện toán đám mây) Terraform không chỉ cho phép chúng ta xây dựng mọi thứ từ đầu mà còn duy trì và cập nhật các tài nguyên đó theo suốt vòng đời của chúng.
|
||||||
|
|
||||||
|
Chúng ta sẽ đề cập tới high level trong bài viết này, bạn có thể biết thêm chi tiết và tìm hiểu các tài nguyên khác tại trang[terraform.io](https://www.terraform.io/)
|
||||||
|
|
||||||
|
### Write
|
||||||
|
|
||||||
|
Terraform cho phép chúng ta tạo các tệp cấu hình khai báo để xây dựng môi trường của chúng ta. Các tệp được viết bằng ngôn ngữ cấu hình của HashiCorp (HCL - HashiCorp Configuration Language) cho phép mô tả ngắn gọn các tài nguyên bằng cách sử dụng các khối, đối số và biểu thức. Tất nhiên, chúng ta sẽ xem xét những điều này một cách chi tiết khi triển khai VM, COntainer và Kubernetes.
|
||||||
|
|
||||||
|
### Plan
|
||||||
|
|
||||||
|
Khả năng kiểm tra xem các tệp cấu hình trên có triển khai những gì chúng ta muốn thấy hay không bằng cách sử dụng các chức năng cụ thể của Terraform CLI trước khi triển khai hoặc thay đổi bất cứ thứ gì. Hãy nhớ rằng Terraform là một công cụ được sử dụng xuyên suốt cho cơ sở hạ tầng của bạn, nếu bạn muốn thay đổi các khía cạnh của cơ sở hạ tầng của mình, bạn nên thực hiện điều đó thông qua Terraform để tất cả mọi thứ được nắm bắt thông qua mã.
|
||||||
|
|
||||||
|
### Apply
|
||||||
|
|
||||||
|
Khi đã hài lòng, bạn có thể áp dụng cấu hình này cho nhiều providers có sẵn trong Terraform. Bạn có thể thấy danh sách các provider có sẵn tại [đây](https://registry.terraform.io/browse/providers)
|
||||||
|
|
||||||
|
Một điều khác cần đề cập là cũng có sẵn các modules, nó tương tự như container images ở chỗ các modules này đã được tạo và chia sẻ công khai, do đó bạn không phải tạo đi tạo lại chúng mà chỉ cần sử dụng lại cách tốt nhất để triển khai một tài nguyên cụ thể theo cùng một cách ở mọi nơi. Bạn có thể tìm thấy các module có sẵn [tại đây](https://registry.terraform.io/browse/modules)
|
||||||
|
|
||||||
|
Quy trình làm việc của Terraform trông như thể này: (_lấy từ website của terraform_)
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
### Terraform vs Vagrant
|
||||||
|
|
||||||
|
Trong thử thách này, chúng ta đã sử dụng Vagrant, một công cụ mã nguồn mở khác của Hashicorp tập trung vào các môi trường phát triển.
|
||||||
|
|
||||||
|
- Vagrant là một công cụ tập trung vào việc quản lý môi trường phát triển
|
||||||
|
- Terraform là một công cụ để xây dựng cơ sở hạ tầng.
|
||||||
|
|
||||||
|
Bạn có thể tìm thấy sự so sánh giữa hai công cụ tại đây trên [trang web chính thức của Hashicorp](https://www.vagrantup.com/intro/vs/terraform)
|
||||||
|
|
||||||
|
## Cài đặt Terraform
|
||||||
|
|
||||||
|
Không có nhiều thứ để nói cho việc cài đặt Terraform.
|
||||||
|
|
||||||
|
Terraform hỗ trợ đa nền tảng và bạn có thể thấy bên dưới trên máy tính Linux của tối, chúng ta có một số tuỳ chọn để tải xuống và cài đặt CLI
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Sử dụng `arkade` để cài đặt Terraform, arkade là một công cụ nhỏ, tiện dụng để cài đặt các công cụ, ứng dụng và clis cần thiết vào hệ thống của bạn. Một câu lệnh `arkade get terraform` đơn giản sẽ cho phép cập nhật terraform nếu có hoặc cũng cài đặt Terraform CLI.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Chúng ta sẽ tìm hiểu thêm về HCL và sau đó bắt đầu sử dụng Terraform để tạo một số tài nguyên cơ sở hạ tầng trên các nền tảng khác nhau.
|
||||||
|
|
||||||
|
## Tài liệu tham khảo
|
||||||
|
|
||||||
|
|
||||||
|
- [What is Infrastructure as Code? Difference of Infrastructure as Code Tools](https://www.youtube.com/watch?v=POPP2WTJ8es)
|
||||||
|
- [Terraform Tutorial | Terraform Course Overview 2021](https://www.youtube.com/watch?v=m3cKkYXl-8o)
|
||||||
|
- [Terraform explained in 15 mins | Terraform Tutorial for Beginners](https://www.youtube.com/watch?v=l5k1ai_GBDE)
|
||||||
|
- [Terraform Course - From BEGINNER to PRO!](https://www.youtube.com/watch?v=7xngnjfIlK4&list=WL&index=141&t=16s)
|
||||||
|
- [HashiCorp Terraform Associate Certification Course](https://www.youtube.com/watch?v=V4waklkBC38&list=WL&index=55&t=111s)
|
||||||
|
- [Terraform Full Course for Beginners](https://www.youtube.com/watch?v=EJ3N-hhiWv0&list=WL&index=39&t=27s)
|
||||||
|
- [KodeKloud - Terraform for DevOps Beginners + Labs: Complete Step by Step Guide!](https://www.youtube.com/watch?v=YcJ9IeukJL8&list=WL&index=16&t=11s)
|
||||||
|
- [Terraform Simple Projects](https://terraform.joshuajebaraj.com/)
|
||||||
|
- [Terraform Tutorial - The Best Project Ideas](https://www.youtube.com/watch?v=oA-pPa0vfks)
|
||||||
|
- [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform)
|
||||||
|
|
||||||
|
Hẹn gặp lại vào [ngày 58](day58.md)
|
@ -1,3 +1,13 @@
|
|||||||
|
---
|
||||||
|
title: '#90DaysOfDevOps - Ngôn ngữ cấu hình HashiCorp (HCL) - ngày 58'
|
||||||
|
published: false
|
||||||
|
description: 90DaysOfDevOps - Ngôn ngữ cấu hình HashiCorp (HCL)
|
||||||
|
tags: 'devops, 90daysofdevops, learning'
|
||||||
|
cover_image: null
|
||||||
|
canonical_url: null
|
||||||
|
id: 1048741
|
||||||
|
---
|
||||||
|
|
||||||
## HashiCorp Configuration Language (HCL)
|
## HashiCorp Configuration Language (HCL)
|
||||||
|
|
||||||
Trước khi chúng ta bắt đầu tạo các thành phần với Terraform, chúng ta cần tìm hiểu một chút về ngôn ngữ cấu hình của HashiCorp (HCL). Cho đến nay, trong thử thách 90 ngày DevOps, chúng ta đã tìm hiểu về một số ngôn ngữ script và lập trình khác nhau, ví dụ như ngôn ngữ lập trình Go, sau đó đến với các tập lệnh bash, thậm chí chúng ta cũng có đề cập đến Python khi làm việc với tự động hóa triển khai mạng máy tính.
|
Trước khi chúng ta bắt đầu tạo các thành phần với Terraform, chúng ta cần tìm hiểu một chút về ngôn ngữ cấu hình của HashiCorp (HCL). Cho đến nay, trong thử thách 90 ngày DevOps, chúng ta đã tìm hiểu về một số ngôn ngữ script và lập trình khác nhau, ví dụ như ngôn ngữ lập trình Go, sau đó đến với các tập lệnh bash, thậm chí chúng ta cũng có đề cập đến Python khi làm việc với tự động hóa triển khai mạng máy tính.
|
||||||
@ -8,16 +18,16 @@ Tiếp theo, chúng ta phải tìm hiểu về HashiCorp Configuration Language
|
|||||||
|
|
||||||
Nhìn chung, bạn nên sử dụng Terraform để triển khai hạ tầng của mình trên các hệ thống điện toán đám công cộng (AWS, Google, Microsoft Azure), cũng như trong môi trường ảo hóa như VMware, Microsoft Hyper-V, Nutanix AHV. Trên đám mây công cộng, Terraform cho phép chúng ta làm nhiều hơn chỉ triển khai tự động máy ảo. Chúng ta có thể tạo ra tất cả các hạ tầng cần thiết như khối công việc PaaS và tài nguyên mạng như VPC và Security Groups.
|
Nhìn chung, bạn nên sử dụng Terraform để triển khai hạ tầng của mình trên các hệ thống điện toán đám công cộng (AWS, Google, Microsoft Azure), cũng như trong môi trường ảo hóa như VMware, Microsoft Hyper-V, Nutanix AHV. Trên đám mây công cộng, Terraform cho phép chúng ta làm nhiều hơn chỉ triển khai tự động máy ảo. Chúng ta có thể tạo ra tất cả các hạ tầng cần thiết như khối công việc PaaS và tài nguyên mạng như VPC và Security Groups.
|
||||||
|
|
||||||
Có hai khía cạnh quan trọng trong Terraform, chúng ta có mã nguồn mà chúng ta sẽ thảo luận trong bài viết này và sau đó chúng ta còn có trạng thái (state). Cả hai điều này cùng nhau có thể được gọi là lõi của Terraform. Tiếp theo, chúng ta có môi trường mà chúng ta muốn tương tác và triển khai, điều này được thực hiện bằng cách sử dụng các nhà cung cấp (providers) của Terraform, đã được đề cập ngắn gọn trong buổi trước, nhưng chúng ta có nhà cung cấp AWS, nhà cung cấp Azure, v.v. Có hàng trăm nhà cung cấp khác nhau.
|
Có hai khía cạnh quan trọng trong Terraform, chúng ta có mã nguồn mà chúng ta sẽ thảo luận trong bài viết này và sau đó chúng ta còn có trạng thái (state). Cả hai điều này cùng nhau có thể được gọi là lõi của Terraform. Tiếp theo, chúng ta có môi trường mà chúng ta muốn tương tác và triển khai, điều này được thực hiện bằng cách sử dụng các provider của Terraform, đã được đề cập ngắn gọn trong buổi trước, nhưng chúng ta có provider AWS, provider Azure, v.v. Có hàng trăm provider khác nhau.
|
||||||
|
|
||||||
### Hướng dẫn sử dụng Terraform đơn giản
|
### Hướng dẫn sử dụng Terraform đơn giản
|
||||||
|
|
||||||
Hãy xem qua một tệp `.tf` trong Terraform để hiểu hơn về cấu trúc. Ví dụ đầu tiên chúng ta sẽ thảo luận sẽ là mã để triển khai tài nguyên lên AWS. Điều này cũng đòi hỏi bạn đã cài đặt AWS CLI trên hệ thống của bạn và đã cấu hình cho tài khoản của bạn.
|
Hãy xem qua một tệp `.tf` trong Terraform để hiểu hơn về cấu trúc. Ví dụ đầu tiên chúng ta sẽ thảo luận sẽ là mã để triển khai tài nguyên lên AWS. Điều này cũng đòi hỏi bạn đã cài đặt AWS CLI trên hệ thống của bạn và đã cấu hình cho tài khoản của bạn.
|
||||||
|
|
||||||
|
|
||||||
### Nhà cung cấp
|
### Provider
|
||||||
|
|
||||||
Ở đầu cấu trúc tệp `.tf`, thông thường được gọi là `main.tf`, ít nhất cho đến khi chúng ta làm các thứ phức tạp hơn, chúng ta sẽ định nghĩa các nhà cung cấp mà chúng ta đã đề cập trước đó. Nguồn của nhà cung cấp AWS như bạn có thể thấy là `hashicorp/aws`, điều này có nghĩa là nhà cung cấp này được duy trì hoặc đã được phát triển bởi chính HashiCorp và cộng đồng sử dụng. Mặc định, bạn sẽ tham chiếu đến các nhà cung cấp có sẵn từ Terraform Registry, bạn cũng có thể viết các nhà cung cấp riêng của bạn và sử dụng chúng cục bộ hoặc tự xuất bản lên Terraform Registry.
|
Ở đầu cấu trúc tệp `.tf`, thông thường được gọi là `main.tf`, ít nhất cho đến khi chúng ta làm các thứ phức tạp hơn, chúng ta sẽ định nghĩa các provider mà chúng ta đã đề cập trước đó. Nguồn của provider AWS như bạn có thể thấy là `hashicorp/aws`, điều này có nghĩa là provider này được duy trì hoặc đã được phát triển bởi chính HashiCorp và cộng đồng sử dụng. Mặc định, bạn sẽ tham chiếu đến các provider có sẵn từ Terraform Registry, bạn cũng có thể viết các provider riêng của bạn và sử dụng chúng cục bộ hoặc tự xuất bản lên Terraform Registry.
|
||||||
|
|
||||||
```
|
```
|
||||||
terraform {
|
terraform {
|
||||||
@ -60,7 +70,6 @@ resource "aws_instance" "90daysofdevops" {
|
|||||||
sudo systemctl enable httpd
|
sudo systemctl enable httpd
|
||||||
echo "
|
echo "
|
||||||
<h1>Deployed via Terraform</h1>
|
<h1>Deployed via Terraform</h1>
|
||||||
|
|
||||||
" | sudo tee /var/www/html/index.html
|
" | sudo tee /var/www/html/index.html
|
||||||
EOF
|
EOF
|
||||||
tags = {
|
tags = {
|
||||||
@ -81,15 +90,12 @@ terraform {
|
|||||||
version = "~> 3.27"
|
version = "~> 3.27"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
required_version = ">= 0.14.9"
|
required_version = ">= 0.14.9"
|
||||||
}
|
}
|
||||||
|
|
||||||
provider "aws" {
|
provider "aws" {
|
||||||
profile = "default"
|
profile = "default"
|
||||||
region = "us-west-2"
|
region = "us-west-2"
|
||||||
}
|
}
|
||||||
|
|
||||||
resource "aws_instance" "90daysofdevops" {
|
resource "aws_instance" "90daysofdevops" {
|
||||||
ami = "ami-830c94e3"
|
ami = "ami-830c94e3"
|
||||||
instance_type = "t2.micro"
|
instance_type = "t2.micro"
|
||||||
@ -102,12 +108,10 @@ resource "aws_instance" "90daysofdevops" {
|
|||||||
sudo systemctl enable httpd
|
sudo systemctl enable httpd
|
||||||
echo "
|
echo "
|
||||||
<h1>Deployed via Terraform</h1>
|
<h1>Deployed via Terraform</h1>
|
||||||
|
|
||||||
" | sudo tee /var/www/html/index.html
|
" | sudo tee /var/www/html/index.html
|
||||||
EOF
|
EOF
|
||||||
tags = {
|
tags = {
|
||||||
Name = "Created by Terraform"
|
Name = "Created by Terraform"
|
||||||
|
|
||||||
tags = {
|
tags = {
|
||||||
Name = "ExampleAppServerInstance"
|
Name = "ExampleAppServerInstance"
|
||||||
}
|
}
|
||||||
@ -125,7 +129,6 @@ terraform {
|
|||||||
# forwards compatible with 0.13.x code.
|
# forwards compatible with 0.13.x code.
|
||||||
required_version = ">= 0.12.26"
|
required_version = ">= 0.12.26"
|
||||||
}
|
}
|
||||||
|
|
||||||
# website::tag::1:: The simplest possible Terraform module: it just outputs "Hello, World!"
|
# website::tag::1:: The simplest possible Terraform module: it just outputs "Hello, World!"
|
||||||
output "hello_world" {
|
output "hello_world" {
|
||||||
value = "Hello, 90DaysOfDevOps from Terraform"
|
value = "Hello, 90DaysOfDevOps from Terraform"
|
||||||
@ -138,9 +141,9 @@ Trong cửa sổ terminal, hãy điều hướng đến thư mục nơi tệp ma
|
|||||||
|
|
||||||
Khi đã ở trong thư mục đó, chúng ta sẽ chạy lệnh `terraform init`.
|
Khi đã ở trong thư mục đó, chúng ta sẽ chạy lệnh `terraform init`.
|
||||||
|
|
||||||
Chúng ta cần thực hiện lệnh này trên bất kỳ thư mục nào chứa mã Terraform hoặc trước khi chúng ta chạy bất kỳ mã Terraform nào. Việc khởi tạo một thư mục cấu hình tải xuống và cài đặt các nhà cung cấp đã được định nghĩa trong cấu hình, trong trường hợp này, chúng ta không có nhà cung cấp, nhưng trong ví dụ ở trên, điều này sẽ tải xuống nhà cung cấp AWS cho cấu hình này.
|
Chúng ta cần thực hiện lệnh này trên bất kỳ thư mục nào chứa mã Terraform hoặc trước khi chúng ta chạy bất kỳ mã Terraform nào. Việc khởi tạo một thư mục cấu hình tải xuống và cài đặt các provider đã được định nghĩa trong cấu hình, trong trường hợp này, chúng ta không có provider, nhưng trong ví dụ ở trên, điều này sẽ tải xuống provider AWS cho cấu hình này.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Lệnh tiếp theo sẽ là terraform plan.
|
Lệnh tiếp theo sẽ là terraform plan.
|
||||||
|
|
||||||
@ -148,31 +151,31 @@ Lệnh terraform plan tạo ra một kế hoạch thực thi, cho phép bạn xe
|
|||||||
|
|
||||||
Dưới đây, bạn có thể thấy rằng với ví dụ hello-world của chúng ta, chúng ta sẽ thấy đầu ra nếu đây là một instance EC2 trên AWS, chúng ta sẽ thấy tất cả các bước mà chúng ta sẽ tạo ra.
|
Dưới đây, bạn có thể thấy rằng với ví dụ hello-world của chúng ta, chúng ta sẽ thấy đầu ra nếu đây là một instance EC2 trên AWS, chúng ta sẽ thấy tất cả các bước mà chúng ta sẽ tạo ra.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Ở điểm này, chúng ta đã khởi tạo kho lưu trữ và đã tải xuống các nhà cung cấp khi cần thiết, chúng ta đã chạy một bước đi kiểm tra để đảm bảo rằng đây là những gì chúng ta muốn thấy, vì vậy bây giờ chúng ta có thể chạy và triển khai mã của chúng ta.
|
Ở điểm này, chúng ta đã khởi tạo kho lưu trữ và đã tải xuống các provider khi cần thiết, chúng ta đã chạy một bước đi kiểm tra để đảm bảo rằng đây là những gì chúng ta muốn thấy, vì vậy bây giờ chúng ta có thể chạy và triển khai mã của chúng ta.
|
||||||
|
|
||||||
`terraform apply` cho phép chúng ta làm điều này, có một biện pháp an toàn tích hợp trong lệnh này và nó sẽ cung cấp một kế hoạch về những gì sẽ xảy ra, đòi hỏi bạn phản hồi bằng cách nói `"yes"` để tiếp tục.
|
`terraform apply` cho phép chúng ta làm điều này, có một biện pháp an toàn tích hợp trong lệnh này và nó sẽ cung cấp một kế hoạch về những gì sẽ xảy ra, đòi hỏi bạn phản hồi bằng cách nói `"yes"` để tiếp tục.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Khi chúng ta gõ `"yes"` để xác nhận, mã của chúng ta sẽ được triển khai. Không có gì thú vị nhưng bạn có thể thấy chúng ta có kết quả đầu ra mà chúng ta đã định nghĩa trong mã của mình.
|
Khi chúng ta gõ `"yes"` để xác nhận, mã của chúng ta sẽ được triển khai. Không có gì thú vị nhưng bạn có thể thấy chúng ta có kết quả đầu ra mà chúng ta đã định nghĩa trong mã của mình.
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
Hiện tại, chúng ta chưa triển khai bất cứ thứ gì, chúng ta chưa thêm, thay đổi hoặc phá hủy bất cứ thứ gì, nhưng nếu chúng ta đã làm điều đó, chúng ta sẽ thấy điều đó được chỉ ra trong đoạn trên. Tuy nhiên, nếu chúng ta đã triển khai một cái gì đó và muốn loại bỏ tất cả những gì chúng ta đã triển khai, chúng ta có thể sử dụng lệnh `terraform destroy`. Một lần nữa, điều này có tính năng an toàn, bạn phải gõ `"yes"` để xác nhận, mặc dù bạn có thể sử dụng `--auto-approve` ở cuối các lệnh `apply` và `destroy` để bỏ qua sự can thiệp thủ công đó. Tuy nhiên, tôi khuyên bạn chỉ nên sử dụng lối tắt này khi học và thử nghiệm vì mọi thứ có thể biến mất nhanh hơn cả việc xây dựng.
|
Hiện tại, chúng ta chưa triển khai bất cứ thứ gì, chúng ta chưa thêm, thay đổi hoặc phá hủy bất cứ thứ gì, nhưng nếu chúng ta đã làm điều đó, chúng ta sẽ thấy điều đó được chỉ ra trong đoạn trên. Tuy nhiên, nếu chúng ta đã triển khai một cái gì đó và muốn loại bỏ tất cả những gì chúng ta đã triển khai, chúng ta có thể sử dụng lệnh `terraform destroy`. Một lần nữa, điều này có tính năng an toàn, bạn phải gõ `"yes"` để xác nhận, mặc dù bạn có thể sử dụng `--auto-approve` ở cuối các lệnh `apply` và `destroy` để bỏ qua sự can thiệp thủ công đó. Tuy nhiên, tôi khuyên bạn chỉ nên sử dụng lối tắt này khi học và thử nghiệm vì mọi thứ có thể biến mất nhanh hơn cả việc xây dựng.
|
||||||
|
|
||||||
Từ đó, chúng ta đã tìm hiểu về 4 lệnh trong CLI của Terraform.
|
Từ đó, chúng ta đã tìm hiểu về 4 lệnh trong CLI của Terraform.
|
||||||
|
|
||||||
`terraform init` = chuẩn bị thư mục dự án với các nhà cung cấp.
|
`terraform init` = chuẩn bị thư mục dự án với các provider.
|
||||||
`terraform plan` = hiển thị những gì sẽ được tạo ra và thay đổi trong lệnh tiếp theo dựa trên mã của chúng ta.
|
`terraform plan` = hiển thị những gì sẽ được tạo ra và thay đổi trong lệnh tiếp theo dựa trên mã của chúng ta.
|
||||||
`terraform apply` = triển khai các tài nguyên được định nghĩa trong mã của chúng ta.
|
`terraform apply` = triển khai các tài nguyên được định nghĩa trong mã của chúng ta.
|
||||||
`terraform destroy` = phá hủy các tài nguyên chúng ta đã tạo ra trong dự án của chúng ta.
|
`terraform destroy` = phá hủy các tài nguyên chúng ta đã tạo ra trong dự án của chúng ta.
|
||||||
Chúng ta cũng đã tìm hiểu về hai khía cạnh quan trọng của tệp mã.
|
Chúng ta cũng đã tìm hiểu về hai khía cạnh quan trọng của tệp mã.
|
||||||
|
|
||||||
Nhà cung cấp (providers) = cách Terraform liên lạc với nền tảng cuối thông qua các API.
|
Provider = cách Terraform liên lạc với nền tảng cuối thông qua các API.
|
||||||
Tài nguyên (resources) = những gì chúng ta muốn triển khai bằng mã.
|
Tài nguyên (resources) = những gì chúng ta muốn triển khai bằng mã.
|
||||||
Một điều lưu ý khác khi chạy terraform init là xem cây thư mục trước và sau để xem điều gì xảy ra và chúng ta lưu trữ nhà cung cấp và các module ở đâu.
|
Một điều lưu ý khác khi chạy terraform init là xem cây thư mục trước và sau để xem điều gì xảy ra và chúng ta lưu trữ provider và các module ở đâu.
|
||||||
|
|
||||||
### Trạng Thái Của Terraform - Terraform state
|
### Trạng Thái Của Terraform - Terraform state
|
||||||
|
|
||||||
@ -220,4 +223,4 @@ Dưới đây là danh sách nhiều tài nguyên mà tôi đã liệt kê và t
|
|||||||
- [Terraform Tutorial - The Best Project Ideas](https://www.youtube.com/watch?v=oA-pPa0vfks)
|
- [Terraform Tutorial - The Best Project Ideas](https://www.youtube.com/watch?v=oA-pPa0vfks)
|
||||||
- [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform)
|
- [Awesome Terraform](https://github.com/shuaibiyy/awesome-terraform)
|
||||||
|
|
||||||
Hẹn gặp lại các bạn ở ngày [Day 59](day59.md)
|
Hẹn gặp lại các bạn ở [ngày 59](day59.md)
|
@ -101,12 +101,12 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M
|
|||||||
|
|
||||||
### Học cơ sở hạ tầng dưới dạng mã (Infrastructure as Code)
|
### Học cơ sở hạ tầng dưới dạng mã (Infrastructure as Code)
|
||||||
|
|
||||||
- [✔️] 🤖 56 > [The Big Picture: IaC](Days/day56.md)
|
- [✔️] 🤖 56 > [Bức tranh toàn cảnh: Cơ sở hạ tầng dưới dạng mã (IaC)](Days/day56.md)
|
||||||
- [✔️] 🤖 57 > [An intro to Terraform](Days/day57.md)
|
- [✔️] 🤖 57 > [Giới thiệu về Terraform](Days/day57.md)
|
||||||
- [✔️] 🤖 58 > [HashiCorp Configuration Language (HCL)](Days/day58.md)
|
- [✔️] 🤖 58 > [Ngôn ngữ cấu hình HashiCorp (HCL)](Days/day58.md)
|
||||||
- [✔️] 🤖 59 > [Create a VM with Terraform & Variables](Days/day59.md)
|
- [✔️] 🤖 59 > [Tạo VM với Terraform & Biến](Days/day59.md)
|
||||||
- [✔️] 🤖 60 > [Docker Containers, Provisioners & Modules](Days/day60.md)
|
- [✔️] 🤖 60 > [Docker Container, Providers & Modules](Days/day60.md)
|
||||||
- [✔️] 🤖 61 > [Kubernetes & Multiple Environments](Days/day61.md)
|
- [✔️] 🤖 61 > [Kubernetes & Đa môi trường](Days/day61.md)
|
||||||
- [✔️] 🤖 62 > [Testing, Tools & Alternatives](Days/day62.md)
|
- [✔️] 🤖 62 > [Testing, Tools & Alternatives](Days/day62.md)
|
||||||
|
|
||||||
### Tự động hóa quản lý cấu hình
|
### Tự động hóa quản lý cấu hình
|
||||||
|
Loading…
Reference in New Issue
Block a user