通过 terraform 的公共 IP 连接到 Azure 计算机

通过 terraform 的公共 IP 连接到 Azure 计算机

我成功地使用 Terraform(来自 Packer 映像)在 Azure 中创建了虚拟机。创建虚拟机后,我将在新创建的机器上远程运行一些命令。

该机器有一个公共 IP,但该 IP 动态附加到由 terrafrom 创建的新资源组。在这种情况下,在 terraform 启动之前我不知道公共 IP。

不幸的是,remote-exec 配置程序需要一个 ip 来连接和 ssh 连接。我该如何解决这个问题?

答案1

有两种方法可以做到这一点。

1.创建VM时,使用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 自定义脚本扩展

自定义脚本扩展可在 Azure 虚拟机上下载并执行脚本。此扩展可用于部署后配置、软件安装或任何其他配置/管理任务。

你可以像下面这样编写你的 tf:

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
}

更多信息请参考此类似问题

相关内容