Terraform 在 Azure 上预配私有 VM
Terraform provision private VM on Azure
我是 Terraform 的新手。我有一个包含两个 Ubuntu VM 的子网。一个是 VM A
,有 public IP,另一个是 VM B
,有私有 IP,没有 public 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 进行此操作。
您可以使用 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
我是 Terraform 的新手。我有一个包含两个 Ubuntu VM 的子网。一个是 VM A
,有 public IP,另一个是 VM B
,有私有 IP,没有 public 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 进行此操作。
您可以使用 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