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.
Teroyform 'U Yapılandır: Henüz yapmadıysanız, aşağıdaki seçeneklerden birini kullanarak Terrayform 'u yapılandırın:
2. Terrayform kodunu uygulama
Örnek Terüform kodunu test etmek ve geçerli dizin yapmak için bir dizin oluşturun.
Adlı bir dosya oluşturun
main.tfve 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.
- Makine yeni bir SSH ortak anahtarı ile oluşturulur. Karşılık gelen özel anahtarı almak için öğesini çalıştırı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ı
-outparametresi, plan için bir çıkış dosyası belirtmenize olanak tanır. Parametresinin kullanılması,-outgö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ırterraform plan -out main.tfplan.- Parametresi için farklı bir dosya adı belirttiyseniz
-out, çağrısında aynı dosya adını kullanınterraform apply. -outParametresini kullanmıyorsanız, yalnızcaterraform applyherhangi 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