Udostępnij za pomocą


Wdróż konto usługi Azure Batch i dwie pule — Terraform

W tym przewodniku szybkiego startu utworzysz konto Azure Batch, konto Azure Storage i dwie pule Batch za pomocą Terraform. Batch to oparta na chmurze usługa planowania zadań, która równoległie i dystrybuuje przetwarzanie dużych ilości danych na wielu komputerach. Jest on zwykle używany do zamiatania parametrycznego, symulacji Monte Carlo, modelowania ryzyka finansowego i innych aplikacji obliczeniowych o wysokiej wydajności. Konto usługi Batch to zasób najwyższego poziomu w usłudze Batch, który zapewnia dostęp do pul, zleceń i zadań. Konto magazynu służy do przechowywania wszystkich plików używanych i generowanych przez usługę Batch oraz zarządzania nimi, podczas gdy dwie pule usługi Batch to kolekcje węzłów obliczeniowych, które wykonują zadania.

Narzędzie Terraform umożliwia definiowanie, wyświetlanie wersji zapoznawczej i wdrażanie infrastruktury chmury. Za pomocą narzędzia Terraform tworzysz pliki konfiguracji przy użyciu składni HCL. Składnia listy HCL umożliwia określenie dostawcy chmury — takiego jak platforma Azure — oraz elementów tworzących infrastrukturę chmury. Po utworzeniu plików konfiguracji utworzysz plan wykonywania , który umożliwia wyświetlenie podglądu zmian infrastruktury przed ich wdrożeniem. Po zweryfikowaniu zmian należy zastosować plan wykonywania w celu wdrożenia infrastruktury.

  • Określ wymaganą wersję programu Terraform i wymaganych dostawców.
  • Zdefiniuj dostawcę platformy Azure bez dodatkowych funkcji.
  • Zdefiniuj zmienne lokalizacji grupy zasobów i prefiks nazwy grupy zasobów.
  • Wygeneruj losową nazwę grupy zasobów przy użyciu podanego prefiksu.
  • Utwórz grupę zasobów platformy Azure z wygenerowaną nazwą w określonej lokalizacji.
  • Wygeneruj losowy ciąg znaków, który będzie używany jako nazwa konta przechowywania.
  • Utwórz konto Storage o wygenerowanej nazwie w utworzonej grupie zasobów, w tej samej lokalizacji, z warstwą konta standardowego i lokalnie nadmiarową replikacją Storage.
  • Wygeneruj kolejny losowy ciąg, który ma być używany jako nazwa konta usługi Batch.
  • Utwórz konto usługi Batch z wygenerowaną nazwą w utworzonej grupie zasobów w tej samej lokalizacji i połącz je z utworzonym kontem Storage w trybie uwierzytelniania kluczy Storage.
  • Wygeneruj losową nazwę dla puli Batch z przedrostkiem "pool".
  • Utwórz pulę usługi Batch o stałej skali przy użyciu wygenerowanej nazwy w utworzonej grupie zasobów połączonej z utworzonym kontem usługi Batch o rozmiarze standardowej maszyny wirtualnej A1, jednostce SKU agenta węzła Ubuntu 22.04 i zadaniu uruchamiania, które powtarza "Hello World from $env" z maksymalnie jednym ponowieniem próby i czeka na powodzenie.
  • Utwórz kolejną pulę usługi Batch z automatycznym skalowaniem przy użyciu tej samej wygenerowanej nazwy w utworzonej grupie zasobów połączonej z utworzonym kontem usługi Batch z standardowym rozmiarem maszyny wirtualnej A1, jednostką SKU agenta systemu Ubuntu 22.04 i formułą autoskalowania.
  • Wyprowadź nazwy utworzonej grupy zasobów, konta magazynu, konta usługi Batch i obu pul usługi Batch.

Wymagania wstępne

