terraform

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
Cài đặt 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.

Xác nhận Terraform hoạt động

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:

Khởi tạo Terraform

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 applyvà 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

Để lại một bình luận