gpt4 book ai didi

azure - Azure 上的 Terraform 预配私有(private) VM

转载 作者:行者123 更新时间:2023-12-04 18:45:43 24 4
gpt4 key购买 nike

我是 Terraform 新手。我有一个包含两个 Ubuntu VM 的子网。一是虚拟机A ,有一个公共(public)IP,另一个是VM B ,有私有(private)IP,没有公共(public)IP。是否有一种 Terraform 方式在 B 上配置文件并运行命令无需先通过 SSH 连接到虚拟机 A然后进入VM B

根据我的发现,file Terraform 中的配置者需要 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 中连接到私有(private) IP,所以我不确定要为 host 添加什么内容字段使此配置程序成功。

最佳答案

据我所知,你无法直接使用 terraform 来做到这一点。您可以使用 Custom Script extension要执行 install.sh,该脚本由 Azure 执行,您不需要通过 ssh 连接到虚拟机。

自定义脚本扩展配置指定脚本位置和要运行的命令等内容。此配置可以存储在命令行指定的配置文件中,或存储在 Azure 资源管理器模板中。敏感数据可以存储在 protected 配置中,该配置是加密的并且仅在虚拟机内部解密。根据您的情况,似乎是您所需要的。

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

关于azure - Azure 上的 Terraform 预配私有(private) VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43433185/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com