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.
Artikel testad med följande Terraform- och Terraform-providerversioner:
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 implementera infrastrukturen.
Den här artikeln visar hur du distribuerar en Flexibel PostgreSQL-serverdatabas med Terraform.
I den här artikeln lär du dig att:
- Skapa en Azure-resursgrupp med hjälp av azurerm_resource_group
- Skapa ett virtuellt Azure-nätverk (VNet) med azurerm_virtual_network
- Skapa en Azure Network Security Group (NSG) med hjälp av azurerm_network_security_group
- Skapa ett Azure-undernät azurerm_subnet
- Skapa en Nätverkssäkerhetsgrupp för Azure-undernät (NSG) med azurerm_subnet_network_security_group_association
- Definiera en privat DNS-zon i en Azure DNS med hjälp av azurerm_private_dns_zone
- Definiera en privat VNet-länk i DNS-zonen med hjälp av azurerm_private_dns_zone_virtual_network_link
- Distribuera en flexibel Azure PostgreSQL-server där databasen körs med azurerm_postgresql_flexible_server
- Instansiera en Azure PostgreSQL-databas med hjälp av azurerm_postgresql_flexible_server_database
Anmärkning
Exempelkoden i den här artikeln finns på Azure Terraform GitHub-lagringsplatsen.
1. Konfigurera din miljö
- Azure-prenumeration: Om du inte har en Azure-prenumeration skapar du ett kostnadsfritt konto innan du börjar.
- Konfigurera Terraform: Om du inte redan har gjort det konfigurerar du Terraform med något av följande alternativ: 
2. Implementera Terraform-koden
- 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 - 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.4.0" } } } provider "azurerm" { features {} }
- Skapa en fil med namnet - main.tfoch infoga följande kod för att distribuera den flexibla PostgreSQL-servern som databasen körs på.- resource "random_pet" "name_prefix" { prefix = var.name_prefix length = 1 } resource "azurerm_resource_group" "default" { name = random_pet.name_prefix.id location = var.location } resource "azurerm_virtual_network" "default" { name = "${random_pet.name_prefix.id}-vnet" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name address_space = ["10.0.0.0/16"] } resource "azurerm_network_security_group" "default" { name = "${random_pet.name_prefix.id}-nsg" location = azurerm_resource_group.default.location resource_group_name = azurerm_resource_group.default.name security_rule { name = "test123" priority = 100 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "*" source_address_prefix = "*" destination_address_prefix = "*" } } resource "azurerm_subnet" "default" { name = "${random_pet.name_prefix.id}-subnet" virtual_network_name = azurerm_virtual_network.default.name resource_group_name = azurerm_resource_group.default.name address_prefixes = ["10.0.2.0/24"] service_endpoints = ["Microsoft.Storage"] delegation { name = "fs" service_delegation { name = "Microsoft.DBforPostgreSQL/flexibleServers" actions = [ "Microsoft.Network/virtualNetworks/subnets/join/action", ] } } } resource "azurerm_subnet_network_security_group_association" "default" { subnet_id = azurerm_subnet.default.id network_security_group_id = azurerm_network_security_group.default.id } resource "azurerm_private_dns_zone" "default" { name = "${random_pet.name_prefix.id}-pdz.postgres.database.azure.com" resource_group_name = azurerm_resource_group.default.name depends_on = [azurerm_subnet_network_security_group_association.default] } resource "azurerm_private_dns_zone_virtual_network_link" "default" { name = "${random_pet.name_prefix.id}-pdzvnetlink.com" private_dns_zone_name = azurerm_private_dns_zone.default.name virtual_network_id = azurerm_virtual_network.default.id resource_group_name = azurerm_resource_group.default.name } resource "random_password" "pass" { length = 20 } resource "azurerm_postgresql_flexible_server" "default" { name = "${random_pet.name_prefix.id}-server" resource_group_name = azurerm_resource_group.default.name location = azurerm_resource_group.default.location version = "13" delegated_subnet_id = azurerm_subnet.default.id private_dns_zone_id = azurerm_private_dns_zone.default.id administrator_login = "adminTerraform" administrator_password = random_password.pass.result zone = "1" storage_mb = 32768 sku_name = "GP_Standard_D2s_v3" backup_retention_days = 7 depends_on = [azurerm_private_dns_zone_virtual_network_link.default] }
- Skapa en fil med namnet - postgresql-fs-db.tfoch infoga följande kod för att instansiera databasen:- resource "azurerm_postgresql_flexible_server_database" "default" { name = "${random_pet.name_prefix.id}-db" server_id = azurerm_postgresql_flexible_server.default.id collation = "en_US.utf8" charset = "UTF8" }
- Skapa en fil med namnet - variables.tfoch infoga följande kod:- variable "name_prefix" { default = "postgresqlfs" description = "Prefix of the resource name." } variable "location" { default = "eastus" description = "Location of the resource." }
- Skapa en fil med namnet - outputs.tfoch infoga följande kod för att mata ut resursgruppens namn, Azure PostgreSQL-servernamn och Azure PostgreSQL-databasnamn:- output "resource_group_name" { value = azurerm_resource_group.default.name } output "azurerm_postgresql_flexible_server" { value = azurerm_postgresql_flexible_server.default.name } output "postgresql_flexible_server_database_name" { value = azurerm_postgresql_flexible_server_database.default.name } output "postgresql_flexible_server_admin_password" { sensitive = true value = azurerm_postgresql_flexible_server.default.administrator_password }
3. 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.
4. Skapa en Terraform-körningsplan
Kör terraform plan för att skapa en utförandeplan.
terraform plan -out main.tfplan
Viktiga punkter:
- Kommandot terraform planskapar en utförandeplan, men utfö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 åtgärdsplanen stämmer överens med dina förväntningar innan du gör några ändringar i faktiska 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.
5. Tillämpa en Terraform-körningsplan
Kör terraform apply för att tillämpa körningsplanen på din molninfrastruktur.
terraform apply main.tfplan
Viktiga punkter:
- 
              terraform applyExempelkommandot 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 tillterraform apply.
- Om du inte använde parametern -outanropar duterraform applyutan några parametrar.
6. Kontrollera resultatet
Kör az postgres flexible-server db show för att visa Azure PostgreSQL-databasen.
az postgres flexible-server db show --resource-group <resource_group_name> --server-name <server_name> --database-name <database_name>
Viktiga punkter:
- Värdena för <resource_group_name>,<server_name>och<database_name>visas iterraform applyutdata.
7. 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 specificera - destroyflaggan.- terraform plan -destroy -out main.destroy.tfplan- Viktiga punkter: - Kommandot terraform planskapar en utförandeplan, men utfö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 åtgärdsplanen stämmer överens med dina förväntningar innan du gör några ändringar i faktiska 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 genomföra körningsplanen. - terraform apply main.destroy.tfplan
Felsöka Terraform i Azure
Felsöka vanliga problem när du använder Terraform i Azure