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 penyediaazurerm
.
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"
}
-
resource_group_name
: Nama untuk Resource Group Azure. -
location
: Lokasi atau region Azure tempat sumber daya akan dibuat.(Shisho Cloud byGMO - 開発組織のための 脆弱性診断ツール, GitHub)
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
}
-
mysql_server_name
: Menampilkan nama server MySQL yang dibuat. -
mysql_server_fqdn
: Menampilkan Fully Qualified Domain Name dari server MySQL.(Shisho Cloud byGMO - 開発組織のための 脆弱性診断ツール, Microsoft Learn)
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.
No Comments