Terraform ile Azure’da Sanal VM Oluşturma
Merhaba! Bu makalede, Terraform kullanarak Azure Cloud üzerinde nasıl sanal makine (VM) oluşturabileceğinizi adım adım ele alacağız.
Terraform, altyapıyı kod olarak yönetme imkânı sağlayan popüler bir araç olup, bulut kaynaklarını tanımlayıp otomatikleştirmenize olanak tanır.
Azure Cloud üzerinde sanal makine oluşturmak ise, geliştiriciler ve sistem yöneticileri için sıkça ihtiyaç duyulan bir işlemdir. Bu makalede Terraform ile nasıl hızlı ve verimli bir şekilde Azure VM’leri oluşturabileceğinizi göstererek, altyapınızı daha yönetilebilir hale getirme konusunda rehberlik edeceğiz.
Hazırsanız başlayalım!
Ben bu işlemleri bir linux-ubuntu makinede yapacağım o yüzden ön gereksinimler olarak aşağıdaki adımları tamamlıyoruz.
Terraform Kurulumu
sudo apt-get update && sudo apt-get install -y gnupg software-properties-common curl
curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo gpg --dearmor -o /usr/share/keyrings/hashicorp-archive-keyring.gpg
echo "deb [signed-by=/usr/share/keyrings/hashicorp-archive-keyring.gpg] https://apt.releases.hashicorp.com $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/hashicorp.list
sudo apt-get update && sudo apt-get install terraform
Kurulum sonrası doğrulamak için terraform -help yazıyorum herşey yolunda!
Azure CLI kurulumu
curl -sL https://aka.ms/InstallAzureCLIDeb | sudo bash
Terraform main.tf dosyam aşağıdaki gibi, burda ki bilgileri kendi azure subscription’a göre düzenleyebilirsiniz.
# Azure Provider tanımlamasi
provider "azurerm" {
features {}
# Tenant ID ve Subscription ID ayarları
tenant_id = "0123456789"
subscription_id = "0123456789"
}
# Resource Group
resource "azurerm_resource_group" "example" {
name = "example-resources"
location = "West US 2"
}
# Sanal Ağ (VNet) Oluşturma
resource "azurerm_virtual_network" "example_vnet" {
name = "example-vnet"
address_space = ["10.0.0.0/16"]
location = azurerm_resource_group.example.location # Düzeltilmiş kaynak ismi
resource_group_name = azurerm_resource_group.example.name # Düzeltilmiş kaynak ismi
}
# Alt Ağ (Subnet) Oluşturma
resource "azurerm_subnet" "example_subnet" {
name = "example-subnet"
resource_group_name = azurerm_resource_group.example.name # Düzeltilmiş kaynak ismi
virtual_network_name = azurerm_virtual_network.example_vnet.name
address_prefixes = ["10.0.1.0/24"]
}
# Public IP Adresi Oluşturma
resource "azurerm_public_ip" "example_public_ip" {
name = "example-public-ip"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
allocation_method = "Static"
}
# Ağ Arayüzü (Network Interface) Oluşturma
resource "azurerm_network_interface" "example_nic" {
name = "example-nic"
location = azurerm_resource_group.example.location
resource_group_name = azurerm_resource_group.example.name
ip_configuration {
name = "internal"
subnet_id = azurerm_subnet.example_subnet.id
private_ip_address_allocation = "Dynamic"
public_ip_address_id = azurerm_public_ip.example_public_ip.id
}
}
# Ubuntu Sanal Makine Oluşturma
resource "azurerm_linux_virtual_machine" "example_vm" {
name = "example-vm"
resource_group_name = azurerm_resource_group.example.name
location = azurerm_resource_group.example.location
size = "Standard_DS1_v2"
admin_username = "azureuser"
network_interface_ids = [
azurerm_network_interface.example_nic.id,
]
os_disk {
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "18.04-LTS"
version = "latest"
}
admin_ssh_key {
username = "azureuser"
public_key = file("~/.ssh/id_rsa.pub") # Bu alanı kendi SSH anahtarına göre düzenle
}
computer_name = "example-vm"
disable_password_authentication = true
}
# VM'nin Public IP'sini Çıktı Olarak Almak
output "public_ip" {
value = azurerm_public_ip.example_public_ip.ip_address
}
Terraform init komutunu çalıştırıyorum.
Terraform init yapılandırmanızda belirtilen sağlayıcıları (provider’ları) indirir. Örneğin, Azure üzerinde kaynak oluşturacaksanız azurerm sağlayıcısını indirir. Sağlayıcılar, Terraform’un farklı bulut servisleri ve platformlarla iletişim kurmasını sağlar.
Terraform plan komutunu çalıştırıyorum.
Terraform yapılandırmanızda yapılacak değişikliklerin bir öngörüsünü (planını) oluşturur. Bu komut, hangi kaynakların oluşturulacağını, değiştirileceğini veya silineceğini gösterir, ancak bu değişiklikleri henüz uygulamaz. terraform plan
, özellikle altyapınızda bir hata yapmadan önce yapılacak işlemleri anlamak için kullanılır.
Terraform Apply komutu ile tüm değişiklikleri uyguluyorum.
Ve Sonuç! 🙂
Azure Cloud Portal’den kontrol ediyorum…
Test-Lab ortamında işiniz bittikten sonra kaynakları tek bir komut ile (terraform destroy) temizleyebilirsiniz.