Hầu hết chúng ta đã thực hiện nó, triển khai các máy ảo tạm thời lên Azure. Một điều mà nhiều người trong chúng ta cũng đã làm là quên xóa các tài nguyên được gắn vào các VM đó khi xóa chúng. Điều này có thể dẫn đến chi phí không mong muốn lên tới hàng ngàn đô la nếu bạn không cẩn thận.
Trong bài viết này, chúng ta sẽ tìm hiểu cách triển khai VM lên Azure và xóa mọi dấu vết của chúng khi chúng ta kết thúc bằng cách sử dụng Terraform.
Điều kiện tiên quyết
Bạn cần hoàn thành một vài điều kiện tiên quyết để có thể theo dõi trong bài viết này:
- Đã cài đặt Azure CLI .(http://redirect.viglink.com/?u=https%3A%2F%2Fdocs.microsoft.com%2Fen-us%2Fcli%2Fazure%2Finstall-azure-cli%3Fview%3Dazure-cli-latest&key=204a528a336ede4177fff0d84a044482)
- Trở thành quản trị viên qua Đăng ký Azure (hoặc tương tự), cho phép bạn sử dụng nó để tạo các nhóm tài nguyên và tài nguyên.
Với những cách này, hãy bắt đầu bằng cách tải xuống và cài đặt Terraform.
Cài đặt Terraform
Terraform có thể được cài đặt theo một vài cách khác nhau. Trong Windows, cách dễ nhất là sử dụng choco:
choco install terraform
Trên máy Macintosh, nó có sẵn bằng cách sử dụng Brew:
brew install terraform
Thông tin thêm về việc cài đặt Terraform có sẵn trong tài liệu về Terraform https://learn.hashicorp.com/terraform/getting-started/install.html.
Giả sử rằng mọi thứ đã hoạt động tốt với cài đặt, bạn có thể xác nhận rằng nó hoạt động bằng cách chạy lệnh terraform version
.
Bây giờ bạn đã xác nhận rằng terraform hoạt động trên máy của bạn, đã đến lúc xác thực với đăng ký Azure thông qua Azure CLI.
Chứng thực
Để xác thực và đặt đăng ký trong Azure CLI, bạn cần đăng nhập. Mở một thiết bị đầu cuối và gõ:
az login
Và sau đó, sau khi xác thực, hãy liệt kê tất cả các đăng ký của bạn bằng cách nhập:
az account list
Nếu bạn có sẵn một số đăng ký, hãy sao chép id đăng ký của chính xác và nhập:
az account set --subscription="COPIED_SUBSCRIPTION_ID"
Bây giờ bạn đã đặt Azure CLI để sử dụng đăng ký của mình. (Đây là đăng ký mà terraform cũng sẽ sử dụng sau này.) Bây giờ là lúc tạo mẫu terraform mà chúng ta sẽ sử dụng để triển khai VM của mình.
Tạo mẫu Terraform
Mẫu Terraform là một tệp văn bản đơn giản với tệp kết thúc .tf . Nó có một cú pháp giống như JSON, và có thể được đọc và tạo dễ dàng. Mẫu bao gồm chủ yếu hai phần: các nhà cung cấp (xử lý giao tiếp với dịch vụ mà bạn muốn triển khai) và các tài nguyên mà nhà cung cấp tạo ra.
Chúng tôi bắt đầu bằng cách tạo một tệp có tên vm.tf trong một thư mục trống. Terraform sẽ cần một thư mục trống để nó có thể viết trạng thái của cấu hình sau này.
Bây giờ, hãy mở tệp đó bằng trình soạn thảo văn bản yêu thích của bạn và thêm nhà cung cấp:
provider "azurerm" {
version = "=2.11.0"
features {}
}
Điều này sẽ cho Terraform biết rằng bạn muốn sử dụng nhà cung cấp AzureRM (để tạo tài nguyên thiên nhiên) và đó phải là phiên bản 2.11. Điều quan trọng là chỉ định số phiên bản vì chức năng giữa các phiên bản khác nhau có thể khác nhau rất nhiều.
Sau khi bạn đã viết nó vào tệp văn bản, đã đến lúc thêm nhóm tài nguyên Azure của chúng tôi. Điều này cũng được xem bởi Terraform như là một tài nguyên:
resource "azurerm_resource_group" "resourcegroup" {
name = "test-vm"
location = "westus"
tags = {
project = "some_test_project"
}
}
Đoạn mã trên tạo ra một nhóm tài nguyên có tên là test test-vm, nằm ở khu vực phía tây Hoa Kỳ. Nó cũng thêm một thẻ với tên dự án trên đó.
Để chạy VM thành công, chúng ta cũng cần một mạng. Và bởi vì Terraform được tạo cho Cơ sở hạ tầng dưới dạng Mã (IaC), nên nó cũng có sẵn dưới dạng tài nguyên:
resource "azurerm_virtual_network" "network" {
name = "${azurerm_resource_group.resourcegroup.name}-network"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.resourcegroup.location
resource_group_name = azurerm_resource_group.resourcegroup.name
tags = azurerm_resource_group.resourcegroup.tags
}
Điều này tạo ra một mạng ảo. Nó cũng sử dụng một biến trong tham số tên . Nếu bạn xem xét kỹ, bạn sẽ thấy rằng nó đề cập đến nhóm tài nguyên mà chúng tôi đã xác định ở trên:
"${azurerm_resource_group.resourcegroup.name}-network"
Điều đó có nghĩa là mạng ảo sẽ được đặt tên test-vm-mạng. Chúng tôi cũng làm như vậy đối với vị trí, tên nhóm tài nguyên và thẻ.
Tiếp theo, đã đến lúc xác định mạng con mà chúng ta sẽ đặt VM vào, sử dụng các phương thức tương tự bằng các biến như trước:
resource "azurerm_subnet" "subnet" {
name = "${azurerm_resource_group.resourcegroup.name}-subnet"
resource_group_name = azurerm_resource_group.resourcegroup.name
virtual_network_name = azurerm_virtual_network.network.name
address_prefix = "10.0.2.0/24"
}
Điều này tạo ra một mạng con được gọi là test-vm-subnet .
Bây giờ, hãy xác định NIC mà VM cũng sẽ sử dụng:
resource "azurerm_network_interface" "vm1-nic" {
name = "vm1-NIC"
location = azurerm_resource_group.resourcegroup.location
resource_group_name = azurerm_resource_group.resourcegroup.name
ip_configuration {
name = "vm1-NicConfiguration"
subnet_id = "${azurerm_subnet.subnet.id}"
private_ip_address_allocation = "static"
private_ip_address = "10.0.2.4"
}
tags = azurerm_resource_group.resourcegroup.tags
}
Trong trường hợp này, chúng tôi sẽ sử dụng một địa chỉ IP tĩnh, tham chiếu đến mạng con bằng cách sử dụng một biến.
Và, cuối cùng nhưng không kém phần quan trọng, định nghĩa của chính VM:
resource "azurerm_virtual_machine" "vm-1" {
name = "vm1"
location = "${azurerm_resource_group.resourcegroup.location}"
resource_group_name = "${azurerm_resource_group.resourcegroup.name}"
network_interface_ids = ["${azurerm_network_interface.vm1-nic.id}"]
vm_size = "Standard_B1ms"
delete_os_disk_on_termination = true
storage_image_reference {
publisher = "MicrosoftWindowsServer"
offer = "WindowsServer"
sku = "2019-Datacenter"
version = "latest"
}
storage_os_disk {
name = "vm1-osdisk"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Standard_LRS"
}
os_profile {
computer_name = "vm-1"
admin_username = "demoadmin"
admin_password = "$om3s3cretPassWord"
}
os_profile_windows_config {
enable_automatic_upgrades = "true"
provision_vm_agent = "true"
}
tags = azurerm_resource_group.resourcegroup.tags
}
Đoạn mã trên sẽ cung cấp máy ảo Azure chạy Windows Server 2019, sử dụng các tài nguyên mà chúng tôi đã xác định trước đó. Nó sẽ có một quản trị viên với tên người dùng là dem demminminmin có mật khẩu có tên là mật khẩu $ om3s3cretPassWord. Phần còn lại của các tham số là khá tự giải thích và bạn có thể tìm thấy nhiều hơn trong số chúng trong tài liệu Azureform AzureRM .
Bây giờ, tất cả những gì còn lại là lưu .tf -file bằng cách triển khai mẫu này lên Azure bằng cách sử dụng TerraForm!
Khởi xướng và triển khai với TerraForm
Bây giờ chúng ta đã có mẫu theo thứ tự, mở một thiết bị đầu cuối và đi đến thư mục mà bạn đã lưu .tf -file vào:
cd c:\temp\terraform
Bây giờ chúng ta phải bắt đầu TerraForm. Điều này sẽ tải xuống mô-đun tài nguyên cho AzureRM và xử lý các lỗi trong .tf -file:
Sau khi khởi tạo xong, bạn đã sẵn sàng áp dụng mẫu bằng cách chạy terraform apply
.
terraform apply
Giờ đây, TerraForm sẽ tạo một nhóm tài nguyên mới trong Azure, mạng, mạng con và cuối cùng là chính VM. Trạng thái và tất cả các tài nguyên mà nó đã tạo được lưu trữ trong thư mục .terraform của thư mục hiện tại của bạn. Vì vậy, đừng xóa thư mục đó nếu bạn muốn xóa tài nguyên sạch sẽ sau này!
Sau khi bạn hoàn thành với vm thử nghiệm của mình và muốn phá hủy nó, chỉ cần chạy:
terraform destroy
Điều này sẽ loại bỏ tất cả các đĩa, nics, mạng con, nhóm tài nguyên và do đó nó được tạo khi chạy terraform apply
và bạn không phải lo lắng về việc quên xóa các đoạn còn lại theo Tài nguyên Azure