Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Artikel diuji dengan versi Terraform dan penyedia Terraform berikut:
Terraform memungkinkan definisi, pratinjau, dan penyebaran infrastruktur cloud. Dengan menggunakan Terraform, Anda membuat file konfigurasi menggunakan sintaks HCL. Sintaksis HCL memungkinkan Anda menentukan penyedia cloud - seperti Azure - dan elemen yang membentuk infrastruktur cloud Anda. Setelah membuat file konfigurasi, Anda membuat rencana eksekusi yang memungkinkan Anda mempratinjau perubahan infrastruktur sebelum disebarkan. Setelah memverifikasi perubahan, Anda menerapkan rencana eksekusi untuk menyebarkan infrastruktur.
Artikel ini memperlihatkan cara menyebarkan Database Server Fleksibel PostgreSQL menggunakan Terraform.
Dalam artikel ini, Anda akan mempelajari cara:
- Membuat grup sumber daya Azure menggunakan azurerm_resource_group
- Membuat jaringan virtual Azure (VNet) menggunakan azurerm_virtual_network
- Membuat Azure Network Security Group (NSG) menggunakan azurerm_network_security_group
- Buat subnet azurerm_subnet Azure
- Membuat Grup Keamanan Jaringan (NSG) subnet Azure menggunakan azurerm_subnet_network_security_group_association
- Menentukan zona DNS privat dalam Azure DNS menggunakan azurerm_private_dns_zone
- Mendefinisikan tautan VNet zona DNS privat menggunakan azurerm_private_dns_zone_virtual_network_link
- Menyebarkan Server Fleksibel Azure PostgreSQL tempat database berjalan menggunakan azurerm_postgresql_flexible_server
- Membuat instans database Azure PostgreSQL menggunakan azurerm_postgresql_flexible_server_database
Nota
Contoh kode dalam artikel ini terletak di repositori GitHub Azure Terraform.
1. Mengonfigurasi lingkungan Anda
- Langganan Azure: Jika Anda tidak memiliki langganan Azure, buat akun gratis sebelum Memulai.
Konfigurasikan Terraform: Jika Anda belum melakukannya, konfigurasikan Terraform menggunakan salah satu opsi berikut:
2. Terapkan kode Terraform
Buat direktori untuk menguji dan menjalankan sampel kode Terraform dan menjadikannya direktori saat ini.
Buat file bernama
providers.tfdan masukkan kode berikut: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 {} }Buat file bernama
main.tfdan sisipkan kode berikut untuk menyebarkan PostgreSQL Flexible Server tempat database berjalan.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] }Buat file bernama
postgresql-fs-db.tfdan sisipkan kode berikut untuk membuat instans database: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" }Buat file bernama
variables.tfdan masukkan kode berikut:variable "name_prefix" { default = "postgresqlfs" description = "Prefix of the resource name." } variable "location" { default = "eastus" description = "Location of the resource." }Buat file bernama
outputs.tfdan sisipkan kode berikut untuk menghasilkan nama grup sumber daya, nama server Azure PostgreSQL, dan nama database Azure PostgreSQL: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. Inisialisasi Terraform
Jalankan terraform init untuk menginisialisasi penyebaran Terraform. Perintah ini mengunduh penyedia Azure yang diperlukan untuk mengelola sumber daya Azure Anda.
terraform init -upgrade
Poin-poin penting:
- Parameter
-upgrademeningkatkan plugin penyedia yang diperlukan ke versi terbaru yang sesuai dengan batasan versi konfigurasi.
4. Buat rencana eksekusi Terraform
Jalankan terraform plan untuk membuat rencana eksekusi.
terraform plan -out main.tfplan
Poin-poin penting:
- Perintah
terraform planmembuat rencana eksekusi, tetapi tidak menjalankannya. Sebaliknya, ini menentukan tindakan apa yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda untuk memverifikasi apakah rencana eksekusi sesuai dengan harapan Anda sebelum membuat perubahan apa pun pada sumber daya aktual. - Parameter
-outopsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-outmemastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
5. Terapkan rencana eksekusi Terraform
Jalankan terraform apply untuk melaksanakan rencana ke infrastruktur cloud Anda.
terraform apply main.tfplan
Poin-poin penting:
- Contoh perintah
terraform applymengasumsikan Anda sebelumnya menjalankanterraform plan -out main.tfplan. - Jika Anda menentukan nama file yang berbeda untuk parameter
-out, gunakan nama file yang sama dalam panggilan keterraform apply. - Jika Anda tidak menggunakan parameter
-out, panggilterraform applytanpa parameter apa pun.
6. Verifikasi hasilnya
Jalankan az postgres flexible-server db show untuk menampilkan database Azure PostgreSQL.
az postgres flexible-server db show --resource-group <resource_group_name> --server-name <server_name> --database-name <database_name>
Poin-poin penting:
- Nilai untuk
<resource_group_name>,<server_name>, dan<database_name>ditampilkan dalam keluaranterraform apply.
7. Membersihkan sumber daya
Saat Anda tidak lagi memerlukan sumber daya yang dibuat melalui Terraform, lakukan langkah-langkah berikut:
Jalankan terraform plan dan tentukan
destroyflag.terraform plan -destroy -out main.destroy.tfplanPoin-poin penting:
- Perintah
terraform planmembuat rencana eksekusi, tetapi tidak menjalankannya. Sebaliknya, ini menentukan tindakan apa yang diperlukan untuk membuat konfigurasi yang ditentukan dalam file konfigurasi Anda. Pola ini memungkinkan Anda untuk memverifikasi apakah rencana eksekusi sesuai dengan harapan Anda sebelum membuat perubahan apa pun pada sumber daya aktual. - Parameter
-outopsional memungkinkan Anda menentukan file output untuk rencana. Menggunakan parameter-outmemastikan bahwa rencana yang Anda tinjau benar-benar sesuai dengan yang diterapkan.
- Perintah
Jalankan terraform apply untuk menerapkan rencana eksekusi.
terraform apply main.destroy.tfplan
Memecahkan masalah Terraform di Azure
Memecahkan masalah umum saat menggunakan Terraform di Azure