Подключитесь к компьютеру Azure через публичный ip от terraform

Я успешно сделал виртуальную машину в Azure с Terraform (из образа Packer). После создания виртуальной машины я запускал некоторые команды удаленно на вновь созданной машине.

У машины есть ip-файл piblic, но этот ip динамически подключается к новой группе ресурсов, созданной terrafrom. В этом случае я не знаю puclic ip до запуска terraform.

К сожалению, провайдеру remote-exec необходим ip для соединения и ssh connect. Как я могу решить эту проблему?

1 ответ

Решение

У вас есть два способа сделать это.

1.При создании виртуальной машины, используя DNS-имя. Хост <dns name>.<location>.cloudapp.azure.com,

В tf файле создайте публичный IP как показано ниже:

# 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"
    }
}

Создайте соединение, как показано ниже:

   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. Используйте расширение Azure Custom Script.

Расширение Custom Script Extension загружает и выполняет сценарии на виртуальных машинах Azure. Это расширение полезно для настройки после развертывания, установки программного обеспечения или любой другой задачи настройки / управления.

Вы можете написать свой тф, как показано ниже:

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
}

Больше информации, пожалуйста, обратитесь к этому похожему вопросу.

Другие вопросы по тегам