Implementowanie kodu narzędzia Terraform

  1. Utwórz katalog, w którym chcesz przetestować i uruchomić przykładowy kod programu Terraform, i ustaw go jako bieżący katalog.

  2. Utwórz plik o nazwie main.tfi wstaw następujący kod:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      location = var.resource_group_location
      name     = random_pet.rg_name.id
    }
    
    resource "random_string" "storage_account_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_storage_account" "example" {
      name                     = random_string.storage_account_name.result
      resource_group_name      = azurerm_resource_group.rg.name
      location                 = azurerm_resource_group.rg.location
      account_tier             = "Standard"
      account_replication_type = "LRS"
    }
    
    resource "random_string" "batch_account_name" {
      length  = 8
      lower   = true
      numeric = false
      special = false
      upper   = false
    }
    
    resource "azurerm_batch_account" "example" {
      name                                = random_string.batch_account_name.result
      resource_group_name                 = azurerm_resource_group.rg.name
      location                            = azurerm_resource_group.rg.location
      storage_account_id                  = azurerm_storage_account.example.id
      storage_account_authentication_mode = "StorageKeys"
    }
    
    resource "random_pet" "azurerm_batch_pool_name" {
      prefix = "pool"
    }
    
    resource "azurerm_batch_pool" "fixed" {
      name                = "${random_pet.azurerm_batch_pool_name.id}-fixed-pool"
      resource_group_name = azurerm_resource_group.rg.name
      account_name        = azurerm_batch_account.example.name
      display_name        = "Fixed Scale Pool"
      vm_size             = "Standard_A1"
      node_agent_sku_id   = "batch.node.ubuntu 22.04"
    
      fixed_scale {
        target_dedicated_nodes = 2
        resize_timeout         = "PT15M"
      }
    
      storage_image_reference {
        publisher = "Canonical"
        offer     = "0001-com-ubuntu-server-jammy"
        sku       = "22_04-lts"
        version   = "latest"
      }
    
      start_task {
        command_line       = "echo 'Hello World from $env'"
        task_retry_maximum = 1
        wait_for_success   = true
    
        common_environment_properties = {
          env = "TEST"
        }
    
        user_identity {
          auto_user {
            elevation_level = "NonAdmin"
            scope           = "Task"
          }
        }
      }
    
      metadata = {
        "tagName" = "Example tag"
      }
    }
    
    resource "azurerm_batch_pool" "autopool" {
      name                = "${random_pet.azurerm_batch_pool_name.id}-autoscale-pool"
      resource_group_name = azurerm_resource_group.rg.name
      account_name        = azurerm_batch_account.example.name
      display_name        = "Auto Scale Pool"
      vm_size             = "Standard_A1"
      node_agent_sku_id   = "batch.node.ubuntu 22.04"
    
      auto_scale {
        evaluation_interval = "PT15M"
    
        formula = <<EOF
          startingNumberOfVMs = 1;
          maxNumberofVMs = 25;
          pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second);
          pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second));
          $TargetDedicatedNodes=min(maxNumberofVMs, pendingTaskSamples);
    EOF
      }
    
      storage_image_reference {
        publisher = "Canonical"
        offer     = "0001-com-ubuntu-server-jammy"
        sku       = "22_04-lts"
        version   = "latest"
      }
    }
    
  3. Utwórz plik o nazwie outputs.tfi wstaw następujący kod:

    output "resource_group_name" {
      value = azurerm_resource_group.rg.name
    }
    
    output "storage_account_name" {
      value = azurerm_storage_account.example.name
    }
    
    output "batch_account_name" {
      value = azurerm_batch_account.example.name
    }
    
    output "batch_pool_fixed_name" {
      value = azurerm_batch_pool.fixed.name
    }
    
    output "batch_pool_autopool_name" {
      value = azurerm_batch_pool.autopool.name
    }
    
  4. Utwórz plik o nazwie providers.tfi wstaw następujący kod:

    terraform {
      required_version = ">=1.0"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>3.0"
        }
        random = {
          source  = "hashicorp/random"
          version = "~>3.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  5. Utwórz plik o nazwie variables.tfi wstaw następujący kod:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location of the resource group."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random ID so name is unique in your Azure subscription."
    }
    

Inicjowanie narzędzia Terraform

Uruchom narzędzie terraform init, aby zainicjować wdrożenie narzędzia Terraform. To polecenie pobiera dostawcę platformy Azure wymaganego do zarządzania zasobami platformy Azure.

terraform init -upgrade

Kluczowe punkty:

  • Parametr -upgrade uaktualnia niezbędne wtyczki dostawcy do najnowszej wersji, która jest zgodna z ograniczeniami wersji konfiguracji.

Tworzenie planu wykonania programu Terraform

Uruchom terraform plan, aby utworzyć plan wykonania.

terraform plan -out main.tfplan

Kluczowe punkty:

  • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach.
  • Opcjonalny -out parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru -out gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.

Zastosowanie planu wykonawczego Terraform

Uruchom terraform apply, aby zastosować plan wykonania do infrastruktury w chmurze.

terraform apply main.tfplan

Kluczowe punkty:

  • Przykładowe polecenie terraform apply zakłada, że wcześniej uruchomiono terraform plan -out main.tfplan.
  • Jeśli określono inną nazwę pliku parametru -out , użyj tej samej nazwy pliku w wywołaniu metody terraform apply.
  • Jeśli nie użyłeś parametru -out, wywołaj terraform apply bez żadnych parametrów.

Weryfikowanie wyników

Uruchom az batch account show, aby wyświetlić konto usługi Batch.

az batch account show --name <batch_account_name> --resource-group <resource_group_name>

Zastąp <batch_account_name> nazwą konta Batch i <resource_group_name> nazwą grupy zasobów.

Czyszczenie zasobów

Jeśli zasoby utworzone za pomocą narzędzia Terraform nie są już potrzebne, wykonaj następujące czynności:

  1. Uruchom plan terraform i określ flagę destroy .

    terraform plan -destroy -out main.destroy.tfplan
    

    Kluczowe punkty:

    • Polecenie terraform plan tworzy plan wykonania, ale nie wykonuje go. Zamiast tego określa, jakie akcje są niezbędne do utworzenia konfiguracji określonej w plikach konfiguracji. Ten wzorzec umożliwia sprawdzenie, czy plan wykonania jest zgodny z oczekiwaniami przed wprowadzeniem jakichkolwiek zmian w rzeczywistych zasobach.
    • Opcjonalny -out parametr umożliwia określenie pliku wyjściowego dla planu. Użycie parametru -out gwarantuje, że sprawdzony plan jest dokładnie tym, co jest stosowane.
  2. Uruchom terraform apply aby zastosować plan wykonania.

    terraform apply main.destroy.tfplan
    

Rozwiązywanie problemów z programem Terraform na platformie Azure

Rozwiązywanie typowych problemów podczas korzystania z programu Terraform na platformie Azure.

Następne kroki