Terraform trên Azure: Hướng dẫn thực hành cho người mới bắt đầu về IaC
Hướng dẫn này chỉ bạn cách dùng Terraform với Azure để tự động hóa hạ tầng, cải thiện tính nhất quán và áp dụng thực hành tốt cho các triển khai an toàn, có khả năng mở rộng.
Nếu bạn từng phải lướt qua Azure portal và ghép nối tài nguyên đám mây thủ công, tôi cũng đã trải qua—và điều đó nhanh chóng trở nên mệt mỏi. Đó là lúc Terraform xuất hiện. Đây là một công cụ infrastructure-as-code (IaC) cho phép bạn định nghĩa và quản lý thiết lập đám mây chỉ với vài dòng mã.
Trong hướng dẫn này, chúng ta sẽ tập trung vào việc sử dụng Terraform với Azure. Tôi sẽ giới thiệu Terraform là gì, cách nó hoạt động trong hệ sinh thái Azure, và cách bắt đầu với các ví dụ thực tế. Chúng ta cũng sẽ đề cập đến một số thực hành tốt để giúp bạn xây dựng các triển khai an toàn và đáng tin cậy ngay từ đầu.
Nếu bạn mới làm quen với hệ sinh thái Azure, lộ trình Azure cơ bản này cung cấp phần giới thiệu có cấu trúc về các dịch vụ và nguyên tắc cốt lõi.
Vì sao dùng Terraform trên Azure?
Terraform, được phát triển bởi HashiCorp, là một công cụ IaC mã nguồn mở cho phép bạn định nghĩa và quản lý hạ tầng đám mây bằng cú pháp khai báo. Khi kết hợp với Microsoft Azure, nó giúp bạn viết kịch bản cho các tài nguyên như mạng ảo, VM và cơ sở dữ liệu trong các tệp cấu hình dễ đọc.
Vì sao dùng Terraform với Azure? Tất cả là về tính nhất quán, khả năng mở rộng và tốc độ. Dù bạn khởi tạo một VM đơn lẻ hay điều phối một ứng dụng đa tầng phức tạp, Terraform đơn giản hóa quy trình đồng thời giảm lỗi do con người.
Tích hợp của Terraform với Azure mang lại một bộ tính năng giúp quản lý hạ tầng trực quan và mạnh mẽ. Hãy xem các thành phần chính và các loại tài nguyên Terraform sẵn có.
Quản lý hạ tầng theo kiểu khai báo
Cách tiếp cận khai báo của Terraform cho phép bạn định nghĩa hạ tầng Azure của mình trong các tệp .tf bằng HashiCorp Configuration Language (HCL).
Ví dụ, bạn có thể chỉ định một Azure VM với kích cỡ, vị trí và thiết lập mạng, và Terraform sẽ xử lý phần cách tạo ra nó. Dưới đây là ví dụ nhanh:
resource "azurerm_virtual_machine" "example" {
name = "my-vm"
location = "East US"
resource_group_name = "my-resource-group"
vm_size = "Standard_D2s_v3"
network_interface_ids = [azurerm_network_interface.example.id]# ... other necessary configurations like OS disk, admin details}Được hỗ trợ bởi
Định nghĩa trên đảm bảo tính idempotent—chạy cùng đoạn mã nhiều lần sẽ cho kết quả như nhau, không trùng lặp hoặc lỗi.
Giờ hãy cùng phân tích các khái niệm Terraform cốt lõi giúp cách tiếp cận khai báo này hoạt động.
Terraform state (.tfstate)
Tệp terraform.tfstate là trái tim của mô hình khai báo Terraform. Đây là một tệp JSON ghi lại trạng thái hiện tại của các tài nguyên Azure của bạn—những gì đã được triển khai, cấu hình và mối liên hệ giữa chúng.
Khi bạn chạy terraform apply, Terraform so sánh các tệp .tf (trạng thái mong muốn) với tệp .tfstate (trạng thái thực tế) để xác định các thay đổi cần thực hiện. Ví dụ, nếu bạn cập nhật kích cỡ VM trong mã, Terraform sẽ kiểm tra tệp .tfstate và chỉ sửa thuộc tính đó trên Azure.
Bạn có thể lưu tệp này cục bộ, nhưng với nhóm, hãy dùng Azure Blob Storage để cộng tác và khóa state nhằm tránh xung đột.
Biến số Terraform (.tfvars)
Biến giúp cấu hình của bạn linh hoạt và tái sử dụng. Định nghĩa trong variables.tf và terraform.tfvars, chúng cho phép bạn tham số hóa các giá trị như tên tài nguyên hoặc khu vực.
Ví dụ:
# variables.tf
variable "location" {
type = string
default = "East US"
description = "The Azure region where resources will be deployed."
}# terraform.tfvars (for a specific environment, e.g., production)
location = "West US"
# main.tf
resource "azurerm_resource_group" "example" {
name = "my-rg"
location = var.location
}Được hỗ trợ bởi
Tệp terraform.tfvars sẽ ghi đè giá trị mặc định, nhờ đó bạn có thể triển khai cùng đoạn mã ở các khu vực khác nhau mà không cần chỉnh sửa các tệp .tf lõi. Điều này hữu ích để quản lý nhiều môi trường (ví dụ: dev, prod).
Các tệp cấu hình Terraform (.tf)
Các tệp này chứa mã hạ tầng của bạn, được viết bằng HCL. Chúng định nghĩa tài nguyên, provider, module, và hơn thế nữa. Bạn có thể tổ chức thành một main.tf duy nhất hoặc tách thành nhiều tệp (ví dụ: variables.tf, outputs.tf, network.tf, compute.tf) để rõ ràng và dễ quản lý hơn.
Terraform plan
Trước khi áp dụng thay đổi, lệnh terraform plan hiển thị bản xem trước những việc Terraform sẽ làm—tạo, cập nhật hoặc xóa tài nguyên—dựa trên chênh lệch giữa các tệp .tf và .tfstate. Đây giống như một lần chạy thử giúp phát hiện sớm các vấn đề, hiển thị tóm tắt chi tiết các hành động dự kiến.
Terraform apply
Lệnh terraform apply thực thi các thay đổi được xác định bởi terraform plan, cập nhật Azure để khớp với trạng thái mong muốn và làm mới tệp .tfstate. Bạn sẽ được nhắc xác nhận trước khi áp dụng thay đổi, tạo một lớp an toàn.
Workspace
Workspace của Terraform cho phép bạn quản lý nhiều môi trường (ví dụ: dev, staging, prod) với một bộ tệp .tf duy nhất. Mỗi workspace có tệp .tfstate riêng, nên bạn có thể triển khai hạ tầng tương tự với cấu hình khác nhau (ví dụ: khác kích cỡ VM giữa dev và prod).
Module là các gói mã Terraform có thể tái sử dụng. Ví dụ, bạn có thể tạo một module cho mạng ảo Azure và dùng lại trên nhiều dự án, giảm trùng lặp và thúc đẩy chuẩn hóa. Chúng ta sẽ đề cập module nhiều hơn ở phần thực hành tốt.
Các khái niệm này—.tfstate, .tfvars, và quy trình khai báo—phối hợp để đảm bảo hạ tầng Azure của bạn có thể dự đoán, tái lập và dễ quản lý.
Quản lý state và cộng tác
Tệp terraform.tfstate theo dõi trạng thái hạ tầng của bạn. Với nhóm, lưu nó trong Azure Blob Storage là thực hành quan trọng để cho phép truy cập chia sẻ và quản lý phiên bản. Cấu hình backend từ xa này giúp mọi thành viên làm việc với một cái nhìn nhất quán về hạ tầng.
Khóa state, tính năng được nhiều backend từ xa như Azure Blob Storage cung cấp tự động, ngăn xung đột khi nhiều thành viên cùng lúc chạy lệnh Terraform, bảo đảm tính toàn vẹn dữ liệu.
Ví dụ cấu hình backend Azure Blob Storage:
terraform {
backend "azurerm" {
resource_group_name = "my-terraform-state-rg"
storage_account_name = "mystorageterraformstate"
container_name = "tfstate"
key = "production/terraform.tfstate" # Path within the container}}Được hỗ trợ bởi
Trước khi chạy terraform init với cấu hình này, bạn cần tạo tài khoản lưu trữ và container Azure thủ công hoặc qua một cấu hình Terraform riêng. Thiết lập này đảm bảo quản trị tài nguyên Azure an toàn và có thể cộng tác.
Hệ sinh thái provider và AzureRM
Provider azurerm là cầu nối của Terraform đến Azure, chuyển HCL thành các lời gọi API để quản lý dịch vụ như VM, mạng và cơ sở dữ liệu.
Nó hỗ trợ hàng trăm loại tài nguyên, từ tính toán (azurerm_linux_virtual_machine, azurerm_windows_virtual_machine) đến phân tích (azurerm_synapse_workspace). Một số tính năng gồm:
Phủ rộng: Quản lý một loạt lớn dịch vụ Azure, bao gồm máy ảo, tài khoản lưu trữ, Azure Kubernetes Service (AKS), Azure SQL Database, Azure Cosmos DB với MongoDB API, Azure Functions, và nhiều hơn nữa. Provider azurerm được phát triển tích cực để hỗ trợ các dịch vụ và tính năng Azure mới khi ra mắt.
Hàm động: Dùng các hàm do provider định nghĩa để tạo tên duy nhất (ví dụ: azurerm_resource_group.example.name) hoặc lấy thông tin tài nguyên hiện có (ví dụ: data.azurerm_virtual_network.existing.id). Điều này cho phép cấu hình linh hoạt và thông minh hơn.
Data source: Provider azurerm tận dụng data source để truy xuất thông tin về tài nguyên Azure hiện có. Điều này đặc biệt hữu ích khi bạn cần tham chiếu các tài nguyên không được cung cấp bởi cấu hình Terraform hiện tại. Ví dụ, bạn có thể lấy chi tiết của một mạng ảo hiện có để triển khai subnet hoặc VM mới mà không cần tạo lại VNet.
Trước khi đi sâu vào Terraform, việc hiểu cách cấu hình Azure thủ công cũng hữu ích—hướng dẫn cho người mới bắt đầu này sẽ đưa bạn qua những điều thiết yếu.
Thiết lập môi trường Terraform–Azure
Bắt tay vào thực hành thôi! Phần này hướng dẫn bạn các bước thiết lập ban đầu để dùng Terraform với đăng ký Azure của bạn.
Xác thực và công cụ CLI
Để tương tác với Azure, trước tiên bạn cần cài đặt và cấu hình Azure Command Line Interface (CLI). Azure CLI cung cấp các công cụ cần thiết cho xác thực và quản lý tài nguyên Azure. Sau khi cài, đăng nhập vào tài khoản Azure của bạn:
Lệnh trên sẽ mở cửa sổ trình duyệt để xác thực tương tác. Tham khảo nhanh, cheat sheet Azure CLI này có thể giúp tinh gọn quy trình trên dòng lệnh của bạn.
Đối với các triển khai tự động bằng Terraform, đặc biệt trong pipeline CI/CD, nên tạo và sử dụng service principal của Azure Active Directory (AAD). Service principal cung cấp cách xác thực an toàn, theo lập trình để Terraform truy cập đăng ký Azure của bạn mà không cần đăng nhập tương tác.
Để tạo service principal với vai trò "Contributor" ở phạm vi subscription, chạy:
az ad sp create-for-rbac --name"http://myTerraformServicePrincipal"--role"Contributor"--scopes"/subscriptions/<your-subscription-id>"Được hỗ trợ bởi
Đầu ra sẽ cung cấp appId, password và tenant (tenant ID). Bạn có thể đặt các giá trị này làm biến môi trường cho Terraform:
exportARM_CLIENT_ID="<appId>"exportARM_CLIENT_SECRET="<password>"exportARM_TENANT_ID="<tenant>"exportARM_SUBSCRIPTION_ID="<your-subscription-id>"Được hỗ trợ bởi
Khởi tạo dự án
Một dự án Terraform điển hình có bố cục thư mục có cấu trúc, thường tách các tệp .tf cho các loại tài nguyên hoặc module khác nhau (ví dụ: main.tf, variables.tf, outputs.tf, network.tf, compute.tf).
Để bắt đầu bất kỳ dự án Terraform nào, điều hướng đến thư mục dự án và chạy lệnh terraform init. Lệnh này khởi tạo thư mục làm việc, tải về plugin provider cần thiết (như azurerm) và thiết lập backend cho quản lý state như đã định trong cấu hình.
mkdir my-azure-terraform-project
cd my-azure-terraform-project
# Create your .tf files here
terraform initĐược hỗ trợ bởi
Lệnh này chuẩn bị thư mục của bạn cho các thao tác Terraform, đảm bảo mọi plugin cần thiết đã sẵn sàng.
Cung cấp tài nguyên Azure
Phần này đưa ra các ví dụ thực tế về việc cung cấp các tài nguyên Azure phổ biến bằng Terraform, minh họa cách định nghĩa và triển khai theo lập trình.
Mạng ảo và subnet
Terraform rất mạnh trong việc định nghĩa và triển khai hạ tầng mạng trên Azure. Bạn có thể dễ dàng định nghĩa mạng ảo (VNet) và chia nhỏ thành các subnet, kiểm soát không gian địa chỉ IP và cô lập mạng.
Cơ chế quản lý phụ thuộc vốn có của Terraform đảm bảo tài nguyên được tạo theo đúng thứ tự; ví dụ, subnet chỉ được cung cấp sau khi VNet mẹ đã được tạo thành công. Ví dụ:
Cung cấp máy ảo (VM) bằng Terraform rất trực quan. Để tự động hóa cấu hình hậu triển khai và thiết lập ban đầu, bạn có thể tận dụng script cloud-init.
cloud-init cho phép bạn đưa vào các script chạy ở lần khởi động đầu tiên của VM, cho phép các tác vụ như cài đặt phần mềm, cấu hình người dùng hoặc thiết lập dịch vụ, trực tiếp từ cấu hình Terraform của bạn.
Ví dụ tạo một Linux VM với script cloud-init đơn giản để cài Nginx:
Khi hạ tầng Azure của bạn phát triển, module hóa cấu hình Terraform trở nên then chốt để tái sử dụng, dễ bảo trì và mở rộng.
Module đóng gói một nhóm tài nguyên liên quan và cấu hình của chúng thành các đơn vị có thể tái sử dụng. Phần này cung cấp hướng dẫn về cấu trúc mã Terraform thành module và minh họa cách gọi các module đó trong cấu hình chính, giúp codebase gọn gàng và có tổ chức hơn.
resource "azurerm_resource_group" "app_rg" {
name = "my-webapp-rg"
location = "East US"
}
module "my_web_app" {
source = "./modules/web-app" # Path to your module
app_service_plan_name = "my-webapp-plan"
app_service_name = "my-unique-webapp-2025"
location = azurerm_resource_group.app_rg.location
resource_group_name = azurerm_resource_group.app_rg.name
}
output "webapp_url" {
value = module.my_web_app.app_service_default_hostname
}Được hỗ trợ bởi
Cấu trúc này giúp bạn dễ dàng tái sử dụng logic triển khai ứng dụng web của mình trên các môi trường hoặc dự án khác nhau.
Quy trình Terraform nâng cao
Phần này khám phá các tính năng Terraform tinh vi hơn, nâng cao tính linh hoạt và sức mạnh cho các triển khai hạ tầng của bạn, vượt ra ngoài việc cung cấp tài nguyên cơ bản.
Data source và cấu hình động
Data source trong Terraform cho phép bạn lấy thông tin về các tài nguyên hiện có, dù do Terraform quản lý hay không. Điều này cực kỳ hữu ích để tích hợp với hạ tầng sẵn có hoặc tra cứu động.
Kết hợp với cấu hình động (như for_each và count), data source cho phép các script Terraform linh hoạt, thích ứng cao có thể phản ứng với nhiều điều kiện và tình trạng tài nguyên.
Ví dụ: Dùng Data Source để tìm VNet hiện có và thêm subnet mới:
# Data source to fetch an existing Virtual Network
data "azurerm_virtual_network" "existing_vnet" {
name = "production-vnet"
resource_group_name = "production-network-rg"
}# Create a new subnet within the existing VNet
resource "azurerm_subnet" "new_app_subnet" {
name = "new-app-subnet"
resource_group_name = data.azurerm_virtual_network.existing_vnet.resource_group_name
virtual_network_name = data.azurerm_virtual_network.existing_vnet.name
address_prefixes = ["10.0.3.0/24"]}Được hỗ trợ bởi
Ví dụ: Tạo động nhiều VM bằng for_each và biến map:
Với các tổ chức yêu cầu tuân thủ và quản trị nghiêm ngặt, HashiCorp Sentinel cung cấp khung policy-as-code tích hợp với Terraform Enterprise (hoặc có thể tùy biến dùng với Terraform Cloud).
Sentinel cho phép bạn định nghĩa các chính sách chi tiết để đảm bảo bảo mật, chi phí và thực hành vận hành tốt trước khi hạ tầng được cung cấp.
Ví dụ, một chính sách có thể ngăn tạo VM lớn hơn một kích cỡ nhất định hoặc đảm bảo mọi tài nguyên có thẻ cụ thể. Các chính sách dựng sẵn có thể thực thi tiêu chuẩn tuân thủ, ngăn các triển khai không tuân thủ đi vào môi trường Azure của bạn.
Chiến lược tối ưu chi phí
Terraform, kết hợp với Azure Policy, có thể là công cụ mạnh mẽ để thực thi kiểm soát chi phí trong môi trường Azure của bạn.
Bằng cách định nghĩa Azure Policy để hạn chế SKU tài nguyên, bắt buộc gắn thẻ cho phân bổ chi phí, hoặc ngăn triển khai tài nguyên đắt đỏ, bạn có thể triển khai biện pháp tiết kiệm chi phí hiệu quả ngay trong quy trình IaC.
Terraform cũng có thể triển khai và quản lý Azure Policy, đảm bảo quy tắc quản trị của bạn được quản lý phiên bản và áp dụng nhất quán.
Ví dụ: Triển khai Azure Policy Definition bằng Terraform:
resource "azurerm_resource_group" "policy_rg" {
name = "azure-policy-rg"
location = "global" # Policies are global resources}
resource "azurerm_policy_definition" "deny_large_vms" {
name = "deny-large-vm-skus"
policy_type = "Custom"
mode = "All"
display_name = "Deny creation of large VM SKUs (E-series)"
description = "This policy denies the creation of Azure Virtual Machines with SKUs from the E-series for cost management."
policy_rule = <<POLICY_RULE
{"if":{"allOf":[{"field":"type","equals":"Microsoft.Compute/virtualMachines"},{"field":"Microsoft.Compute/virtualMachines/sku.name","like":"Standard_E*"}]},"then":{"effect":"deny"}}
POLICY_RULE
}
resource "azurerm_policy_assignment" "deny_large_vms_assignment" {
name = "deny-large-vm-skus-assignment"
scope = "/subscriptions/${data.azurerm_subscription.current.id}" # Assign to entire subscription
policy_definition_id = azurerm_policy_definition.deny_large_vms.id
display_name = "Deny large VM SKUs"
}
data "azurerm_subscription" "current" {}Được hỗ trợ bởi
Sự kết hợp này cho phép bạn tự động thực thi chính sách chi phí của tổ chức, ngăn chi tiêu vượt mức và thúc đẩy hiệu quả tài nguyên.
Tích hợp CI/CD
Phần này tập trung vào việc tích hợp Terraform vào pipeline Tích hợp Liên tục/Triển khai Liên tục (CI/CD) để triển khai tự động và tin cậy, giúp thay đổi hạ tầng trở thành một phần liền mạch của vòng đời phát triển phần mềm.
Azure DevOps pipelines
Azure DevOps cung cấp nền tảng vững chắc để xây dựng pipeline CI/CD. Quy trình phổ biến gồm:
Khởi tạo:terraform init để tải provider và thiết lập backend.
Lập kế hoạch:terraform plan -out để tạo kế hoạch thực thi và lưu lại.
Xem xét (phê duyệt thủ công): Giai đoạn người thực xem kế hoạch đã tạo để phê duyệt trước khi áp dụng.
Áp dụng:terraform apply tfplan để thực thi thay đổi.
Bạn có thể khám phá cách Azure DevOps hỗ trợ quy trình CI/CD đầu-cuối cho triển khai ứng dụng trong hướng dẫn thực hành này.
GitHub Actions
GitHub Actions cung cấp cách linh hoạt và mạnh mẽ để tự động hóa quy trình Terraform ngay trong repository GitHub của bạn. Nó dùng tệp YAML để định nghĩa workflow phản hồi các sự kiện như push hoặc pull request.
Các bước cho một triển khai Terraform cơ bản bằng GitHub Actions:
Định nghĩa trigger workflow: Thường là on: push đến nhánh cụ thể (ví dụ: main).
Checkout mã: Dùng actions/checkout@v3.
Cấu hình thông tin xác thực Azure: Thiết lập biến môi trường bằng GitHub Secrets (ví dụ: AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, AZURE_TENANT_ID, AZURE_SUBSCRIPTION_ID).
Cài Terraform: Dùng hashicorp/setup-terraform@v2.
Terraform init: Khởi tạo thư mục làm việc.
Terraform plan: Tạo và xuất kế hoạch thực thi.
Terraform apply (có điều kiện): Áp dụng thay đổi, thường phụ thuộc vào bước phê duyệt thủ công hoặc nhánh cụ thể.
Ví dụ: YAML cho workflow GitHub Actions (.github/workflows/terraform-azure.yml):
name:'Terraform Azure CI/CD'on:push:branches:- main
pull_request:branches:- main
env:ARM_CLIENT_ID: ${{ secrets.AZURE_CLIENT_ID }}ARM_CLIENT_SECRET: ${{ secrets.AZURE_CLIENT_SECRET }}ARM_TENANT_ID: ${{ secrets.AZURE_TENANT_ID }}ARM_SUBSCRIPTION_ID: ${{ secrets.AZURE_SUBSCRIPTION_ID }}TF_STATE_RG:'my-terraform-state-rg'TF_STATE_SA:'mystorageterraformstate'TF_STATE_CONTAINER:'tfstate'TF_STATE_KEY:'production/terraform.tfstate'jobs:terraform:name:'Terraform Actions'runs-on: ubuntu-latest
defaults:run:working-directory:'./terraform'# Assuming Terraform files are in a 'terraform' foldersteps:-name: Checkout
uses: actions/checkout@v3
-name: Setup Terraform
uses: hashicorp/setup-terraform@v2
-name: Terraform Init
id: init
run: terraform init -backend-config="resource_group_name=${{ env.TF_STATE_RG }}" -backend-config="storage_account_name=${{ env.TF_STATE_SA }}" -backend-config="container_name=${{ env.TF_STATE_CONTAINER }}" -backend-config="key=${{ env.TF_STATE_KEY }}"
-name: Terraform Plan
id: plan
run: terraform plan -no-color
-name: Terraform Apply
if: github.ref == 'refs/heads/main' && github.event_name == 'push'
run: terraform apply -auto-approveĐược hỗ trợ bởi
Bảo mật và tuân thủ
Phần này nêu bật các cân nhắc về bảo mật và tuân thủ khi làm việc với Terraform trên Azure, nhấn mạnh thực hành an toàn cho dữ liệu nhạy cảm và truy cập mạng.
Tích hợp Azure Key Vault
Quản lý dữ liệu nhạy cảm như API key, chuỗi kết nối, thông tin đăng nhập cơ sở dữ liệu và chứng chỉ trong cấu hình Terraform có thể rủi ro nếu không xử lý đúng. Azure Key Vault cung cấp giải pháp tập trung, an toàn để lưu trữ và quản lý secret, key và chứng chỉ.
Ví dụ: Lấy mật khẩu cơ sở dữ liệu từ Key Vault:
# Data source to retrieve an existing Azure Key Vault
data "azurerm_key_vault" "my_key_vault" {
name = "my-secure-keyvault"
resource_group_name = "my-secrets-rg"
}# Data source to retrieve a specific secret from the Key Vault
data "azurerm_key_vault_secret" "db_password" {
name = "DbPassword"
key_vault_id = data.azurerm_key_vault.my_key_vault.id
}
resource "azurerm_sql_server" "example" {
administrator_login = "sqladmin"
administrator_login_password = data.azurerm_key_vault_secret.db_password.value # Securely retrieve password}Được hỗ trợ bởi
Cách này đảm bảo dữ liệu nhạy cảm không bao giờ lộ ra trực tiếp trong mã Terraform hoặc tệp state của bạn, tuân thủ thực hành bảo mật tốt.
Network Security Group (NSG)
Network Security Group (NSG) là nền tảng để thực thi quy tắc lưu lượng và bảo vệ mạng ảo Azure của bạn. Chúng hoạt động như tường lửa ảo, cho phép hoặc từ chối lưu lượng vào/ra tài nguyên Azure dựa trên các quy tắc bạn định nghĩa.
Ví dụ: Cấu hình NSG cho ứng dụng web:
resource "azurerm_network_security_group" "web_nsg" {
name = "web-nsg"
location = azurerm_resource_group.network_rg.location
resource_group_name = azurerm_resource_group.network_rg.name
security_rule {
name = "AllowHTTPInbound"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "80"
source_address_prefix = "Internet"
destination_address_prefix = "*"}
security_rule {
name = "AllowSSHInbound"
priority = 120
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "YourTrustedIPRange" # IMPORTANT: Restrict to known IPs
destination_address_prefix = "*"}}# Associate NSG with a subnet
resource "azurerm_subnet_network_security_group_association" "web_subnet_nsg_association" {
subnet_id = azurerm_subnet.web_subnet.id
network_security_group_id = azurerm_network_security_group.web_nsg.id
}Được hỗ trợ bởi
Thực hành tốt cho triển khai cấp doanh nghiệp
Phần này nêu các thực hành thiết yếu để triển khai và quản lý Terraform ở quy mô doanh nghiệp, tập trung vào thiết kế, bảo trì và giám sát.
Kiến trúc tham chiếu
Để triển khai Azure vững chắc và hiệu quả, hãy căn chỉnh cấu hình Terraform của bạn với Azure Well-Architected Framework. Khung này cung cấp bản thiết kế để xây dựng giải pháp đám mây chất lượng cao, an toàn, tối ưu chi phí, dẫn dắt thiết kế Terraform của bạn hướng tới độ tin cậy, bảo mật, tối ưu chi phí, xuất sắc vận hành và hiệu năng.
Vệ sinh tệp state
Tệp state của Terraform là nguồn chân lý duy nhất cho hạ tầng của bạn. Đảm bảo tính toàn vẹn và bảo mật của nó bằng cách:
Lưu trữ từ xa: Luôn dùng backend từ xa như Azure Blob Storage để quản lý state cộng tác.
Mã hóa và kiểm soát truy cập: Xác minh state từ xa của bạn được mã hóa khi lưu trữ và áp dụng Azure RBAC chặt chẽ để giới hạn truy cập.
Khóa state và phiên bản hóa: Tận dụng khóa state tích hợp để tránh xung đột và bật phiên bản cho container lưu trữ để theo dõi lịch sử và khôi phục.
Giám sát và phát hiện drift
Duy trì tính nhất quán hạ tầng bằng cách chủ động giám sát "drift cấu hình"—sự sai lệch không được phép so với state Terraform đã định.
Phát hiện chủ động: Thiết lập chạy terraform plan định kỳ trong pipeline CI/CD (ví dụ: hàng đêm) để phát hiện thay đổi.
Giám sát Azure: Sử dụng Azure Monitor và Log Analytics để theo dõi tình trạng tài nguyên và sự kiện.
Khắc phục tự động: Xây dựng quy trình (thủ công hoặc tự động) để chạy lại terraform apply đưa tài nguyên bị drift về đúng IaC.
Vậy là xong! Đến đây, bạn đã thấy Terraform có thể giúp quản lý tài nguyên Azure hiệu quả và có thể dự đoán hơn thế nào. Chúng ta đã xem cách đưa tự động hóa vào quy trình với công cụ CI/CD như Azure DevOps và GitHub Actions, và cách giữ an toàn nhờ Azure Key Vault và Network Security Group.
Chúng ta cũng đã đề cập một số thực hành tốt quan trọng—như sử dụng kiến trúc tham chiếu, quản lý cẩn thận tệp state, và theo dõi thay đổi với giám sát và phát hiện drift.
Với các công cụ và mẹo này, bạn đã sẵn sàng xây dựng hạ tầng đáng tin cậy và có khả năng mở rộng hơn trên Azure.
Lợi ích chính của việc dùng Terraform với Azure là gì?⌄
Sử dụng Terraform với Azure mang lại tính nhất quán, khả năng mở rộng và tốc độ trong triển khai hạ tầng. Nó cho phép bạn định nghĩa tài nguyên đám mây dưới dạng mã, giảm lỗi thủ công, cho phép triển khai lặp lại và giúp quản lý môi trường phức tạp dễ dàng hơn.
Terraform quản lý trạng thái hạ tầng Azure của tôi như thế nào?⌄
Terraform sử dụng tệp state (.tfstate) để theo dõi các tài nguyên Azure bạn đã triển khai. Tệp này ánh xạ cấu hình Terraform của bạn tới hạ tầng thực tế, cho phép Terraform hiểu trạng thái hiện tại và xác định những thay đổi cần thiết trong các lần triển khai tiếp theo.
Tôi có thể dùng Terraform cho cả triển khai hạ tầng mới và quản lý tài nguyên Azure hiện có không?⌄
Chắc chắn là có! Terraform rất xuất sắc trong việc cung cấp hạ tầng mới từ đầu. Nó cũng có thể import các tài nguyên Azure hiện có vào state của mình, cho phép bạn quản lý chúng bằng các cấu hình Terraform về sau.
Terraform tích hợp vào pipeline CI/CD để triển khai Azure như thế nào?⌄
Terraform tích hợp với các nền tảng CI/CD phổ biến như Azure DevOps Pipelines và GitHub Actions. Thông thường, một pipeline CI/CD cho Terraform gồm các giai đoạn như terraform init (khởi tạo), terraform plan (hiển thị thay đổi đề xuất), và terraform apply (áp dụng thay đổi lên Azure). Tự động hóa này đảm bảo triển khai hạ tầng nhất quán và đáng tin cậy.
Một số cân nhắc bảo mật chính khi dùng Terraform trên Azure là gì?⌄
Các cân nhắc chính gồm sử dụng Azure Key Vault để quản lý an toàn dữ liệu nhạy cảm (như API key hoặc mật khẩu) thay vì hardcode. Ngoài ra, cấu hình đúng Network Security Group (NSG) qua Terraform là điều quan trọng để kiểm soát lưu lượng mạng và thực thi nguyên tắc đặc quyền tối thiểu cho tài nguyên Azure của bạn.
Karen là một Kỹ sư Dữ liệu đam mê xây dựng các nền tảng dữ liệu có khả năng mở rộng. Cô có kinh nghiệm tự động hóa hạ tầng với Terraform và háo hức chia sẻ những gì mình học được qua các bài blog và hướng dẫn. Karen là một người xây dựng cộng đồng và cô tâm huyết với việc kết nối những chuyên gia dữ liệu.
Nếu bạn từng phải lướt qua Azure portal và ghép nối tài nguyên đám mây thủ công, tôi cũng đã trải qua—và điều đó nhanh chóng trở nên mệt mỏi. Đó là lúc Terraform xuất hiện. Đây là một công cụ infrastructure-as-code (IaC) cho phép bạn định nghĩa và quản lý thiết lập đám mây chỉ với vài dòng mã.
Trong hướng dẫn này, chúng ta sẽ tập trung vào việc sử dụng Terraform với Azure. Tôi sẽ giới thiệu Terraform là gì, cách nó hoạt động trong hệ sinh thái Azure, và cách bắt đầu với các ví dụ thực tế. Chúng ta cũng sẽ đề cập đến một số thực hành tốt để giúp bạn xây dựng các triển khai an toàn và đáng tin cậy ngay từ đầu.
Nếu bạn mới làm quen với hệ sinh thái Azure, lộ trình Azure cơ bản này cung cấp phần giới thiệu có cấu trúc về các dịch vụ và nguyên tắc cốt lõi.
Vì sao dùng Terraform trên Azure?
Terraform, được phát triển bởi HashiCorp, là một công cụ IaC mã nguồn mở cho phép bạn định nghĩa và quản lý hạ tầng đám mây bằng cú pháp khai báo. Khi kết hợp với Microsoft Azure, nó giúp bạn viết kịch bản cho các tài nguyên như mạng ảo, VM và cơ sở dữ liệu trong các tệp cấu hình dễ đọc.
Vì sao dùng Terraform với Azure? Tất cả là về tính nhất quán, khả năng mở rộng và tốc độ. Dù bạn khởi tạo một VM đơn lẻ hay điều phối một ứng dụng đa tầng phức tạp, Terraform đơn giản hóa quy trình đồng thời giảm lỗi do con người.
Nếu bạn hoàn toàn mới với Terraform, hướng dẫn thân thiện cho người mới bắt đầu về Terraform này giải thích các nguyên lý cơ bản và cách bắt đầu sử dụng nó cho hạ tầng dưới dạng mã.
Các khái niệm cốt lõi của Terraform trên Azure
Tích hợp của Terraform với Azure mang lại một bộ tính năng giúp quản lý hạ tầng trực quan và mạnh mẽ. Hãy xem các thành phần chính và các loại tài nguyên Terraform sẵn có.
Quản lý hạ tầng theo kiểu khai báo
Cách tiếp cận khai báo của Terraform cho phép bạn định nghĩa hạ tầng Azure của mình trong các tệp
.tfbằng HashiCorp Configuration Language (HCL).Ví dụ, bạn có thể chỉ định một Azure VM với kích cỡ, vị trí và thiết lập mạng, và Terraform sẽ xử lý phần cách tạo ra nó. Dưới đây là ví dụ nhanh:
Định nghĩa trên đảm bảo tính idempotent—chạy cùng đoạn mã nhiều lần sẽ cho kết quả như nhau, không trùng lặp hoặc lỗi.
Giờ hãy cùng phân tích các khái niệm Terraform cốt lõi giúp cách tiếp cận khai báo này hoạt động.
Terraform state (.tfstate)
Tệp
terraform.tfstatelà trái tim của mô hình khai báo Terraform. Đây là một tệp JSON ghi lại trạng thái hiện tại của các tài nguyên Azure của bạn—những gì đã được triển khai, cấu hình và mối liên hệ giữa chúng.Khi bạn chạy
terraform apply, Terraform so sánh các tệp.tf(trạng thái mong muốn) với tệp.tfstate(trạng thái thực tế) để xác định các thay đổi cần thực hiện. Ví dụ, nếu bạn cập nhật kích cỡ VM trong mã, Terraform sẽ kiểm tra tệp.tfstatevà chỉ sửa thuộc tính đó trên Azure.Bạn có thể lưu tệp này cục bộ, nhưng với nhóm, hãy dùng Azure Blob Storage để cộng tác và khóa state nhằm tránh xung đột.
Biến số Terraform (.tfvars)
Biến giúp cấu hình của bạn linh hoạt và tái sử dụng. Định nghĩa trong
variables.tfvàterraform.tfvars, chúng cho phép bạn tham số hóa các giá trị như tên tài nguyên hoặc khu vực.Ví dụ:
Tệp
terraform.tfvarssẽ ghi đè giá trị mặc định, nhờ đó bạn có thể triển khai cùng đoạn mã ở các khu vực khác nhau mà không cần chỉnh sửa các tệp.tflõi. Điều này hữu ích để quản lý nhiều môi trường (ví dụ: dev, prod).Các tệp cấu hình Terraform (.tf)
Các tệp này chứa mã hạ tầng của bạn, được viết bằng HCL. Chúng định nghĩa tài nguyên, provider, module, và hơn thế nữa. Bạn có thể tổ chức thành một
main.tfduy nhất hoặc tách thành nhiều tệp (ví dụ:variables.tf,outputs.tf,network.tf,compute.tf) để rõ ràng và dễ quản lý hơn.Terraform plan
Trước khi áp dụng thay đổi, lệnh
terraform planhiển thị bản xem trước những việc Terraform sẽ làm—tạo, cập nhật hoặc xóa tài nguyên—dựa trên chênh lệch giữa các tệp.tfvà.tfstate. Đây giống như một lần chạy thử giúp phát hiện sớm các vấn đề, hiển thị tóm tắt chi tiết các hành động dự kiến.Terraform apply
Lệnh
terraform applythực thi các thay đổi được xác định bởiterraform plan, cập nhật Azure để khớp với trạng thái mong muốn và làm mới tệp.tfstate. Bạn sẽ được nhắc xác nhận trước khi áp dụng thay đổi, tạo một lớp an toàn.Workspace
Workspace của Terraform cho phép bạn quản lý nhiều môi trường (ví dụ: dev, staging, prod) với một bộ tệp
.tfduy nhất. Mỗi workspace có tệp.tfstateriêng, nên bạn có thể triển khai hạ tầng tương tự với cấu hình khác nhau (ví dụ: khác kích cỡ VM giữa dev và prod).Để tạo workspace mới, bạn có thể dùng:
Sau đó chuyển sang workspace:
Module
Module là các gói mã Terraform có thể tái sử dụng. Ví dụ, bạn có thể tạo một module cho mạng ảo Azure và dùng lại trên nhiều dự án, giảm trùng lặp và thúc đẩy chuẩn hóa. Chúng ta sẽ đề cập module nhiều hơn ở phần thực hành tốt.
Các khái niệm này—
.tfstate,.tfvars, và quy trình khai báo—phối hợp để đảm bảo hạ tầng Azure của bạn có thể dự đoán, tái lập và dễ quản lý.Quản lý state và cộng tác
Tệp
terraform.tfstatetheo dõi trạng thái hạ tầng của bạn. Với nhóm, lưu nó trong Azure Blob Storage là thực hành quan trọng để cho phép truy cập chia sẻ và quản lý phiên bản. Cấu hình backend từ xa này giúp mọi thành viên làm việc với một cái nhìn nhất quán về hạ tầng.Khóa state, tính năng được nhiều backend từ xa như Azure Blob Storage cung cấp tự động, ngăn xung đột khi nhiều thành viên cùng lúc chạy lệnh Terraform, bảo đảm tính toàn vẹn dữ liệu.
Ví dụ cấu hình backend Azure Blob Storage:
Trước khi chạy
terraform initvới cấu hình này, bạn cần tạo tài khoản lưu trữ và container Azure thủ công hoặc qua một cấu hình Terraform riêng. Thiết lập này đảm bảo quản trị tài nguyên Azure an toàn và có thể cộng tác.Hệ sinh thái provider và AzureRM
Provider azurerm là cầu nối của Terraform đến Azure, chuyển HCL thành các lời gọi API để quản lý dịch vụ như VM, mạng và cơ sở dữ liệu.
Nó hỗ trợ hàng trăm loại tài nguyên, từ tính toán (
azurerm_linux_virtual_machine,azurerm_windows_virtual_machine) đến phân tích (azurerm_synapse_workspace). Một số tính năng gồm:azurermđược phát triển tích cực để hỗ trợ các dịch vụ và tính năng Azure mới khi ra mắt.azurerm_resource_group.example.name) hoặc lấy thông tin tài nguyên hiện có (ví dụ:data.azurerm_virtual_network.existing.id). Điều này cho phép cấu hình linh hoạt và thông minh hơn.azurermtận dụng data source để truy xuất thông tin về tài nguyên Azure hiện có. Điều này đặc biệt hữu ích khi bạn cần tham chiếu các tài nguyên không được cung cấp bởi cấu hình Terraform hiện tại. Ví dụ, bạn có thể lấy chi tiết của một mạng ảo hiện có để triển khai subnet hoặc VM mới mà không cần tạo lại VNet.Trước khi đi sâu vào Terraform, việc hiểu cách cấu hình Azure thủ công cũng hữu ích—hướng dẫn cho người mới bắt đầu này sẽ đưa bạn qua những điều thiết yếu.
Thiết lập môi trường Terraform–Azure
Bắt tay vào thực hành thôi! Phần này hướng dẫn bạn các bước thiết lập ban đầu để dùng Terraform với đăng ký Azure của bạn.
Xác thực và công cụ CLI
Để tương tác với Azure, trước tiên bạn cần cài đặt và cấu hình Azure Command Line Interface (CLI). Azure CLI cung cấp các công cụ cần thiết cho xác thực và quản lý tài nguyên Azure. Sau khi cài, đăng nhập vào tài khoản Azure của bạn:
Lệnh trên sẽ mở cửa sổ trình duyệt để xác thực tương tác. Tham khảo nhanh, cheat sheet Azure CLI này có thể giúp tinh gọn quy trình trên dòng lệnh của bạn.
Đối với các triển khai tự động bằng Terraform, đặc biệt trong pipeline CI/CD, nên tạo và sử dụng service principal của Azure Active Directory (AAD). Service principal cung cấp cách xác thực an toàn, theo lập trình để Terraform truy cập đăng ký Azure của bạn mà không cần đăng nhập tương tác.
Để tạo service principal với vai trò "Contributor" ở phạm vi subscription, chạy:
Đầu ra sẽ cung cấp
appId,passwordvàtenant(tenant ID). Bạn có thể đặt các giá trị này làm biến môi trường cho Terraform:Khởi tạo dự án
Một dự án Terraform điển hình có bố cục thư mục có cấu trúc, thường tách các tệp
.tfcho các loại tài nguyên hoặc module khác nhau (ví dụ:main.tf,variables.tf,outputs.tf,network.tf,compute.tf).Để bắt đầu bất kỳ dự án Terraform nào, điều hướng đến thư mục dự án và chạy lệnh
terraform init. Lệnh này khởi tạo thư mục làm việc, tải về plugin provider cần thiết (nhưazurerm) và thiết lập backend cho quản lý state như đã định trong cấu hình.Lệnh này chuẩn bị thư mục của bạn cho các thao tác Terraform, đảm bảo mọi plugin cần thiết đã sẵn sàng.
Cung cấp tài nguyên Azure
Phần này đưa ra các ví dụ thực tế về việc cung cấp các tài nguyên Azure phổ biến bằng Terraform, minh họa cách định nghĩa và triển khai theo lập trình.
Mạng ảo và subnet
Terraform rất mạnh trong việc định nghĩa và triển khai hạ tầng mạng trên Azure. Bạn có thể dễ dàng định nghĩa mạng ảo (VNet) và chia nhỏ thành các subnet, kiểm soát không gian địa chỉ IP và cô lập mạng.
Cơ chế quản lý phụ thuộc vốn có của Terraform đảm bảo tài nguyên được tạo theo đúng thứ tự; ví dụ, subnet chỉ được cung cấp sau khi VNet mẹ đã được tạo thành công. Ví dụ:
Máy ảo với cloud-init
Cung cấp máy ảo (VM) bằng Terraform rất trực quan. Để tự động hóa cấu hình hậu triển khai và thiết lập ban đầu, bạn có thể tận dụng script
cloud-init.cloud-initcho phép bạn đưa vào các script chạy ở lần khởi động đầu tiên của VM, cho phép các tác vụ như cài đặt phần mềm, cấu hình người dùng hoặc thiết lập dịch vụ, trực tiếp từ cấu hình Terraform của bạn.Ví dụ tạo một Linux VM với script
cloud-initđơn giản để cài Nginx:Module hóa hạ tầng
Khi hạ tầng Azure của bạn phát triển, module hóa cấu hình Terraform trở nên then chốt để tái sử dụng, dễ bảo trì và mở rộng.
Module đóng gói một nhóm tài nguyên liên quan và cấu hình của chúng thành các đơn vị có thể tái sử dụng. Phần này cung cấp hướng dẫn về cấu trúc mã Terraform thành module và minh họa cách gọi các module đó trong cấu hình chính, giúp codebase gọn gàng và có tổ chức hơn.
Ví dụ: Cấu trúc module (
modules/web-app/main.tf):Ví dụ: Gọi module (
main.tftrong thư mục gốc):Cấu trúc này giúp bạn dễ dàng tái sử dụng logic triển khai ứng dụng web của mình trên các môi trường hoặc dự án khác nhau.
Quy trình Terraform nâng cao
Phần này khám phá các tính năng Terraform tinh vi hơn, nâng cao tính linh hoạt và sức mạnh cho các triển khai hạ tầng của bạn, vượt ra ngoài việc cung cấp tài nguyên cơ bản.
Data source và cấu hình động
Data source trong Terraform cho phép bạn lấy thông tin về các tài nguyên hiện có, dù do Terraform quản lý hay không. Điều này cực kỳ hữu ích để tích hợp với hạ tầng sẵn có hoặc tra cứu động.
Kết hợp với cấu hình động (như
for_eachvàcount), data source cho phép các script Terraform linh hoạt, thích ứng cao có thể phản ứng với nhiều điều kiện và tình trạng tài nguyên.Ví dụ: Dùng Data Source để tìm VNet hiện có và thêm subnet mới:
Ví dụ: Tạo động nhiều VM bằng
for_eachvà biến map:Policy as code với Sentinel
Với các tổ chức yêu cầu tuân thủ và quản trị nghiêm ngặt, HashiCorp Sentinel cung cấp khung policy-as-code tích hợp với Terraform Enterprise (hoặc có thể tùy biến dùng với Terraform Cloud).
Sentinel cho phép bạn định nghĩa các chính sách chi tiết để đảm bảo bảo mật, chi phí và thực hành vận hành tốt trước khi hạ tầng được cung cấp.
Ví dụ, một chính sách có thể ngăn tạo VM lớn hơn một kích cỡ nhất định hoặc đảm bảo mọi tài nguyên có thẻ cụ thể. Các chính sách dựng sẵn có thể thực thi tiêu chuẩn tuân thủ, ngăn các triển khai không tuân thủ đi vào môi trường Azure của bạn.
Chiến lược tối ưu chi phí
Terraform, kết hợp với Azure Policy, có thể là công cụ mạnh mẽ để thực thi kiểm soát chi phí trong môi trường Azure của bạn.
Bằng cách định nghĩa Azure Policy để hạn chế SKU tài nguyên, bắt buộc gắn thẻ cho phân bổ chi phí, hoặc ngăn triển khai tài nguyên đắt đỏ, bạn có thể triển khai biện pháp tiết kiệm chi phí hiệu quả ngay trong quy trình IaC.
Terraform cũng có thể triển khai và quản lý Azure Policy, đảm bảo quy tắc quản trị của bạn được quản lý phiên bản và áp dụng nhất quán.
Ví dụ: Triển khai Azure Policy Definition bằng Terraform:
Sự kết hợp này cho phép bạn tự động thực thi chính sách chi phí của tổ chức, ngăn chi tiêu vượt mức và thúc đẩy hiệu quả tài nguyên.
Tích hợp CI/CD
Phần này tập trung vào việc tích hợp Terraform vào pipeline Tích hợp Liên tục/Triển khai Liên tục (CI/CD) để triển khai tự động và tin cậy, giúp thay đổi hạ tầng trở thành một phần liền mạch của vòng đời phát triển phần mềm.
Azure DevOps pipelines
Azure DevOps cung cấp nền tảng vững chắc để xây dựng pipeline CI/CD. Quy trình phổ biến gồm:
terraform initđể tải provider và thiết lập backend.terraform plan -outđể tạo kế hoạch thực thi và lưu lại.terraform apply tfplanđể thực thi thay đổi.Bạn có thể khám phá cách Azure DevOps hỗ trợ quy trình CI/CD đầu-cuối cho triển khai ứng dụng trong hướng dẫn thực hành này.
GitHub Actions
GitHub Actions cung cấp cách linh hoạt và mạnh mẽ để tự động hóa quy trình Terraform ngay trong repository GitHub của bạn. Nó dùng tệp YAML để định nghĩa workflow phản hồi các sự kiện như push hoặc pull request.
Các bước cho một triển khai Terraform cơ bản bằng GitHub Actions:
on: pushđến nhánh cụ thể (ví dụ:main).actions/checkout@v3.AZURE_CLIENT_ID,AZURE_CLIENT_SECRET,AZURE_TENANT_ID,AZURE_SUBSCRIPTION_ID).hashicorp/setup-terraform@v2.Ví dụ: YAML cho workflow GitHub Actions (
.github/workflows/terraform-azure.yml):Bảo mật và tuân thủ
Phần này nêu bật các cân nhắc về bảo mật và tuân thủ khi làm việc với Terraform trên Azure, nhấn mạnh thực hành an toàn cho dữ liệu nhạy cảm và truy cập mạng.
Tích hợp Azure Key Vault
Quản lý dữ liệu nhạy cảm như API key, chuỗi kết nối, thông tin đăng nhập cơ sở dữ liệu và chứng chỉ trong cấu hình Terraform có thể rủi ro nếu không xử lý đúng. Azure Key Vault cung cấp giải pháp tập trung, an toàn để lưu trữ và quản lý secret, key và chứng chỉ.
Ví dụ: Lấy mật khẩu cơ sở dữ liệu từ Key Vault:
Cách này đảm bảo dữ liệu nhạy cảm không bao giờ lộ ra trực tiếp trong mã Terraform hoặc tệp state của bạn, tuân thủ thực hành bảo mật tốt.
Network Security Group (NSG)
Network Security Group (NSG) là nền tảng để thực thi quy tắc lưu lượng và bảo vệ mạng ảo Azure của bạn. Chúng hoạt động như tường lửa ảo, cho phép hoặc từ chối lưu lượng vào/ra tài nguyên Azure dựa trên các quy tắc bạn định nghĩa.
Ví dụ: Cấu hình NSG cho ứng dụng web:
Thực hành tốt cho triển khai cấp doanh nghiệp
Phần này nêu các thực hành thiết yếu để triển khai và quản lý Terraform ở quy mô doanh nghiệp, tập trung vào thiết kế, bảo trì và giám sát.
Kiến trúc tham chiếu
Để triển khai Azure vững chắc và hiệu quả, hãy căn chỉnh cấu hình Terraform của bạn với Azure Well-Architected Framework. Khung này cung cấp bản thiết kế để xây dựng giải pháp đám mây chất lượng cao, an toàn, tối ưu chi phí, dẫn dắt thiết kế Terraform của bạn hướng tới độ tin cậy, bảo mật, tối ưu chi phí, xuất sắc vận hành và hiệu năng.
Vệ sinh tệp state
Tệp state của Terraform là nguồn chân lý duy nhất cho hạ tầng của bạn. Đảm bảo tính toàn vẹn và bảo mật của nó bằng cách:
Giám sát và phát hiện drift
Duy trì tính nhất quán hạ tầng bằng cách chủ động giám sát "drift cấu hình"—sự sai lệch không được phép so với state Terraform đã định.
terraform planđịnh kỳ trong pipeline CI/CD (ví dụ: hàng đêm) để phát hiện thay đổi.terraform applyđưa tài nguyên bị drift về đúng IaC.Để giám sát và tối ưu hạ tầng sâu hơn, Azure Monitor cung cấp những thông tin chuyên sâu—hướng dẫn này chỉ bạn cách bắt đầu.
Kết luận
Vậy là xong! Đến đây, bạn đã thấy Terraform có thể giúp quản lý tài nguyên Azure hiệu quả và có thể dự đoán hơn thế nào. Chúng ta đã xem cách đưa tự động hóa vào quy trình với công cụ CI/CD như Azure DevOps và GitHub Actions, và cách giữ an toàn nhờ Azure Key Vault và Network Security Group.
Chúng ta cũng đã đề cập một số thực hành tốt quan trọng—như sử dụng kiến trúc tham chiếu, quản lý cẩn thận tệp state, và theo dõi thay đổi với giám sát và phát hiện drift.
Với các công cụ và mẹo này, bạn đã sẵn sàng xây dựng hạ tầng đáng tin cậy và có khả năng mở rộng hơn trên Azure.
Muốn kiểm chứng kỹ năng của bạn? Những câu hỏi phỏng vấn Terraform này có thể giúp bạn chuẩn bị cho cơ hội việc làm hoặc chứng chỉ!