Terrayform kullanarak Azure 'da altyapı ile Linux VM yapılandırma

Terrayform, Azure 'da tüm altyapı dağıtımlarını tanımlamanızı ve oluşturmanızı sağlar. Azure kaynaklarını tutarlı, tekrarlanabilir bir şekilde oluşturup yapılandıran, Kullanıcı tarafından okunabilen bir biçimde Terrayform şablonları oluşturursunuz. Bu makalede, tüm Linux ortamının nasıl oluşturulduğu ve Terrayform ile destekleyici kaynakların nasıl oluşturulduğu gösterilir.

Bu makalede şunları öğreneceksiniz:

  • Sanal ağ oluşturma
  • Alt ağ oluşturma
  • Genel IP adresi oluşturma
  • Ağ güvenlik grubu oluşturma
  • Sanal ağ arabirimi kartı oluşturma
  • Tanılama için bir depolama hesabı oluşturma
  • Sanal makine oluşturma

1. ortamınızı yapılandırın

  • Azure aboneliği: Azure aboneliğiniz yoksa başlamadan önce ücretsiz bir hesap oluşturun.

2. Terrayform kodunu uygulama

  1. Örnek Terüform kodunu test etmek ve geçerli dizin yapmak için bir dizin oluşturun.

  2. Adlı bir dosya oluşturun main.tf ve aşağıdaki kodu ekleyin:

    # Configure the Microsoft Azure Provider
    terraform {
      required_providers {
        azurerm = {
          source = "hashicorp/azurerm"
          version = "~>2.0"
        }
      }
    }
    provider "azurerm" {
      features {}
    }
    
    # Create a resource group if it doesn't exist
    resource "azurerm_resource_group" "myterraformgroup" {
        name     = "myResourceGroup"
        location = "eastus"
    
        tags = {
            environment = "Terraform Demo"
        }
    }
    
    # Create virtual network
    resource "azurerm_virtual_network" "myterraformnetwork" {
        name                = "myVnet"
        address_space       = ["10.0.0.0/16"]
        location            = "eastus"
        resource_group_name = azurerm_resource_group.myterraformgroup.name
    
        tags = {
            environment = "Terraform Demo"
        }
    }
    
    # Create subnet
    resource "azurerm_subnet" "myterraformsubnet" {
        name                 = "mySubnet"
        resource_group_name  = azurerm_resource_group.myterraformgroup.name
        virtual_network_name = azurerm_virtual_network.myterraformnetwork.name
        address_prefixes       = ["10.0.1.0/24"]
    }
    
    # Create public IPs
    resource "azurerm_public_ip" "myterraformpublicip" {
        name                         = "myPublicIP"
        location                     = "eastus"
        resource_group_name          = azurerm_resource_group.myterraformgroup.name
        allocation_method            = "Dynamic"
    
        tags = {
            environment = "Terraform Demo"
        }
    }
    
    # Create Network Security Group and rule
    resource "azurerm_network_security_group" "myterraformnsg" {
        name                = "myNetworkSecurityGroup"
        location            = "eastus"
        resource_group_name = azurerm_resource_group.myterraformgroup.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"
        }
    }
    
    # Create network interface
    resource "azurerm_network_interface" "myterraformnic" {
        name                      = "myNIC"
        location                  = "eastus"
        resource_group_name       = azurerm_resource_group.myterraformgroup.name
    
        ip_configuration {
            name                          = "myNicConfiguration"
            subnet_id                     = azurerm_subnet.myterraformsubnet.id
            private_ip_address_allocation = "Dynamic"
            public_ip_address_id          = azurerm_public_ip.myterraformpublicip.id
        }
    
        tags = {
            environment = "Terraform Demo"
        }
    }
    
    # Connect the security group to the network interface
    resource "azurerm_network_interface_security_group_association" "example" {
        network_interface_id      = azurerm_network_interface.myterraformnic.id
        network_security_group_id = azurerm_network_security_group.myterraformnsg.id
    }
    
    # Generate random text for a unique storage account name
    resource "random_id" "randomId" {
        keepers = {
            # Generate a new ID only when a new resource group is defined
            resource_group = azurerm_resource_group.myterraformgroup.name
        }
    
        byte_length = 8
    }
    
    # Create storage account for boot diagnostics
    resource "azurerm_storage_account" "mystorageaccount" {
        name                        = "diag${random_id.randomId.hex}"
        resource_group_name         = azurerm_resource_group.myterraformgroup.name
        location                    = "eastus"
        account_tier                = "Standard"
        account_replication_type    = "LRS"
    
        tags = {
            environment = "Terraform Demo"
        }
    }
    
    # Create (and display) an SSH key
    resource "tls_private_key" "example_ssh" {
      algorithm = "RSA"
      rsa_bits = 4096
    }
    output "tls_private_key" { 
        value = tls_private_key.example_ssh.private_key_pem 
        sensitive = true
    }
    
    # Create virtual machine
    resource "azurerm_linux_virtual_machine" "myterraformvm" {
        name                  = "myVM"
        location              = "eastus"
        resource_group_name   = azurerm_resource_group.myterraformgroup.name
        network_interface_ids = [azurerm_network_interface.myterraformnic.id]
        size                  = "Standard_DS1_v2"
    
        os_disk {
            name              = "myOsDisk"
            caching           = "ReadWrite"
            storage_account_type = "Premium_LRS"
        }
    
        source_image_reference {
            publisher = "Canonical"
            offer     = "UbuntuServer"
            sku       = "18.04-LTS"
            version   = "latest"
        }
    
        computer_name  = "myvm"
        admin_username = "azureuser"
        disable_password_authentication = true
    
        admin_ssh_key {
            username       = "azureuser"
            public_key     = tls_private_key.example_ssh.public_key_openssh
        }
    
        boot_diagnostics {
            storage_account_uri = azurerm_storage_account.mystorageaccount.primary_blob_endpoint
        }
    
        tags = {
            environment = "Terraform Demo"
        }
    }
    

    Anahtar noktaları:

    • Makine yeni bir SSH ortak anahtarı ile oluşturulur. Karşılık gelen özel anahtarı almak için öğesini çalıştırın terraform output -raw tls_private_key . Çıktıyı yerel makinedeki bir dosyaya kaydedin ve sanal makinede oturum açmak için kullanın.

