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 definici, verzi Preview a nasazení cloudové infrastruktury. 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 získáte informace o těchto tématech:
- Vytvoření náhodné hodnoty pro název skupiny prostředků Azure pomocí random_pet
- Vytvoření skupiny prostředků Azure pomocí azurerm_resource_group
- Vytvoření náhodné hodnoty pro název kontejneru pomocí random_string
- Vytvoření skupiny kontejnerů Azure pomocí azurerm_container_group
Požadavky
Implementace kódu Terraformu
Poznámka:
Vzorový kód pro tento článek se nachází v úložišti GitHubu Azure Terraformu. Můžete zobrazit soubor protokolu obsahující výsledky testu z aktuálních a předchozích verzí Terraformu.
Další články a ukázkový kód ukazující použití Terraformu ke správě prostředků Azure
Vytvořte adresář, ve kterém chcete otestovat a spustit ukázkový kód Terraformu a nastavit ho jako aktuální adresář.
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 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" } } }
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 }
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 {} }
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." } }
Inicializace Terraformu
Spuštěním inicializace nasazení Terraformu spusťte inicializaci 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
upgraduje potřebné moduly plug-in zprostředkovatele na nejnovější verzi, která splňuje omezení verzí konfigurace.
Vytvoření plánu provádění Terraformu
Spuštěním plánu terraformu vytvořte plán provádění.
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 plán, který jste zkontrolovali, je přesně to, co se použije.
Použití plánu provádění Terraformu
Spuštění terraformu platí pro použití plánu provádění na cloudovou infrastrukturu.
terraform apply main.tfplan
Klíčové body:
terraform apply
Ukázkový příkaz předpokládá, že jste dříve spustiliterraform 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
, zavolejteterraform apply
bez parametrů.
Ověření výsledků
Když použijete plán provádění, Terraform vypíše veřejnou IP adresu. Pokud chcete IP adresu znovu zobrazit, spusťte výstup terraformu.
terraform output -raw container_ipv4_address
Do adresního řádku prohlížeče zadejte veřejnou IP adresu ukázky.
Vyčištění prostředků
Pokud už prostředky vytvořené přes Terraform nepotřebujete, proveďte následující kroky:
Spusťte plán terraformu
destroy
a zadejte příznak.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 plán, který jste zkontrolovali, je přesně to, co se použije.
- Příkaz
Spuštění terraformu platí pro 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