Terraform ile Azure’da Linux Sanal Makine Oluşturma
Terraform, Azure’da komple altyapı dağıtımları tanımlamanıza ve oluşturmanıza olanak sağlar. Terraform şablonlarını, Azure kaynaklarını tutarlı ve yeniden üretilebilir bir şekilde oluşturan ve yapılandıran, okunabilir bir biçimde oluşturabilirsiniz. Bu makale size eksiksiz bir Linux ortamı yaratmanın ve Terraform ile kaynakları desteklemenin nasıl olacağını göstermeye çalışağım.
Daha önceki makalede Terraform’u Azure ortamınız için nasıl yapılandırabileceğinize değinmiştim. http://www.msazureturkey.com/azure-altyapilari-saglamak-icin-terraform-kurulumu/
Ubuntu 16.04-LTS imajına sahip Linux sanal makinesini oluşturmak için aşağıdaki Terraform şablonunu kullanabilirsiniz.
provider "azurerm" {
subscription_id = "xxxxxxx-xxxxx-xxxxx-xxxxx-xxxxxx"
client_id = "xxxxxx-xxxxxx-xxxxx-xxxxx-xxxxxx"
client_secret = "xxxxxxxx-xxxxx-xxxxx-xxxxx-xxxxx"
tenant_id = "xxxxx-xxxxxx-xxxxxx-xxxxxx-xxxxxx"
}
# Mevcut değilse bir kaynak grubu oluşturma
resource "azurerm_resource_group" "onderterraformgroup" {
name = "OnderRG"
location = "northeurope"
tags {
environment = "Terraform Demo"
}
}
#Virtual network oluşturma
resource "azurerm_virtual_network" "onderterraformnetwork" {
name = "OnderVnet"
address_space = ["10.0.0.0/16"]
location = "eastus"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
tags {
environment = "Terraform Demo"
}
}
# Subnet oluştuma
resource "azurerm_subnet" "onderterraformsubnet" {
name = "OnderSubnet"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
virtual_network_name = "${azurerm_virtual_network.onderterraformnetwork.name}"
address_prefix = "10.0.1.0/24"
}
# Public IPs oluştuma
resource "azurerm_public_ip" "onderterraformpublicip" {
name = "OnderPublicIP"
location = "northeurope"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
allocation_method = "dynamic"
tags {
environment = "Terraform Demo"
}
}
# Network Security Group ve kural oluştuma
resource "azurerm_network_security_group" "onderterraformnsg" {
name = "OnderNetworkSecurityGroup"
location = "northeurope"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
security_rule {
name = "SSH"
priority = 1001
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "22"
source_address_prefix = "*"
destination_address_prefix = "*"
}
tags {
environment = "Terraform Demo"
}
}
# Network interface oluştuma
resource "azurerm_network_interface" "onderterraformnic" {
name = "OnderNIC"
location = "northeurope"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
network_security_group_id = "${azurerm_network_security_group.onderterraformnsg.id}"
ip_configuration {
name = "OnderNicConfiguration"
subnet_id = "${azurerm_subnet.onderterraformsubnet.id}"
private_ip_address_allocation = "dynamic"
public_ip_address_id = "${azurerm_public_ip.onderterraformpublicip.id}"
}
tags {
environment = "Terraform Demo"
}
}
# Benzersiz bir depolama hesabı adı için rasgele metin oluşturma
resource "random_id" "randomId" {
keepers = {
# Yalnızca yeni bir kaynak grubu tanımlandığında yeni bir kimlik oluşturma
resource_group = "${azurerm_resource_group.onderterraformgroup.name}"
}
byte_length = 8
}
# Boot için depolama hesabı oluşturma
resource "azurerm_storage_account" "onderstorageaccount" {
name = "diag${random_id.randomId.hex}"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
location = "northeurope"
account_tier = "Standard"
account_replication_type = "LRS"
tags {
environment = "Terraform Demo"
}
}
# VM Oluşturma
resource "azurerm_virtual_machine" "onderterraformvm" {
name = "OnderVM"
location = "northeurope"
resource_group_name = "${azurerm_resource_group.onderterraformgroup.name}"
network_interface_ids = ["${azurerm_network_interface.onderterraformnic.id}"]
vm_size = "Standard_DS1_v2"
storage_os_disk {
name = "OnderOsDisk"
caching = "ReadWrite"
create_option = "FromImage"
managed_disk_type = "Premium_LRS"
}
storage_image_reference {
publisher = "Canonical"
offer = "UbuntuServer"
sku = "16.04.0-LTS"
version = "latest"
}
os_profile {
computer_name = "ondervm"
admin_username = "adminonder"
}
os_profile_linux_config {
disable_password_authentication = true
ssh_keys {
path = "/home/adminonder/.ssh/authorized_keys"
key_data = "ssh-rsa AAAAB3Nz{snip}hwhqT9h"
}
}
boot_diagnostics {
enabled = "true"
storage_uri = "${azurerm_storage_account.onderstorageaccount.primary_blob_endpoint}"
}
tags {
environment = "Terraform Demo"
}
}
Dosyayı kaydedin ve sonra Terraform dağıtımını başlatabilirsiniz.Aşağıdaki adım, bir Azure kaynak grubu oluşturmak için gereken Azure modüllerini indirir.
terraform init
Bir sonraki adım Terraform’un şablonu incelemesi ve doğrulamasıdır. Bu adım, istenen kaynakları Terraform tarafından kaydedilen durum bilgileriyle karşılaştırır ve ardından planlanan yürütmeyi çıkarır.
terraform plan
Her şey doğru görünüyorsa ve altyapıyı Azure’da oluşturmaya hazırsanız, şablonu Terraform’da uygulayabilirsiniz.
terraform apply