Hướng dẫn về Terraform cho người mới bắt đầu: Cơ sở hạ tầng dưới dạng mã từ tệp đầu tiên đến mô-đun
Tìm hiểu Terraform mà không cần tài khoản đám mây hoặc hóa đơn bất ngờ. Bắt đầu với các tệp cục bộ để hiểu kế hoạch, áp dụng và trạng thái, sau đó chuyển sang các tài nguyên, mô-đun đám mây thực và quy trình làm việc an toàn cho các nhóm.
- Terraform tạo và thay đổi cơ sở hạ tầng từ các tệp văn bản mà bạn có thể lưu giữ trong Git.
- Quy trình làm việc cốt lõi là
init,plan,applyvàplanhiển thị các thay đổi trước khi chúng xảy ra. - tệp trạng thái ghi lại những gì Terraform quản lý. Hãy bảo vệ nó và đừng bao giờ cam kết nó với Git.
- Sử dụng mô-đun để sử dụng lại các mẫu và trạng thái từ xa có tính năng khóa khi làm việc theo nhóm.
Nhấp vào xung quanh bảng điều khiển đám mây là tốt cho một máy chủ. Nó bị hỏng khi bạn cần thiết lập tương tự trong quá trình dàn dựng và sản xuất hoặc khi ai đó hỏi ai đã thay đổi quy tắc tường lửa vào tháng 3 năm ngoái. Hướng dẫn về Terraform dành cho người mới bắt đầu này chỉ cho bạn một cách tốt hơn: mô tả cơ sở hạ tầng của bạn bằng mã và để một công cụ biến nó thành hiện thực.
Hầu hết các hướng dẫn đều bắt đầu bằng tài khoản đám mây, điều này làm tăng thêm rủi ro thanh toán trước khi bạn học được bất kỳ điều gì. Chúng tôi bắt đầu với nhà cung cấp local của Terraform, nhà cung cấp này chỉ tạo các tệp trên máy tính của bạn nên những sai sót sẽ không gây tổn thất gì. Các ví dụ này và kết quả đầu ra mẫu là những minh họa tiêu chuẩn mà chúng tôi không thực hiện cho bài viết này và cách diễn đạt chính xác sẽ khác nhau tùy theo phiên bản.
Terraform là gì?
Terraform là một công cụ cơ sở hạ tầng dưới dạng mã (IaC) của HashiCorp. Bạn viết các tệp cấu hình bằng HCL, Ngôn ngữ cấu hình HashiCorp, mô tả kết quả cuối cùng mà bạn mong muốn. Terraform sau đó sẽ tìm ra những gì cần tạo, thay đổi hoặc xóa để đạt được điều đó.
Nó giao tiếp với các nền tảng thông qua các plugin có tên nhà cung cấp. Có các nhà cung cấp cho AWS, Azure, Google Cloud, Kubernetes, GitHub, Cloudflare và nhiều nhà cung cấp khác, vì vậy bạn có thể sử dụng một quy trình làm việc trên tất cả các nhà cung cấp đó.
Một điều cần biết: vào năm 2023, HashiCorp đã chuyển Terraform sang Giấy phép Nguồn Kinh doanh. Sau đó, cộng đồng đã tạo OpenTofu, một nhánh phân nhánh nguồn mở sử dụng các lệnh và cấu hình rất giống nhau. Những gì bạn học được ở đây phần lớn áp dụng cho cả hai.
Tại sao cơ sở hạ tầng là mã?
| Câu hỏi | Bàn điều khiển thủ công hoạt động | địa hình |
|---|---|---|
| Ai đã thay đổi cái gì? | Khó tìm ra | Lịch sử Git |
| Chúng ta có thể sao chép dàn dựng vào sản xuất không? | Nhấp chuột cẩn thận | Tái sử dụng mã |
| Sự thay đổi này sẽ làm gì? | Bạn tìm hiểu sau đó | terraform plan hiển thị cho bạn đầu tiên |
| Ai đó có thể xem xét nó? | Không dễ dàng | Một yêu cầu kéo bình thường |
| Khắc phục thảm họa | Tùy vào trí nhớ của mỗi người | Tạo lại từ mã, cộng với sao lưu dữ liệu |
Terraform cũng là khai báo. Bạn nói “phải có ba máy chủ”, chứ không phải “tạo một máy chủ ba lần”. Nếu hai đã tồn tại, nó sẽ thêm một. Một tập lệnh chỉ lặp lại các bước của nó có thể tạo ra thêm ba bước nữa.
Cài đặt địa hình
Cài đặt nó bằng cách sử dụng hướng dẫn chính thức của HashiCorp dành cho hệ điều hành của bạn và sau đó xác nhận rằng nó hoạt động:
terraform -version
Tạo một thư mục trống cho dự án. Terraform đọc mọi tệp .tf trong thư mục hiện tại, vì vậy một thư mục tương đương với một cấu hình.
Cấu hình đầu tiên của bạn
Tạo một tệp có tên main.tf:
terraform {
required_providers {
local = {
source = "hashicorp/local"
version = "~> 2.5"
}
}
}
resource "local_file" "greeting" {
filename = "${path.module}/hello.txt"
content = "Hello from Terraform\n"
}
Hãy nhìn vào khối resource, vì hầu hết mọi thứ bạn viết đều theo hình dạng này. local_file là loại tài nguyên và greeting là tên riêng của bạn cho loại tài nguyên đó trong cấu hình. Cùng nhau, họ tạo thành địa chỉ của nó: local_file.greeting. Các đối số bên trong mô tả những gì bạn muốn.
Quy trình làm việc: khởi tạo, lập kế hoạch, áp dụng
địa hình ban đầu
Việc này sẽ chuẩn bị thư mục và tải xuống các nhà cung cấp mà bạn yêu cầu. Chạy nó một lần khi bắt đầu và chạy lại bất cứ khi nào bạn thêm nhà cung cấp hoặc mô-đun. Nó cũng tạo một tệp .terraform.lock.hcl, ghi lại các phiên bản chính xác của nhà cung cấp. Cam kết tập tin đó với Git.
terraform init
kế hoạch địa hình
Điều này so sánh mã của bạn với những gì tồn tại và hiển thị các thay đổi theo kế hoạch mà không cần chạm vào bất cứ điều gì:
terraform plan
# local_file.greeting will be created
+ resource "local_file" "greeting" {
+ content = "Hello from Terraform\n"
+ filename = "./hello.txt"
}
Plan: 1 to add, 0 to change, 0 to destroy.
Tìm hiểu các ký hiệu, bởi vì bạn sẽ đọc được rất nhiều kế hoạch:
| Biểu tượng | Ý nghĩa |
|---|---|
+ |
Tạo |
~ |
Cập nhật tại chỗ |
- |
Tiêu diệt |
-/+ |
Phá hủy và tái tạo |
áp dụng địa hình
Điều này hiển thị lại kế hoạch, yêu cầu xác nhận và thực hiện các thay đổi:
terraform apply
Nhập yes và hello.txt xuất hiện. Bây giờ hãy chạy lại terraform plan. Nó sẽ báo cáo không có thay đổi nào vì thực tế đã khớp với mã của bạn. Thuộc tính này, khi việc chạy nó nhiều lần sẽ không gây ra thay đổi nào nữa, được gọi là idempotence.
Thay đổi và phá hủy
Chỉnh sửa dòng content và chạy terraform plan. Terraform nhận ra sự khác biệt và đề xuất thay đổi. Đối với tài nguyên này, nó thay thế tệp. Hãy chú ý đến những thay thế trên cơ sở hạ tầng thực, vì việc tạo lại cơ sở dữ liệu có thể đồng nghĩa với việc mất dữ liệu.
Tiếp theo, xóa hello.txt bằng tay và lập kế hoạch lại. Terraform nhận thấy nó bị thiếu và đề nghị tạo lại nó. Sự khác biệt giữa mã của bạn và thực tế được gọi là drift và việc phát hiện nó là một trong những lợi ích chính của công cụ.
Để xóa mọi thứ mà cấu hình này quản lý, hãy chạy:
terraform destroy
Các biến và đầu ra
Các giá trị được mã hóa cứng ngăn bạn sử dụng lại mã. Các biến đầu vào làm cho cấu hình trở nên linh hoạt và kết quả đầu ra báo cáo lại các giá trị hữu ích:
# variables.tf
variable "environment" {
type = string
description = "Deployment environment"
default = "dev"
validation {
condition = contains(["dev", "staging", "prod"], var.environment)
error_message = "Use dev, staging or prod."
}
}
# main.tf
resource "local_file" "config" {
filename = "${path.module}/${var.environment}.txt"
content = "environment=${var.environment}\n"
}
# outputs.tf
output "config_path" {
value = local_file.config.filename
}
Đặt giá trị trên dòng lệnh hoặc giữ chúng trong tệp có tên terraform.tfvars, tệp này được tải tự động:
terraform apply -var="environment=staging"
Sử dụng local_file.config.filename trong đầu ra cũng là cách các tài nguyên tham chiếu lẫn nhau. Terraform đọc những tài liệu tham khảo đó để tìm ra thứ tự chính xác để tạo ra mọi thứ.
Trạng thái địa hình
Sau khi đăng ký, bạn sẽ tìm thấy một tệp có tên terraform.tfstate. Đây là bản ghi của Terraform về những gì nó quản lý, ánh xạ mã của bạn tới các đối tượng thực. Không có nó, Terraform sẽ không biết rằng local_file.greeting là tệp cụ thể đó.
Ba quy tắc quan trọng ở đây:
- Không bao giờ cam kết trạng thái với Git. Nó có thể chứa mật khẩu và các bí mật khác ở dạng văn bản thuần túy.
- Không chỉnh sửa bằng tay. Sử dụng các lệnh như
terraform state listvàterraform state mv. - Sử dụng chương trình phụ trợ từ xa cho các dự án nhóm. Chương trình phụ trợ dùng chung lưu trữ trạng thái tập trung và khóa nó để hai người không thể đăng ký cùng một lúc.
Đây là một chương trình phụ trợ điển hình sử dụng Amazon S3, với nhóm bạn tạo trước:
terraform {
backend "s3" {
bucket = "my-company-terraform-state"
key = "shop/prod/terraform.tfstate"
region = "ap-south-1"
encrypt = true
use_lockfile = true
}
}
Mẹo: Bắt đầu mọi dự án với .gitignore loại trừ .terraform/, *.tfstate, *.tfstate.* và bất kỳ tệp *.tfvars nào chứa bí mật.
Tài nguyên đám mây thực sự
Quy trình làm việc không thay đổi khi bạn chuyển sang đám mây. Đây là nhóm S3 trên AWS. Trước tiên hãy kiểm tra giá và hủy mọi thứ bạn tạo trong khi thực hành:
provider "aws" {
region = "ap-south-1"
}
resource "aws_s3_bucket" "reports" {
bucket = "my-unique-reports-bucket-2026"
tags = {
Environment = var.environment
ManagedBy = "terraform"
}
}
Terraform nhận thông tin xác thực từ các biến môi trường hoặc thiết lập AWS CLI của bạn. Không bao giờ ghi khóa truy cập vào tệp .tf.
Mô-đun
Một mô-đun chỉ đơn giản là một thư mục chứa các tệp Terraform mà bạn có thể gọi bằng các đầu vào khác nhau. Nó hoạt động giống như một hàm, cho phép bạn xác định một mẫu một lần và sử dụng lại nó:
project/
main.tf
modules/
reports_bucket/
main.tf
variables.tf
outputs.tf
module "staging_reports" {
source = "./modules/reports_bucket"
environment = "staging"
}
module "prod_reports" {
source = "./modules/reports_bucket"
environment = "prod"
}
Sổ đăng ký Terraform công khai cũng có các mô-đun được tạo sẵn nhưng hãy đọc chúng trước khi bạn dựa vào chúng và ghim phiên bản. Đừng xây dựng mô-đun quá sớm. Đợi cho đến khi bạn lặp lại một mẫu ít nhất hai lần.
Quy trình làm việc nhóm an toàn
- Tạo một nhánh và thay đổi tệp
.tf. Hãy xem Hướng dẫn về Git dành cho người mới bắt đầu của chúng tôi nếu bạn cần ôn lại. - Chạy
terraform fmtvàterraform validate. - Mở một yêu cầu kéo, có đính kèm đầu ra
terraform planđể xem xét. - Sau khi được phê duyệt, hãy áp dụng kế hoạch đã lưu đó từ một nơi được kiểm soát, lý tưởng nhất là một đường ống.
Việc lưu kế hoạch sẽ đảm bảo bạn áp dụng chính xác những gì đã được xem xét:
terraform plan -out=tfplan
terraform apply tfplan
Điều này tự nhiên phù hợp với CI/CD và Hành động GitHub. Terraform thường cung cấp cụm và các công cụ như Kubernetes sẽ chạy các ứng dụng trên cụm đó.
Những lỗi thường gặp
- Đăng ký mà không cần đọc kế hoạch. Một
-/+trên cơ sở dữ liệu có thể là một bất ngờ rất tốn kém. - Giữ trạng thái trên một máy tính xách tay. Mất máy tính xách tay đó và Terraform sẽ mất dấu vết cơ sở hạ tầng của bạn.
- Thực hiện các thay đổi thủ công trên bảng điều khiển. Chúng gây ra hiện tượng lệch và lần áp dụng tiếp theo có thể hoàn tác chúng.
- Sử dụng các phiên bản đã bỏ ghim. Ghim các phiên bản mô-đun và nhà cung cấp để việc nâng cấp diễn ra có mục đích.
- Sử dụng một cấu hình lớn. Việc phân chia theo môi trường hoặc hệ thống sẽ hạn chế thiệt hại do bất kỳ sai sót nào.
Lời kết
Bây giờ bạn đã thấy các ý tưởng đằng sau gần như tất cả công việc của Terraform: khai báo tài nguyên, xem xét kế hoạch, áp dụng kế hoạch và bảo vệ trạng thái. Thực hành với nhà cung cấp local cho đến khi quy trình làm việc trở nên tự nhiên, sau đó quản lý một tài nguyên thực nhỏ trong tài khoản cấp miễn phí. Đưa trạng thái và mô-đun từ xa vào khi có nhiều người hoặc nhiều môi trường tham gia.
Câu hỏi thường gặp
Terraform dùng để làm gì?
Terraform được sử dụng để tạo và quản lý cơ sở hạ tầng, chẳng hạn như máy chủ, mạng, cơ sở dữ liệu và DNS, bằng cách mô tả nó bằng mã thay vì định cấu hình bằng tay.
Terraform có miễn phí không?
Terraform CLI được sử dụng miễn phí theo Giấy phép Nguồn Kinh doanh, mặc dù các điều khoản hạn chế một số mục đích sử dụng thương mại cạnh tranh. HCP Terraform có các cấp trả phí và OpenTofu là nguồn mở.
Sự khác biệt giữa Terraform và Ansible là gì?
Terraform chủ yếu cung cấp cơ sở hạ tầng theo cách khai báo. Ansible chủ yếu cấu hình phần mềm trên các máy hiện có. Nhiều nhóm sử dụng cả hai, Terraform trước và Ansible sau.
Tệp trạng thái Terraform là gì?
Nó là một bản ghi ánh xạ cấu hình của bạn tới các tài nguyên thực. Terraform sử dụng nó để thực hiện các thay đổi. Nó có thể chứa đựng những bí mật, vì vậy hãy lưu trữ nó một cách an toàn và tránh xa Git.
Tôi có cần biết lập trình để học Terraform không?
Không thực sự. HCL đơn giản và mang tính khai báo. Hiểu nền tảng bạn quản lý, chẳng hạn như mạng AWS, thường khó hơn chính ngôn ngữ đó.
Tiếp tục học hỏi
Cần trợ giúp về kiểm tra, WordPress hoặc SEO?
Chúng tôi giúp các nhóm phát triển phần mềm tốt hơn và phát triển trang web của họ. Hãy cho chúng tôi biết bạn đang làm gì và chúng tôi sẽ đề xuất bước tiếp theo rõ ràng.
Thêm hướng dẫn về thử nghiệm, AI và phát triển hiện đại
Bạn thích bài viết này? Chọn một chủ đề và chuyển ngay sang phần hướng dẫn mới nhất của chúng tôi.
Giải thích về ảo giác AI: Tại sao các mô hình ngôn ngữ lại tạo nên mọi thứ và cách giảm thiểu nó
Ảo giác AI đã giải thích: chúng là gì, tại sao mô hình ngôn ngữ tạo ra chúng, các loại phổ biến, cách giảm thiểu chúng bằng cách căn cứ và nhắc nhở …
Đọc bài viết →DevOpsGiải thích về các biến môi trường: Tệp .env, bí mật và cấu hình được thực hiện đúng
Các biến môi trường được giải thích bằng các ví dụ Python mà chúng tôi đã chạy: đọc và thiết lập chúng, tại sao mọi giá trị đều là một chuỗi, tệp .e…
Đọc bài viết →Phát triển phần mềmGiải thích về giới hạn tỷ lệ API: Thuật toán, tiêu đề và xử lý lỗi 429
Giới hạn tốc độ API được giải thích bằng mô phỏng mà chúng tôi đã chạy: nhóm mã thông báo, cửa sổ cố định, cửa sổ trượt, 429 phản hồi, tiêu đề giới …
Đọc bài viết →Tự động hóa kiểm thửChế giễu bằng Python: unittest.mock, patch và những sai lầm khiến bài kiểm tra nói dối
Mô phỏng bằng Python với unittest.mock, đã được thử nghiệm: Mock và return_value, side_effect, vá lỗi nơi sử dụng tên, thông số kỹ thuật và thông số…
Đọc bài viết →Kiểm thử phần mềmGiải thích về phạm vi bảo hiểm của mã: Phạm vi tuyến so với chi nhánh và ý nghĩa thực sự 100%
Phạm vi bảo hiểm mã được giải thích bằng cách chạy phạm vi bảo hiểm thực tế: phạm vi bảo hiểm dòng, chi nhánh và điều kiện, đọc báo cáo, lý do tại s…
Đọc bài viết →Cơ sở dữ liệu & SQLDELETE vs TRUNCATE vs DROP trong SQL: Sự khác biệt, khôi phục và thời điểm sử dụng mỗi loại
DELETE vs TRUNCATE vs DROP được giải thích bằng SQL đã được thử nghiệm: mỗi loại loại bỏ, khôi phục, kích hoạt, đặt lại danh tính, tốc độ và Postgre…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về Chế độ xem SQL: Tạo, sử dụng và tránh những cạm bẫy, kèm theo ví dụ
Chế độ xem SQL được giải thích bằng các truy vấn chúng tôi đã chạy: tạo chế độ xem, kết quả trực tiếp, ẩn cột, hiệu suất, chế độ xem có thể cập nhật…
Đọc bài viết →Phát triển phần mềmGiao diện TypeScript so với loại: Sự khác biệt thực sự, được thử nghiệm bằng trình biên dịch
Giao diện TypeScript so với loại, được kiểm tra bằng trình biên dịch thực: cả hai có thể làm gì, chỉ một người có thể làm gì, hợp nhất khai báo, mở …
Đọc bài viết →Phát triển phần mềmGiải thích về Python *args và **kwargs: Hàm linh hoạt với ví dụ rõ ràng
Python *args và **kwargs được giải thích bằng mã chúng tôi đã chạy: đóng gói và giải nén, thứ tự tham số, đối số chỉ từ khóa và chỉ vị trí, trình tr…
Đọc bài viết →Phát triển phần mềmHàm Lambda của Python: Cú pháp, cách sử dụng thực tế và khi nào không nên sử dụng chúng
Các hàm lambda của Python được giải thích bằng mã chúng tôi đã chạy: cú pháp, sắp xếp bằng khóa, bản đồ và bộ lọc, các phần đóng, bẫy liên kết muộn …
Đọc bài viết →Trí tuệ nhân tạoĐại lý AI là gì? Cách chúng hoạt động, với vòng lặp tác nhân đơn giản, bạn có thể chạy
Tác nhân AI là gì? Hướng dẫn đơn giản về vòng lặp tác nhân, công cụ, bộ nhớ và lan can, với một vòng lặp Python nhỏ mà chúng tôi đã chạy, những rủi …
Đọc bài viết →DevOpsGiám sát và Khả năng quan sát: Sự khác biệt thực sự, với nhật ký, số liệu và dấu vết
Giải thích về giám sát và khả năng quan sát: lỗi đã biết và chưa biết, nhật ký, số liệu và dấu vết, hướng dẫn về sự cố thanh toán, tín hiệu vàng, Op…
Đọc bài viết →DevOpsDocker Volumes vs Bind Mounts: Duy trì dữ liệu vùng chứa đúng cách
Giải thích về khối lượng Docker và liên kết gắn kết: tại sao dữ liệu vùng chứa biến mất, khối lượng được đặt tên, liên kết gắn kết, tmpfs, ví dụ về …
Đọc bài viết →Tự động hóa kiểm thửTDD vs BDD: Key Differences, One Feature Built Both Ways and When to Use Each
TDD và BDD được giải thích bằng một tính năng giảm giá được xây dựng theo cả hai cách: tái cấu trúc màu đỏ-xanh với mã chúng tôi đã chạy, kịch bản C…
Đọc bài viết →Kiểm thử phần mềmKiểm tra chấp nhận của người dùng (UAT): Quy trình, danh sách kiểm tra và ví dụ thực tế
Giải thích về thử nghiệm chấp nhận của người dùng: ai chạy nó, nó khác với QA như thế nào, quy trình bảy bước, mẫu trường hợp thử nghiệm UAT, danh s…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về các giá trị NULL của SQL: IS NULL, COALESCE, NULLIF và những cái bẫy cần tránh
Các giá trị SQL NULL được giải thích bằng các truy vấn chúng tôi đã chạy: logic ba giá trị, IS NULL, COALESCE, NULLIF, cách tổng hợp, kết hợp và sắp…
Đọc bài viết →Cơ sở dữ liệu & SQLCâu lệnh SQL CASE WHEN: Cú pháp, ví dụ thực tế và các lỗi thường gặp
TRƯỜNG HỢP SQL KHI được giải thích bằng các truy vấn mà chúng tôi đã chạy: các biểu mẫu đơn giản và được tìm kiếm, thứ tự điều kiện, các thủ thuật S…
Đọc bài viết →Phát triển phần mềmJWT là gì? Mã thông báo Web JSON được giải thích bằng một ví dụ hoạt động
JWT là gì? Mã thông báo Web JSON đã giải thích: ba phần, mã thông báo được xây dựng và giả mạo trong mã chúng tôi đã chạy, JWT so với phiên, lưu trữ…
Đọc bài viết →Phát triển phần mềmGiải thích về vòng lặp sự kiện JavaScript: Ngăn xếp cuộc gọi, Microtask và bộ hẹn giờ kèm ví dụ
Vòng lặp sự kiện JavaScript được giải thích bằng mã chúng tôi đã chạy: ngăn xếp cuộc gọi, hàng đợi tác vụ và vi nhiệm, tại sao setTimeout 0 không di…
Đọc bài viết →Phát triển phần mềmGiải thích về trình tạo và năng suất của Python: Tiết kiệm bộ nhớ bằng các ví dụ thực tế
Trình tạo và lợi nhuận Python được giải thích bằng mã chúng tôi đã chạy: cách chúng tạm dừng và tiếp tục, đo mức tiết kiệm bộ nhớ, quy trình, chuỗi …
Đọc bài viết →Trí tuệ nhân tạoNhúng là gì? Giải thích sự tương đồng về vectơ và Cosine một cách đơn giản
nhúng là gì? Hướng dẫn bằng ngôn ngữ đơn giản về vectơ, độ tương tự cosine và tìm kiếm ngữ nghĩa, với một ví dụ nhỏ mà chúng tôi đã chạy, các cách s…
Đọc bài viết →DevOpsTriển khai Blue-Green và Canary: Sự khác biệt, sự đánh đổi và cách lựa chọn
Giải thích về triển khai Blue-green và Canary: cách hoạt động của từng loại, chi phí, rủi ro và khôi phục, nhóm người dùng ổn định mà chúng tôi đã t…
Đọc bài viết →Tự động hóa kiểm thửKiểm tra không ổn định: Nguyên nhân gây ra chúng và cách khắc phục chúng vĩnh viễn
Các thử nghiệm không ổn định được giải thích bằng các bản demo mà chúng tôi đã chạy: nguyên nhân chính, cách xác nhận và chẩn đoán nguyên nhân, cách…
Đọc bài viết →Kiểm thử phần mềmKiểm tra tải và kiểm tra căng thẳng: Sự khác biệt, số liệu và ví dụ về k6
Giải thích về thử nghiệm tải và thử nghiệm căng thẳng: mỗi thử nghiệm chứng minh điều gì, thử nghiệm tăng đột biến và ngâm, số liệu quan trọng, lý d…
Đọc bài viết →Kiểm thử phần mềmTrường hợp thử nghiệm và kịch bản thử nghiệm: Sự khác biệt chính, ví dụ và thời điểm sử dụng từng trường hợp
Giải thích trường hợp kiểm thử và kịch bản kiểm thử: định nghĩa rõ ràng, bảng cạnh nhau, một tính năng đặt lại mật khẩu được lấy từ các tình huống n…
Đọc bài viết →Cơ sở dữ liệu & SQLTối ưu hóa truy vấn SQL: Đọc kế hoạch thực thi và sửa các truy vấn chậm, có tính thời gian
Đã thử nghiệm tối ưu hóa truy vấn SQL trên một triệu hàng: đọc kế hoạch thực hiện, thêm chỉ mục phù hợp, sửa các bộ lọc không thể mở rộng, sử dụng c…
Đọc bài viết →Cơ sở dữ liệu & SQLSQL UNION và UNION ALL: Sự khác biệt, ví dụ và hiệu suất đã được kiểm tra
SQL UNION và UNION ALL được giải thích bằng các truy vấn chúng tôi đã chạy: trùng lặp, cả hai quy tắc đều tuân theo, lỗi dữ liệu thực, hiệu suất đượ…
Đọc bài viết →Phát triển phần mềmHướng dẫn API tìm nạp JavaScript: GET, POST, Xử lý lỗi và hết thời gian chờ
Hướng dẫn API tìm nạp JavaScript đã được thử nghiệm trên máy chủ cục bộ: GET và POST, tại sao 404 không gửi, trình trợ giúp có thể sử dụng lại, chuỗ…
Đọc bài viết →Phát triển phần mềmXử lý tệp Python: Đọc, ghi, CSV, JSON và pathlib kèm ví dụ
Việc xử lý tệp Python được giải thích bằng mã chúng tôi đã chạy: chế độ mở, với, đọc tệp lớn, CSV, JSON, pathlib, tệp nhị phân, ghi an toàn, xử lý l…
Đọc bài viết →Phát triển phần mềmCác lớp và đối tượng Python: Hướng dẫn OOP với các ví dụ thực tế
Các lớp và đối tượng Python được giải thích bằng mã mà chúng tôi đã chạy: __init__, các phương thức, thuộc tính lớp và phiên bản, tính kế thừa, thuộ…
Đọc bài viết →Trí tuệ nhân tạoMô hình ngôn ngữ lớn là gì? LLM hoạt động như thế nào, được giải thích mà không cường điệu hóa
Mô hình ngôn ngữ lớn là gì? LLM được giải thích bằng ngôn ngữ đơn giản: mã thông báo, phần nhúng, sự chú ý, đào tạo, cửa sổ nhiệt độ và ngữ cảnh, mộ…
Đọc bài viết →DevOpsCác lệnh Linux cho người mới bắt đầu: Hướng dẫn thiết bị đầu cuối cần thiết kèm ví dụ
Các lệnh Linux dành cho người mới bắt đầu, được nhóm theo tác vụ: điều hướng, tệp, xem nhật ký, grep, đường dẫn, quyền, quy trình và lưu trữ, cùng v…
Đọc bài viết →Tự động hóa kiểm thửSelenium vs Nhà viết kịch: Sự khác biệt chính, So sánh mã và nên chọn cái nào
Selenium và Playwright được so sánh: kiến trúc, chờ đợi, hỗ trợ trình duyệt và ngôn ngữ, gỡ lỗi, kiểm tra giống nhau ở cả hai công cụ, lời khuyên di…
Đọc bài viết →Kiểm thử phần mềmPhân vùng tương đương: Giải thích kỹ thuật thiết kế thử nghiệm bằng các ví dụ đã thực hiện
Giải thích về phân vùng tương đương: cách tìm các phân vùng hợp lệ và không hợp lệ, các ví dụ hoạt động theo độ tuổi, mật khẩu và phiếu giảm giá, cá…
Đọc bài viết →Kiểm thử phần mềmMức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: Sự khác biệt, Ma trận và ví dụ thực tế
Giải thích về mức độ nghiêm trọng và mức độ ưu tiên trong kiểm thử phần mềm: định nghĩa rõ ràng, ma trận bốn chiều với các ví dụ, thang đo cấp độ, a…
Đọc bài viết →Cơ sở dữ liệu & SQLHướng dẫn về truy vấn con SQL: Các loại, truy vấn con tương quan và TỒN TẠI kèm ví dụ
Hướng dẫn về truy vấn con SQL với các truy vấn chúng tôi đã chạy: truy vấn con vô hướng, IN, FROM và SELECT, truy vấn con tương quan, EXISTS, bẫy và…
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích về giao dịch SQL và ACID: Các mức CAM KẾT, ROLLBACK và Cô lập
Các giao dịch SQL và ACID được giải thích bằng chuyển khoản ngân hàng mà chúng tôi đã thực hiện: CAM KẾT, ROLLBACK, điểm lưu trữ, khóa, mức cách ly,…
Đọc bài viết →Phát triển phần mềmBảng cheat lệnh Git: Các lệnh bạn thực sự sử dụng, kèm theo ví dụ
Một bảng ghi lệnh Git được nhóm theo nhiệm vụ: thiết lập, dàn dựng, nhánh, điều khiển từ xa, lưu trữ, lịch sử và hoàn tác các lỗi, với đầu ra từ kho…
Đọc bài viết →Phát triển phần mềmGiải thích về các lời hứa trong JavaScript: then, Catch, Promise.all và các lỗi thường gặp
Lời hứa JavaScript được giải thích bằng mã chúng tôi đã chạy: trạng thái, then và chuỗi bắt, xử lý lỗi, Promise.all, allSettled, chủng tộc và bất kỳ…
Đọc bài viết →Phát triển phần mềmHướng dẫn từ điển Python: Phương thức, ví dụ và mẫu chung
Hướng dẫn từ điển Python với mã chúng tôi đã chạy: tạo, đọc và cập nhật các ký tự, các phương thức chính, hợp nhất, hiểu, đếm và nhóm các mẫu cũng n…
Đọc bài viết →Trí tuệ nhân tạoRAG là gì? Giải thích về thế hệ tăng cường truy xuất bằng một ví dụ hoạt động
RAG là gì? Thế hệ tăng cường truy xuất được giải thích từng bước: lập chỉ mục, phân nhóm, nhúng, truy xuất, một ví dụ Python hoạt động nhỏ, đánh giá…
Đọc bài viết →DevOpsHướng dẫn về Terraform cho người mới bắt đầu: Cơ sở hạ tầng dưới dạng mã từ tệp đầu tiên đến mô-đun
Hướng dẫn về Terraform dành cho người mới bắt đầu: bắt đầu không cần tài khoản đám mây, tìm hiểu về init, lập kế hoạch và áp dụng, sau đó là các biế…
Đọc bài viết →DevOpsDocker vs Kubernetes: Key Differences, How They Work Together and Which You Need
Docker vs Kubernetes giải thích: mỗi cái làm gì, cùng một ứng dụng chạy với cả hai, so sánh Docker Compose và Swarm, sự thay đổi của dockershim và c…
Đọc bài viết →Tự động hóa kiểm thửHướng dẫn Pytest cho người mới bắt đầu: Đồ đạc, tham số hóa và ví dụ thực tế
Hướng dẫn về pytest dành cho người mới bắt đầu với các bài kiểm tra chúng tôi đã chạy trên pytest 9.2: xác nhận, đồ đạc, tham số, conftest, điểm đán…
Đọc bài viết →Kiểm thử phần mềmVòng đời kiểm thử phần mềm (STLC): 6 giai đoạn, tiêu chí đầu vào và đầu ra, ví dụ
Vòng đời kiểm thử phần mềm giải thích: sáu giai đoạn STLC với tiêu chí đầu vào và đầu ra, sản phẩm phân phối, ví dụ về tính năng đăng nhập hoạt động…
Đọc bài viết →Phát triển phần mềmGit merge vs rebase: khác biệt, ví dụ và khi nào dùng cái nào
Git merge vs rebase được giải thích bằng đầu ra log thực tế, bảng so sánh, quy tắc vàng của rebase và quy trình làm việc nhóm an toàn.
Đọc bài viết →Phát triển phần mềmList comprehension trong Python: cú pháp, ví dụ và khi nào nên tránh
List comprehension trong Python: cú pháp, lọc dữ liệu, if-else, vòng lặp lồng nhau, thời gian đo thực tế và khi nào vòng lặp for thông thường tốt hơn.
Đọc bài viết →Cơ sở dữ liệu & SQLGiải thích SQL JOIN kèm ví dụ (Inner, Left, Right, Full)
Hiểu SQL JOIN từng bước với bảng và truy vấn mẫu: INNER, LEFT, RIGHT, FULL, CROSS và SELF, cùng lỗi thường gặp và mẹo hiệu năng.
Đọc bài viết →