Skip to main content

Penjelasan Singkat Untuk File Konfigurasi Terraform di Repositori iniwidi/terraform-azure

Berikut adalah penjelasan singkat untuk file konfigurasi Terraform di repositori iniwidi/terraform-azure, yang digunakan untuk menyusun infrastruktur Azure, khususnya terkait dengan Azure Database for MySQL Flexible Server dan jaringan virtualnya.


1. provider.tf

File ini mendefinisikan penyedia layanan cloud yang digunakan, dalam hal ini Azure.

provider "azurerm" {
  features {}
}

  • azurerm: Penyedia Terraform untuk Azure Resource Manager.

  • features {}: Blok konfigurasi kosong yang diperlukan oleh penyedia azurerm.


2. variables.tf

File ini mendeklarasikan variabel-variabel yang digunakan di seluruh konfigurasi Terraform.

variable "resource_group_name" {
  description = "Nama Resource Group"
  type        = string
}

variable "location" {
  description = "Lokasi Azure Region"
  type        = string
  default     = "East US"
}


3. network.tf

File ini mengatur konfigurasi jaringan, termasuk Virtual Network (VNet), Subnet, dan Network Security Group (NSG).

resource "azurerm_resource_group" "main" {
  name     = var.resource_group_name
  location = var.location
}

resource "azurerm_virtual_network" "vnet" {
  name                = "vnet-webserver"
  address_space       = ["10.0.0.0/16"]
  location            = var.location
  resource_group_name = azurerm_resource_group.main.name
}

resource "azurerm_subnet" "subnet" {
  name                 = "subnet-main"
  resource_group_name  = azurerm_resource_group.main.name
  virtual_network_name = azurerm_virtual_network.vnet.name
  address_prefixes     = ["10.0.1.0/24"]

  delegation {
    name = "delegation"

    service_delegation {
      name = "Microsoft.DBforMySQL/flexibleServers"
      actions = [
        "Microsoft.Network/virtualNetworks/subnets/action"
      ]
    }
  }
}

resource "azurerm_network_security_group" "nsg" {
  name                = "nsg-webserver"
  location            = var.location
  resource_group_name = azurerm_resource_group.main.name

  security_rule {
    name                       = "Allow-SSH"
    priority                   = 1001
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "22"
    source_address_prefix      = "*"
    destination_address_prefix = "*"
  }

  security_rule {
    name                       = "Allow-HTTP"
    priority                   = 1002
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "80"
    source_address_prefix      = "*"
    destination_address_prefix = "*"
  }
}

resource "azurerm_subnet_network_security_group_association" "nsg_assoc" {
  subnet_id                 = azurerm_subnet.subnet.id
  network_security_group_id = azurerm_network_security_group.nsg.id
}

  • azurerm_resource_group: Membuat Resource Group Azure.

  • azurerm_virtual_network: Membuat Virtual Network dengan address space tertentu.

  • azurerm_subnet: Membuat Subnet dalam VNet dan mendelegasikannya ke layanan MySQL Flexible Server.

  • azurerm_network_security_group: Membuat NSG dengan aturan untuk mengizinkan lalu lintas SSH dan HTTP.

  • azurerm_subnet_network_security_group_association: Mengasosiasikan NSG dengan Subnet.(Server Fault, Terraform Registry)


4. mysql.tf

File ini mengatur konfigurasi untuk Azure Database for MySQL Flexible Server.(Microsoft Learn)

resource "azurerm_mysql_flexible_server" "mysql" {
  name                   = "wid-mysql-dbserver"
  location               = var.location
  resource_group_name    = azurerm_resource_group.main.name
  administrator_login    = "mysqladmin"
  administrator_password = "MyS3cur3P@ssw0rd"
  sku_name               = "B_Standard_B1ms"
  version                = "8.0.21"
  zone                   = "1"

  storage {
    size_gb = 20
  }

  delegated_subnet_id = azurerm_subnet.subnet.id

  depends_on = [azurerm_subnet_network_security_group_association.nsg_assoc]

  tags = {
    owner       = "WID"
    Team        = "MS"
    Description = "Resources For WID project"
    Environment = "Research"
  }
}

  • azurerm_mysql_flexible_server: Membuat instance MySQL Flexible Server.

  • delegated_subnet_id: Menentukan ID subnet yang telah didelegasikan untuk layanan MySQL Flexible Server.

  • depends_on: Memastikan bahwa asosiasi NSG dengan subnet selesai sebelum membuat server MySQL.


5. output.tf

File ini mendefinisikan output dari konfigurasi Terraform, seperti informasi penting yang ingin ditampilkan setelah terraform apply.

output "mysql_server_name" {
  value = azurerm_mysql_flexible_server.mysql.name
}

output "mysql_server_fqdn" {
  value = azurerm_mysql_flexible_server.mysql.fqdn
}


6. private_endpoints.tf

File ini (jika ada) digunakan untuk mengonfigurasi Private Endpoint, memungkinkan koneksi privat ke layanan Azure melalui jaringan virtual.(Microsoft Learn)

resource "azurerm_private_endpoint" "mysql" {
  name                = "pe-mysql"
  location            = var.location
  resource_group_name = azurerm_resource_group.main.name
  subnet_id           = azurerm_subnet.subnet.id

  private_service_connection {
    name                           = "psc-mysql"
    private_connection_resource_id = azurerm_mysql_flexible_server.mysql.id
    subresource_names              = ["mysqlServer"]
    is_manual_connection           = false
  }
}

  • azurerm_private_endpoint: Membuat Private Endpoint untuk server MySQL.

  • private_service_connection: Mengonfigurasi koneksi layanan privat ke server MySQL.


7. storage.tf

Jika file ini ada, biasanya digunakan untuk mengonfigurasi akun penyimpanan Azure, seperti Azure Storage Account, yang dapat digunakan untuk berbagai keperluan seperti menyimpan file, blob, atau sebagai backend untuk Terraform state.

resource "azurerm_storage_account" "storage" {
  name                     = "mystorageaccount"
  resource_group_name      = azurerm_resource_group.main.name
  location                 = var.location
  account_tier             = "Standard"
  account_replication_type = "LRS"
}

  • azurerm_storage_account: Membuat akun penyimpanan Azure dengan tier dan jenis replikasi tertentu.


8. vm.tf

File ini digunakan untuk mengonfigurasi Virtual Machine (VM) di Azure.

resource "azurerm_linux_virtual_machine" "vm" {
  name                = "my-vm"
  resource_group_name = azurerm_resource_group.main.name
  location            = var.location
  size                = "Standard_B1s"
  admin_username      = "azureuser"
  network_interface_ids = [
    azurerm_network_interface.nic.id,
  ]
  admin_password = "P@ssw0rd1234"
}

  • azurerm_linux_virtual_machine: Membuat VM Linux di Azure dengan ukuran dan kredensial tertentu.

  • network_interface_ids: Menentukan NIC yang terhubung ke VM.


9. main.tf

File ini biasanya digunakan untuk menggabungkan semua konfigurasi dan mungkin berisi pemanggilan modul atau sumber daya tambahan.

module "network" {
  source = "./network"
}

module "mysql" {
  source = "./mysql"
}

  • module: Memanggil modul Terraform yang berada di direktori tertentu.


Dengan memahami struktur dan fungsi dari setiap file ini, Anda dapat lebih mudah mengelola dan memodifikasi infrastruktur Azure menggunakan Terraform.