Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Använd Azure Container Instances till att snabbt och enkelt köra serverlösa Docker-containrar i Azure. Distribuera ett program i en containerinstans på begäran när du inte behöver en komplett plattform för containerorkestrering som Azure Kubernetes Service. I den här artikeln använder du Terraform för att distribuera en isolerad Docker-container och göra dess webbprogram tillgängligt med en offentlig IP-adress.
Terraform möjliggör definition, förhandsversion och distribution av molninfrastruktur. Med Terraform skapar du konfigurationsfiler med hjälp av HCL-syntax. Med HCL-syntaxen kan du ange molnleverantören – till exempel Azure – och de element som utgör din molninfrastruktur. När du har skapat konfigurationsfilerna skapar du en körningsplan som gör att du kan förhandsgranska ändringarna i infrastrukturen innan de distribueras. När du har verifierat ändringarna tillämpar du genomförandeplanen för att distribuera infrastrukturen.
I den här artikeln lär du dig att:
- Skapa ett slumpmässigt värde för Azure-resursgruppens namn med hjälp av random_pet
- Skapa en Azure-resursgrupp med hjälp av azurerm_resource_group
- Skapa ett slumpmässigt värde för containernamnet med hjälp av random_string
- Skapa en Azure-containergrupp med hjälp av azurerm_container_group
Förutsättningar
Implementera Terraform-koden
Anmärkning
Exempelkoden för den här artikeln finns på Azure Terraform GitHub-lagringsplatsen. Du kan visa loggfilen som innehåller testresultaten från aktuella och tidigare versioner av Terraform.
Se fler artiklar och exempelkod som visar hur du använder Terraform för att hantera Azure-resurser
Skapa en katalog där du kan testa och köra Terraform-exempelkoden och göra den till den aktuella katalogen.
Skapa en fil med namnet
main.tfoch infoga följande kod: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" } } }Skapa en fil med namnet
outputs.tfoch infoga följande kod:output "container_ipv4_address" { value = azurerm_container_group.container.ip_address }Skapa en fil med namnet
providers.tfoch infoga följande 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 {} }Skapa en fil med namnet
variables.tfoch infoga följande kod: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 = "" }Om du vill göra containergruppen zonindelad anger du värdet för variabeln
zonetill den logiska tillgänglighetszon som du vill distribuera till.Viktigt!
Zonala containergrupper är endast tillgängliga i regioner som stöder tillgänglighetszoner. Om du vill se om din region har stöd för tillgänglighetszoner kan du läsa Listan över Azure-regioner.
Initiera Terraform
Kör terraform init för att initiera Terraform-distributionen. Det här kommandot laddar ned den Azure-provider som krävs för att hantera dina Azure-resurser.
terraform init -upgrade
Viktiga punkter:
- Parametern
-upgradeuppgraderar nödvändiga provider-plugin-program till den senaste versionen som uppfyller konfigurationens versionsbegränsningar.
Skapa en Terraform-körningsplan
Kör terraform plan för att skapa en körningsplan.
terraform plan -out main.tfplan
Viktiga punkter:
- Kommandot
terraform planskapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om utförandeplanen matchar dina förväntningar innan du gör några ändringar i verkliga resurser. - Med den valfria parametern
-outkan du ange en utdatafil för planen. Med hjälp av parametern-outser du till att den plan som du har granskat är exakt vad som tillämpas.
Tillämpa en Terraform-exekveringsplan
Kör terraform apply för att tillämpa körningsplanen på din molninfrastruktur.
terraform apply main.tfplan
Viktiga punkter:
- Exemplet
terraform applykommandot förutsätter att du tidigare kördeterraform plan -out main.tfplan. - Om du har angett ett annat filnamn för parametern
-outanvänder du samma filnamn i anropet för attterraform apply. - Om du inte använde parametern
-outanropar duterraform applyutan några parametrar.
Verifiera resultatet
När du tillämpar exekveringsplanen matar Terraform ut den offentliga IP-adressen. Om du vill visa IP-adressen igen kör du terraform-utdata.
terraform output -raw container_ipv4_addressAnge exemplets offentliga IP-adress i webbläsarens adressfält.
Rensa resurser
Gör följande när du inte längre behöver de resurser som skapats via Terraform:
Kör terraform plan och ange
destroyflaggan.terraform plan -destroy -out main.destroy.tfplanViktiga punkter:
- Kommandot
terraform planskapar en körningsplan, men kör den inte. I stället avgör den vilka åtgärder som krävs för att skapa den konfiguration som anges i konfigurationsfilerna. Med det här mönstret kan du kontrollera om utförandeplanen matchar dina förväntningar innan du gör några ändringar i verkliga resurser. - Med den valfria parametern
-outkan du ange en utdatafil för planen. Med hjälp av parametern-outser du till att den plan som du har granskat är exakt vad som tillämpas.
- Kommandot
Kör terraform apply för att verkställa körningsplanen.
terraform apply main.destroy.tfplan
Felsöka Terraform i Azure
Felsöka vanliga problem när du använder Terraform i Azure