Terhubung ke mesin Azure melalui ip publik dari terraform

2

Saya berhasil membuat mesin virtual di Azure dengan Terraform (dari gambar Packer). Setelah mesin Virtual dibuat, saya akan menjalankan beberapa perintah dari jarak jauh pada mesin yang baru dibuat.

Mesin ini memiliki ip piblic tetapi ip yang terpasang secara dinamis ke grup sumber daya baru apa yang dibuat oleh terraform. Dalam hal ini saya tidak tahu ip publik sebelum terraform dimulai.

Sayangnya penyedia remote-exec membutuhkan ip untuk terhubung dan ssh terhubung. Bagaimana saya bisa menyelesaikan masalah itu?

GergA
sumber

Jawaban:

1

Anda memiliki dua metode yang bisa melakukan ini.

1.When Anda membuat VM, menggunakan nama DNS. PEMBAWA ACARA adalah <dns name>.<location>.cloudapp.azure.com.

Dalam file tf, Buat IP publik seperti di bawah ini:

# create public IPs
resource "azurerm_public_ip" "ip" {
    name = "tfip"
    location = "ukwest"
    resource_group_name = "${azurerm_resource_group.rg.name}"
    public_ip_address_allocation = "dynamic"
    domain_name_label = "sometestdn"

    tags {
        environment = "staging"
    }
}

Buat koneksi seperti di bawah ini:

   connection {
        host = "sometestdn.ukwest.cloudapp.azure.com"
        user = "testuser"
        type = "ssh"
        private_key = "${file("~/.ssh/id_rsa_unencrypted")}"
        timeout = "1m"
        agent = true
    }

    provisioner "remote-exec" {
        inline = [
          "sudo apt-get update",
          "sudo apt-get install docker.io -y",
          "git clone https://github.com/somepublicrepo.git",
          "cd Docker-sample",
          "sudo docker build -t mywebapp .",
          "sudo docker run -d -p 5000:5000 mywebapp"
        ]
    }

2.Gunakan Ekstensi Skrip Kustom Azure .

Ekstensi Skrip Kustom mengunduh dan menjalankan skrip di Azure   mesin virtual. Ekstensi ini berguna untuk penempatan pasca   konfigurasi, instalasi perangkat lunak, atau konfigurasi lainnya /   tugas manajemen.

Anda dapat menulis tf seperti di bawah ini:

resource "azurerm_virtual_machine_extension" "helloterraformvm" {
  name                 = "hostname"
  location             = "West US"
  resource_group_name  = "${azurerm_resource_group.helloterraformvm.name}"
  virtual_machine_name = "${azurerm_virtual_machine.helloterraformvm.name}"
  publisher            = "Microsoft.OSTCExtensions"
  type                 = "CustomScriptForLinux"
  type_handler_version = "1.2"

  settings = <<SETTINGS
    {
        "commandToExecute": "apt-get install docker.io -y"
    }
SETTINGS
}

Informasi lebih lanjut silakan lihat ini serupa pertanyaan .

Shui shengbao
sumber
Bekerja Terima kasih. Label "Terraform" akan sangat membantu di superuser.com
GergA
Tentu saya melakukannya
GergA