2

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

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

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

1 ответ1

1

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

1.При создании ВМ используется DNS-имя. HOST - это <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 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
}

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .