Megosztás a következőn keresztül:


Rugalmas PostgreSQL-kiszolgálóadatbázis üzembe helyezése a Terraform használatával

A cikk a következő Terraform- és Terraform-szolgáltatói verziókkal lett tesztelve:

A Terraform lehetővé teszi a felhőinfrastruktúra definícióját, előzetes verzióját és üzembe helyezését. A Terraform használatával konfigurációs fájlokat hozhat létre HCL-szintaxissal. A HCL szintaxissal megadhatja a felhőszolgáltatót – például az Azure-t – és a felhőinfrastruktúra elemeit. A konfigurációs fájlok létrehozása után létrehoz egy végrehajtási tervet , amely lehetővé teszi az infrastruktúra változásainak előzetes megtekintését az üzembe helyezés előtt. A módosítások ellenőrzése után alkalmazza a végrehajtási tervet az infrastruktúra üzembe helyezésére.

Ez a cikk bemutatja, hogyan helyezhet üzembe rugalmas PostgreSQL-kiszolgálóadatbázist a Terraform használatával.

Ebből a cikkből megtudhatja, hogyan:

Megjegyzés:

A cikkben szereplő példakód az Azure Terraform GitHub-adattárban található.

1. A környezet konfigurálása

  • Azure-előfizetés: Ha nem rendelkezik Azure-előfizetéssel, a kezdés előtt hozzon létre egy ingyenes fiókot .

2. A Terraform-kód implementálása

  1. Hozzon létre egy könyvtárat, amelyben tesztelheti és futtathatja a Terraform-mintakódot, és az aktuális könyvtárá teheti.

  2. Hozzon létre egy providers.tf nevű fájlt, és szúrja be a következő kódot:

    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 {}
    }
    
  3. Hozzon létre egy elnevezett main.tf fájlt, és szúrja be a következő kódot a rugalmas PostgreSQL-kiszolgáló üzembe helyezéséhez, amelyen az adatbázis fut.

    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]
    }
    
  4. Hozzon létre egy fájlt, postgresql-fs-db.tf és szúrja be a következő kódot az adatbázis példányosításához:

    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"
    }
    
  5. Hozzon létre egy variables.tf nevű fájlt, és szúrja be a következő kódot:

    variable "name_prefix" {
      default     = "postgresqlfs"
      description = "Prefix of the resource name."
    }
    
    variable "location" {
      default     = "eastus"
      description = "Location of the resource."
    }
    
  6. Hozzon létre egy elnevezett outputs.tf fájlt, és szúrja be a következő kódot az erőforráscsoport nevének, az Azure PostgreSQL-kiszolgáló nevének és az Azure PostgreSQL-adatbázis nevének kimenetéhez:

    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. A Terraform inicializálása

Futtassa a Terraform init parancsot a Terraform üzembe helyezésének inicializálásához. Ez a parancs letölti az Azure-erőforrások kezeléséhez szükséges Azure-szolgáltatót.

terraform init -upgrade

Főbb pontok:

  • A -upgrade paraméter frissíti a szükséges szolgáltatói beépülő modulokat a legújabb verzióra, amely megfelel a konfiguráció verziókorlátozásainak.

4. Terraform végrehajtási terv létrehozása

Végrehajtási terv létrehozásához futtassa a Terraform-tervet .

terraform plan -out main.tfplan

Főbb pontok:

  • A terraform plan parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat.
  • Az opcionális -out paraméter lehetővé teszi a terv kimeneti fájljának megadását. A -out paraméter használatával biztosítható, hogy az ön által áttekintett terv pontosan az alkalmazott legyen.

5. Terraform végrehajtási terv alkalmazása

Futtassa a terraform apply parancsot, hogy alkalmazza a végrehajtási tervet a felhőinfrastruktúrára.

terraform apply main.tfplan

Főbb pontok:

  • A példaparancs terraform apply feltételezi, hogy korábban lefuttattad a terraform plan -out main.tfplan parancsot.
  • Ha másik fájlnevet adott meg a -out paraméterhez, használja ugyanazt a fájlnevet a terraform applyhívásában.
  • Ha nem használta a -out paramétert, hívja meg a terraform apply paraméterek nélkül.

6. Ellenőrizze az eredményeket

Futtassa a az postgres flexible-server db show parancsot az Azure PostgreSQL-adatbázis megjelenítéséhez.

az postgres flexible-server db show --resource-group <resource_group_name> --server-name <server_name> --database-name <database_name>

Főbb pontok:

  • A , <resource_group_name>értékeket <server_name><database_name> a kimenetben terraform apply jeleníti meg.

7. Erőforrások törlése

Ha már nincs szüksége a Terraformon keresztül létrehozott erőforrásokra, hajtsa végre az alábbi lépéseket:

  1. Futtassa a terraform plan parancsot, és adja meg a destroy flag-et.

    terraform plan -destroy -out main.destroy.tfplan
    

    Főbb pontok:

    • A terraform plan parancs létrehoz egy végrehajtási tervet, de nem hajtja végre. Ehelyett meghatározza, hogy milyen műveletek szükségesek a konfigurációs fájlokban megadott konfiguráció létrehozásához. Ez a minta lehetővé teszi annak ellenőrzését, hogy a végrehajtási terv megfelel-e az elvárásainak, mielőtt módosítanák a tényleges erőforrásokat.
    • Az opcionális -out paraméter lehetővé teszi a terv kimeneti fájljának megadását. A -out paraméter használatával biztosítható, hogy az ön által áttekintett terv pontosan az alkalmazott legyen.
  2. A végrehajtási terv alkalmazásához futtassa a terraform apply.

    terraform apply main.destroy.tfplan
    

A Terraform hibaelhárítása az Azure-ban

A Terraform Azure-beli használatakor felmerülő gyakori problémák elhárítása

Következő lépések