Azure上的Terraform配置私有VM

时间:2017-04-16 02:39:52

标签: azure ubuntu ip provisioning terraform

我是Terraform的新手。我有一个带有两个Ubuntu VM的子网。一个是VM A,它具有公共IP,另一个是VM B,具有私有IP且没有公共IP。是否有一种Terraform方式在B上配置文件和运行命令,而无需先将SSH连接到VM ​​A,然后再连接到VM ​​B

根据我的发现,Terraform中的file个配置文件需要connection块,如下所示:

      # Example Azure VM provisioner block
      provisioner "remote-exec" {
        inline = [
          "rsync -Pav user@A:~/install.sh ~",
          "rsync -Pav user@A:~/file.txt ~",
          "sudo ~/install.sh"
        ]
        connection {
          type     = "ssh"
          user     = "${var.ssh_user_username}"
          host     = "<something to put here>"
          private_key = "${file("~/.ssh/azure_key_rsa")}"
          timeout  = "1m"
          agent = false
        }
      }

但由于我无法直接在Terraform中连接私有IP,因此我不确定要为host字段添加什么才能使此配置程序成功。

1 个答案:

答案 0 :(得分:1)

根据我的知识,你无法直接使用terraform。 您可以使用Custom Script extension执行install.sh,该脚本由Azure执行,您不需要ssh到VM。

自定义脚本扩展配置指定脚本位置和要运行的命令之类的内容。此配置可以存储在配置文件中,在命令行中指定,或存储在Azure Resource Manager模板中。敏感数据可以存储在受保护的配置中,该配置是加密的,只能在虚拟机内解密。根据您的情况,您似乎需要它。

Terraform也支持CustomScript,您可以参考此example

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

  settings = <<SETTINGS
    {
        "commandToExecute": "hostname"
    }
SETTINGS