Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Artikel, der mit den folgenden Terraform- und Terraform-Anbieterversionen getestet wurde:
Terraform ermöglicht die Definition, Vorschau und Bereitstellung der Cloudinfrastruktur. Terraform ermöglicht das Erstellen von Konfigurationsdateien mit HCL-Syntax. Mit der HCL-Syntax können Sie den Cloudanbieter ( z. B. Azure ) und die Elemente angeben, aus denen Ihre Cloudinfrastruktur besteht. Nach der Erstellung Ihrer Konfigurationsdateien erstellen Sie einen Ausführungsplan, mit dem Sie eine Vorschau Ihrer Infrastrukturänderungen anzeigen können, bevor diese bereitgestellt werden. Nachdem Sie die Änderungen überprüft haben, wenden Sie den Ausführungsplan an, um die Infrastruktur bereitzustellen.
In diesem Artikel wird gezeigt, wie Sie eine Flexible Server-Datenbank von PostgreSQL mithilfe von Terraform bereitstellen.
In diesem Artikel erfahren Sie, wie Sie:
- Erstellen einer Azure-Ressourcengruppe mithilfe von azurerm_resource_group
- Erstellen eines virtuellen Azure-Netzwerks (VNet) mithilfe von azurerm_virtual_network
- Erstellen einer Azure Network Security Group (NSG) mithilfe von azurerm_network_security_group
- Erstellen eines Azure-Subnetz-azurerm_subnet
- Erstellen einer Azure-Subnetz-Netzwerksicherheitsgruppe (NSG) mithilfe von azurerm_subnet_network_security_group_association
- Definieren einer privaten DNS-Zone in einem Azure DNS mithilfe von azurerm_private_dns_zone
- Definieren Sie eine private DNS-Zonen-VNet-Verbindung mithilfe von azurerm_private_dns_zone_virtual_network_link
- Bereitstellen eines flexiblen Azure PostgreSQL-Servers, auf dem die Datenbank mit azurerm_postgresql_flexible_server ausgeführt wird
- Instanziieren einer Azure PostgreSQL-Datenbank mithilfe von azurerm_postgresql_flexible_server_database
Hinweis
Der Beispielcode in diesem Artikel befindet sich im Azure Terraform GitHub-Repository.
1. Konfigurieren Ihrer Umgebung
- Azure-Abonnement: Wenn Sie nicht über ein Azure-Abonnement verfügen, erstellen Sie ein kostenloses Konto , bevor Sie beginnen.
Terraform konfigurieren: Wenn Sie dies noch nicht getan haben, konfigurieren Sie Terraform mit einer der folgenden Optionen:
2. Implementieren des Terraform-Codes
Erstellen Sie ein Verzeichnis, in dem Sie den Terraform-Beispielcode testen und ausführen, und legen Sie es als aktuelles Verzeichnis fest.
Erstellen Sie eine Datei namens
providers.tf
, und fügen Sie den folgenden Code ein: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 {} }
Erstellen Sie eine Datei mit dem Namen
main.tf
, und fügen Sie den folgenden Code ein, um den Flexiblen Server der PostgreSQL bereitzustellen, auf dem die Datenbank ausgeführt wird.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] }
Erstellen Sie eine Datei namens
postgresql-fs-db.tf
, und fügen Sie den folgenden Code ein, um die Datenbank instanziieren zu können: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" }
Erstellen Sie eine Datei namens
variables.tf
, und fügen Sie den folgenden Code ein:variable "name_prefix" { default = "postgresqlfs" description = "Prefix of the resource name." } variable "location" { default = "eastus" description = "Location of the resource." }
Erstellen Sie eine Datei namens
outputs.tf
, und fügen Sie den folgenden Code ein, um den Ressourcengruppennamen, den Azure PostgreSQL-Servernamen und den Azure PostgreSQL-Datenbanknamen auszugeben: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. Initialisieren von Terraform
Führen Sie terraform init aus, um die Terraform-Bereitstellung zu initialisieren. Dieser Befehl lädt den Azure-Anbieter herunter, der zum Verwalten Ihrer Azure-Ressourcen erforderlich ist.
terraform init -upgrade
Die wichtigsten Punkte:
- Der Parameter
-upgrade
aktualisiert die erforderlichen Anbieter-Plug-Ins auf die neueste Version, die den Versionseinschränkungen der Konfiguration entspricht.
4. Erstellen eines Terraform-Ausführungsplans
Führen Sie terraform plan aus, um einen Ausführungsplan zu erstellen.
terraform plan -out main.tfplan
Die wichtigsten Punkte:
- Der Befehl
terraform plan
erstellt einen Ausführungsplan, führt ihn aber nicht aus. Stattdessen wird bestimmt, welche Aktionen erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an tatsächlichen Ressourcen vornehmen. - Mit dem optionalen
-out
-Parameter können Sie eine Ausgabedatei für den Plan angeben. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
5. Anwenden eines Terraform-Ausführungsplans
Führen Sie terraform apply aus, um den Ausführungsplan auf Ihre Cloudinfrastruktur anzuwenden.
terraform apply main.tfplan
Die wichtigsten Punkte:
- Der Beispielbefehl
terraform apply
setzt voraus, dass Sie zuvorterraform plan -out main.tfplan
ausgeführt haben. - Wenn Sie einen anderen Dateinamen für den Parameter
-out
angegeben haben, verwenden Sie denselben Dateinamen im Aufruf vonterraform apply
. - Wenn Sie den Parameter
-out
nicht verwendet haben, rufen Sieterraform apply
ohne Parameter auf.
6. Überprüfen der Ergebnisse
Führen Sie az postgres flexible-server db show aus, um die Azure PostgreSQL-Datenbank anzuzeigen.
az postgres flexible-server db show --resource-group <resource_group_name> --server-name <server_name> --database-name <database_name>
Die wichtigsten Punkte:
- Die Werte für
<resource_group_name>
,<server_name>
und<database_name>
werden in der Ausgabe vonterraform apply
angezeigt.
7. Bereinigen von Ressourcen
Wenn Sie die über Terraform erstellten Ressourcen nicht mehr benötigen, führen Sie die folgenden Schritte aus:
Führen Sie terraform plan aus, und geben Sie das Flag
destroy
an.terraform plan -destroy -out main.destroy.tfplan
Die wichtigsten Punkte:
- Der Befehl
terraform plan
erstellt einen Ausführungsplan, führt ihn aber nicht aus. Stattdessen wird bestimmt, welche Aktionen erforderlich sind, um die in Ihren Konfigurationsdateien angegebene Konfiguration zu erstellen. Mit diesem Muster können Sie überprüfen, ob der Ausführungsplan Ihren Erwartungen entspricht, bevor Sie Änderungen an tatsächlichen Ressourcen vornehmen. - Mit dem optionalen
-out
-Parameter können Sie eine Ausgabedatei für den Plan angeben. Durch die Verwendung des Parameters-out
wird sichergestellt, dass genau der von Ihnen überprüfte Plan angewendet wird.
- Der Befehl
Führen Sie den Befehl terraform apply aus, um den Ausführungsplan anzuwenden.
terraform apply main.destroy.tfplan
Problembehandlung von Terraform auf Azure
Behebung häufiger Probleme bei der Verwendung von Terraform in Azure