AZURE ÜZERİNDE TERRAFORM İLE ALT YAPI GELİŞTİRME – BÖLÜM 9 : MEVCUT ALTYAPI EKLEME
Azure üzerinde Terraform ile Altyapı Geliştirme makale serisine hoş geldiniz. Yazı dizisinin dokuzuncu bölümünde, Terraform dağıtım kodlarımızda mevcut altyapıları nasıl içe aktarabileceğimize bakacağız. Mevcut altyapıyı Terraform’a aktarmak için tipik iş akışı aşağıdaki gibidir:
Mevcut altyapı “terraform import “Azure ResourceID” komutu kullanılarak içe aktarılır, ardından Terraform yapılandırma dosyası mevcut altyapı ayarlarıyla eşitlenecek şekilde değiştirilir. Daha sonra, hem Terraform konfigürasyonunun, durumunun hem de mevcut kaynakların senkronize olduğunu doğrulamak için “terraform plan” ve “terraform apply” kullanılır.
- Örneğimiz için, içe aktarma sürecinden geçmeden önce Azure’da bazı mevcut altyapılara ihtiyacımız olacak. Şimdi bunları Azure CLI ile oluşturalım.
Kaynak Grubu için:
az group create --name demo08 --location northeurope
VNET ve Alt Ağ için:
az network vnet create --name vnet-dco-ne-01 --resource-group demo08 --address-prefix 20.0.0.0/16 --subnet-name subnet1 --subnet-prefix 20.0.0.0/24
NSG için:
az network nsg create -g demo08 -n nsg01
az network nsg rule create -g demo08 --nsg-name nsg01 -n Allow-HTTPS --priority 100 \
--source-address-prefixes '*' --source-port-ranges 443 \
--destination-address-prefixes '*' --destination-port-ranges 443 --access Allow \
--protocol Tcp --description "Allow HTTPS"
az network nsg rule create -g demo08 --nsg-name nsg01 -n Allow-HTTP --priority 110 \
--source-address-prefixes '*' --source-port-ranges 80 \
--destination-address-prefixes '*' --destination-port-ranges 80 --access Allow \
--protocol Tcp --description "Allow HTTP"
az network vnet subnet create -g demo08 --vnet-name vnet-dco-ne-01 \
-n subnet2 \
--address-prefixes 20.0.1.0/24 \
--network-security-group nsg01
- Gördüğünüz gibi mevcut altyapımızda bağımlı kaynaklar var. VNET’ler alt ağlar içerir, NSG güvenlik kuralları içerir. Bu bileşenleri içe aktarırken, alt kaynaklara da dikkat etmek çok önemlidir. main.tf terraform yapılandırma dosyasındaki her kaynak için tüm alt kaynaklar belirtilmelidir, aksi takdirde, “terraform apply” çalıştırıldığında bu kaynaklar silinecektir. Şimdi aşağıdaki terraform kodunu main.tf dosyanıza kopyalayın.
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "2.40.0"
}
}
}
provider "azurerm" {
features {}
}
resource "azurerm_resource_group" "rg"{
name = "demo08"
location = "northeurope"
}
resource "azurerm_network_security_group" "nsg" {
name = "nsg01"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
security_rule {
name = "Allow-HTTPS"
description = "Allow HTTPS"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "443"
destination_port_range = "443"
source_address_prefix = "*"
destination_address_prefix = "*"
}
security_rule {
name = "Allow-HTTP"
description = "Allow HTTP"
priority = 110
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "80"
destination_port_range = "80"
source_address_prefix = "*"
destination_address_prefix = "*"
}
}
resource "azurerm_virtual_network" "vnet" {
name = "vnet-dco-ne-01"
location = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
address_space = ["20.0.0.0/16"]
subnet {
name = "subnet1"
address_prefix = "20.0.0.0/24"
}
subnet {
name = "subnet2"
address_prefix = "20.0.1.0/24"
security_group = azurerm_network_security_group.nsg.id
}
}
Şimdi Terraform import komutunu çalıştırabilmemiz için yukarıda bahsettiğim gibi Azure kaynaklarının kaynak ID’lerine ihtiyacımız var. Azure portal üzerinden Resource Group, VNET ve NSG’nin Resource ID’lerine ulaşabilir veya aşağıdaki Azure CLI kodlarını çalıştırabilirsiniz.
az network nsg show -g demo08 -n nsg01
az network vnet show -g demo08 -n vnet-dco-ne-01
Kaynak ID’lerine eriştikten sonra terraform import komutlarını aşağıdaki gibi çalıştırabilirsiniz.
terraform import azurerm_network_security_group.nsg "Resource ID"
terraform import azurerm_virtual_network.vnet "Resource ID"
Gördüğünüz gibi “Terraform plan” komutunu çalıştırdığınızda kaynak grubunu içe aktarmadığımız için demo08 kaynak grubu oluşturulacağını söylüyor. Ancak, “terraform apply” komutunu çalıştırırsanız, zaten demo08 kaynak grubuna sahip olduğunuz için bu kaynak grubu kaldırılabilir.
Şimdi “terraform import” komutu ile kaynak grubunu import edelim ve “terraform plan” komutunu tekrar çalıştıralım.
Gördüğünüz gibi, tüm kaynaklar içe aktarıldığından herhangi bir değişiklik olmayacağına dair bir mesaj aldık.