3. Terrayform 'u başlatma

Terrayform dağıtımını başlatmak için terrayform init ' i çalıştırın.

terraform init

Anahtar noktaları:

  • Bu komut, Azure Kaynak grubu oluşturmak için gereken Azure modüllerini indirir.

4. bir Terrayform yürütme planı oluşturma

Bir yürütme planı oluşturmak için terrayform planını çalıştırın.

terraform plan -out main.tfplan

Anahtar noktaları:

  • terraform planKomut bir yürütme planı oluşturur, ancak yürütmez. Bunun yerine, yapılandırma dosyalarınızda belirtilen yapılandırmayı oluşturmak için hangi eylemlerin gerekli olduğunu belirler. Bu model, gerçek kaynaklarda herhangi bir değişiklik yapmadan önce yürütme planının beklentilerinizi eşleşip eşleşmediğini doğrulamanızı sağlar.
  • İsteğe bağlı -out parametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. Parametresinin kullanılması, -out gözden geçirdiğiniz planın tam olarak uygulanmış olmasını sağlar.
  • Kalıcı yürütme planları ve güvenlik hakkında daha fazla bilgi edinmek için güvenlik uyarısı bölümünebakın.

5. Teraform yürütme planı uygulama

Yürütme planını bulut altyapınıza uygulamak için terrayform uygulamasını çalıştırın.

terraform apply main.tfplan

Anahtar noktaları:

  • terraform applyYukarıdaki komutu daha önce çalıştırdığınız varsayılır terraform plan -out main.tfplan .
  • Parametresi için farklı bir dosya adı belirttiyseniz -out , çağrısında aynı dosya adını kullanın terraform apply .
  • -outParametresini kullanmıyorsanız, yalnızca terraform apply herhangi bir parametre olmadan çağrı yapmanız yeterlidir.

Azure 'da Terrampaform sorunlarını giderme

Azure 'da Terrampaform kullanırken karşılaşılan yaygın sorunları giderme

Sonraki adımlar