Sdílet prostřednictvím


Rychlý start: Vytvoření instance kontejneru Azure s veřejnou IP adresou pomocí Terraformu

Spouštějte v Azure rychle a snadno bezserverové kontejnery Dockeru s využitím služby Azure Container Instances. Pokud nepotřebujete úplnou platformu orchestrace kontejnerů, jako je služba Azure Kubernetes Service, můžete aplikaci nasadit do instance kontejneru na vyžádání. V tomto článku použijete Terraform k nasazení izolovaného kontejneru Dockeru a zpřístupnění jeho webové aplikace s veřejnou IP adresou.

Terraform umožňuje definovat, prohlížet a nasazovat cloudovou infrastrukturu. Pomocí Terraformu vytvoříte konfigurační soubory pomocí syntaxe HCL. Syntaxe seznamu HCL umožňuje zadat poskytovatele cloudu , například Azure, a prvky, které tvoří vaši cloudovou infrastrukturu. Po vytvoření konfiguračních souborů vytvoříte plán provádění , který vám umožní zobrazit náhled změn infrastruktury před jejich nasazením. Jakmile ověříte změny, použijete plán provádění k nasazení infrastruktury.

V tomto článku se naučíte:

Požadavky

Implementace kódu Terraformu

  1. Vytvořte adresář, ve kterém chcete otestovat a spustit ukázkový kód Terraformu a nastavit ho jako aktuální adresář.

  2. Vytvořte soubor s názvem main.tf a vložte následující kód:

    resource "random_pet" "rg_name" {
      prefix = var.resource_group_name_prefix
    }
    
    resource "azurerm_resource_group" "rg" {
      name     = random_pet.rg_name.id
      location = var.resource_group_location
    }
    
    resource "random_string" "container_name" {
      length  = 25
      lower   = true
      upper   = false
      special = false
    }
    
    resource "azurerm_container_group" "container" {
      name                = "${var.container_group_name_prefix}-${random_string.container_name.result}"
      location            = azurerm_resource_group.rg.location
      resource_group_name = azurerm_resource_group.rg.name
      ip_address_type     = "Public"
      os_type             = "Linux"
      restart_policy      = var.restart_policy
      zones               = var.zone != "" ? [ var.zone ] : null
    
      container {
        name   = "${var.container_name_prefix}-${random_string.container_name.result}"
        image  = var.image
        cpu    = var.cpu_cores
        memory = var.memory_in_gb
    
        ports {
          port     = var.port
          protocol = "TCP"
        }
      }
    }
    
  3. Vytvořte soubor s názvem outputs.tf a vložte následující kód:

    output "container_ipv4_address" {
      value = azurerm_container_group.container.ip_address
    }
    
  4. Vytvořte soubor s názvem providers.tf a vložte následující kód:

    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. Vytvořte soubor s názvem variables.tf a vložte následující kód:

    variable "resource_group_location" {
      type        = string
      default     = "eastus"
      description = "Location for all resources."
    }
    
    variable "resource_group_name_prefix" {
      type        = string
      default     = "rg"
      description = "Prefix of the resource group name that's combined with a random value so name is unique in your Azure subscription."
    }
    
    variable "container_group_name_prefix" {
      type        = string
      description = "Prefix of the container group name that's combined with a random value so name is unique in your Azure subscription."
      default     = "acigroup"
    }
    
    variable "container_name_prefix" {
      type        = string
      description = "Prefix of the container name that's combined with a random value so name is unique in your Azure subscription."
      default     = "aci"
    }
    
    variable "image" {
      type        = string
      description = "Container image to deploy. Should be of the form repoName/imagename:tag for images stored in public Docker Hub, or a fully qualified URI for other registries. Images from private registries require additional registry credentials."
      default     = "mcr.microsoft.com/azuredocs/aci-helloworld"
    }
    
    variable "port" {
      type        = number
      description = "Port to open on the container and the public IP address."
      default     = 80
    }
    
    variable "cpu_cores" {
      type        = number
      description = "The number of CPU cores to allocate to the container."
      default     = 1
    }
    
    variable "memory_in_gb" {
      type        = number
      description = "The amount of memory to allocate to the container in gigabytes."
      default     = 2
    }
    
    variable "restart_policy" {
      type        = string
      description = "The behavior of Azure runtime if container has stopped."
      default     = "Always"
      validation {
        condition     = contains(["Always", "Never", "OnFailure"], var.restart_policy)
        error_message = "The restart_policy must be one of the following: Always, Never, OnFailure."
      }
    }
    
    variable "zone" {
        type        = string
        description = "The availability zone to deploy the container group into. If not specified, the container group is nonzonal and might be deployed into any zone."
        default     = ""
    }
    
  6. Pokud chcete nastavit zónovou zónu skupiny kontejnerů, nastavte hodnotu zone proměnné na logickou zónu dostupnosti, do které chcete nasadit.

    Důležité

    Zónové skupiny kontejnerů jsou dostupné jenom v oblastech, které podporují zóny dostupnosti. Informace o tom, jestli vaše oblast podporuje zóny dostupnosti, najdete v tématu Seznam oblastí Azure.

Inicializujte Terraform

Spusťte terraform init pro inicializaci nasazení Terraformu. Tento příkaz stáhne poskytovatele Azure potřebného ke správě prostředků Azure.

terraform init -upgrade

klíčové body:

  • Parametr -upgrade aktualizuje potřebné pluginy poskytovatele na nejnovější verzi, která odpovídá verzním omezením konfigurace.

Vytvoření plánu provádění Terraformu

Spusťte terraform plan pro vytvoření výkonného plánu.

terraform plan -out main.tfplan

klíčové body:

  • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
  • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.

Aplikujte plán provádění Terraformu

Spusťte terraform apply, abyste aplikovali plán provádění na vaši cloudovou infrastrukturu.

terraform apply main.tfplan

klíčové body:

  • terraform apply Ukázkový příkaz předpokládá, že jste dříve spustili terraform plan -out main.tfplan.
  • Pokud jste pro -out parametr zadali jiný název souboru, použijte stejný název souboru při volání terraform apply.
  • Pokud jste parametr nepoužíli -out , zavolejte terraform apply bez parametrů.

Ověření výsledků

  1. Když použijete plán provádění, Terraform vypíše veřejnou IP adresu. Pokud chcete IP adresu zobrazit znovu, spusťte terraform output.

    terraform output -raw container_ipv4_address
    
  2. Do adresního řádku prohlížeče zadejte veřejnou IP adresu ukázky.

    Snímek obrazovky s ukázkovou stránkou služby Azure Container Instances

Čištění zdrojů

Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:

  1. Spusťte terraform plan a zadejte parametr destroy.

    terraform plan -destroy -out main.destroy.tfplan
    

    klíčové body:

    • Příkaz terraform plan vytvoří plán provádění, ale nespustí ho. Místo toho určuje, jaké akce jsou nezbytné k vytvoření konfigurace zadané v konfiguračních souborech. Tento model umožňuje ověřit, jestli plán provádění odpovídá vašim očekáváním, než provede jakékoli změny skutečných prostředků.
    • Volitelný -out parametr umožňuje zadat výstupní soubor pro plán. Použití parametru -out zajišťuje, že vámi zkontrolovaný plán je přesně tím, co bude aplikován.
  2. Spusťte terraform apply k použití plánu provádění.

    terraform apply main.destroy.tfplan
    

Řešení potíží s Terraformem v Azure

Řešení běžných problémů při používání Terraformu v Azure

Další kroky