【问题标题】:Terraform provision private VM on Azure在 Azure 上 Terraform 预配私有 VM
【发布时间】:2017-04-16 02:39:51
【问题描述】:

我是 Terraform 的新手。我有一个带有两个 Ubuntu 虚拟机的子网。一种是VMA,有公网IP,另一种是VMB,有私网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 字段中输入什么内容才能使此配置程序成功。

【问题讨论】:

  • 我认为在 Terraform 中没有办法做到这一点。 an ongoing issue 关于允许 ssh 隧道用于相同目的并有一些变通方法
  • 我不确定我是否正确理解了您的需求,根据我的理解,您希望 ssh 到您的 VM B 然后执行install.sh,对吗?据我所知,您可以使用terraform 来完成。您可以使用CustomScript 来执行您的install.sh,该脚本由Azure 执行,您不需要ssh 到VM。 Terraform 也支持CustomScript,你可以参考这个example
  • @Walter-MSFT 你是对的,我想知道是否有办法在 Terraform 中没有公共 IP 的专用网络中直接配置 VM。这看起来正是我们所需要的,您能否将您的评论作为答案?

标签: azure ubuntu ip provisioning terraform


【解决方案1】:

据我所知,您无法直接使用 terraform 进行操作。 您可以使用Custom Script extension 来执行您的install.sh,脚本由Azure 执行,您不需要ssh 到VM。

自定义脚本扩展配置指定脚本位置和要运行的命令等内容。此配置可以存储在配置文件中、在命令行中指定或在 Azure 资源管理器模板中。敏感数据可以存储在受保护的配置中,该配置是加密的,只能在虚拟机内部解密。根据你的场景,看来是你需要的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-30
    • 1970-01-01
    • 2021-06-14
    • 2019-12-07
    • 1970-01-01
    • 2020-12-04
    相关资源
    最近更新 更多