Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Terraform中的模块中引用azure网络安全ID?_Terraform - Fatal编程技术网

如何在Terraform中的模块中引用azure网络安全ID?

如何在Terraform中的模块中引用azure网络安全ID?,terraform,Terraform,我不确定如何在模块中引用azure网络安全组。我创建了一个模块,我可以将其重新用于我创建的任何VM,该模块在一定程度上可以工作,但我不确定如何为其分配网络安全组ID。下面是一个例子(稍加修改,我身上没有),它非常接近我所拥有的,并且是基于 根目录下的main.tf module "vm1" { source = "/modules/vm/" NSG = ???? } tfvars nic_name = apache_vm_nic location = West Europe ........

我不确定如何在模块中引用azure网络安全组。我创建了一个模块,我可以将其重新用于我创建的任何VM,该模块在一定程度上可以工作,但我不确定如何为其分配网络安全组ID。下面是一个例子(稍加修改,我身上没有),它非常接近我所拥有的,并且是基于

根目录下的main.tf

module "vm1" {
source = "/modules/vm/"
NSG = ????
}
tfvars

nic_name = apache_vm_nic
location = West Europe
........
模块/vm/main.tf

.........

resource "azurerm_network_interface" "myterraformnic" {
name                = "var.nic_name"
location            = "var.location"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"
network_security_group_id = { WHAT DO I PUT HERE? }

ip_configuration {
    name                          = "myNicConfiguration"
    subnet_id                     = "${azurerm_subnet.myterraformsubnet.id}"
    private_ip_address_allocation = "dynamic"
    public_ip_address_id          = "${azurerm_public_ip.myterraformpublicip.id}"
}
}


resource "azurerm_network_security_group" "apache-nsg" {
name                = "myNetworkSecurityGroup"
location            = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"

security_rule {
    name                       = "SSH"
    priority                   = 1001
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "22"
    source_address_prefix      = "*"
    destination_address_prefix = "*"
}
}

resource "azurerm_network_security_group" "nginx-nsg" {
name                = "myNetworkSecurityGroup"
location            = "eastus"
resource_group_name = "${azurerm_resource_group.myterraformgroup.name}"

security_rule {
    name                       = "SSH"
    priority                   = 1001
    direction                  = "Inbound"
    access                     = "Allow"
    protocol                   = "Tcp"
    source_port_range          = "*"
    destination_port_range     = "22"
    source_address_prefix      = "*"
    destination_address_prefix = "*"
}
}
在network\u security\u group\u id下的module/main.tf文件中,我无法准确地放置${azurerm\u network\u security\u group.apache nsg.id}或${azurerm\u network\u security\u group.nginx nsg.id}。那么,我可以放些什么,以便对所有虚拟机重用该模块


谢谢

我不太清楚您的问题,但我假设您希望创建一个通用网络安全组,并将其分配给VM模块的多个实例

如果要从根目录下的
main.tf传递安全组的ID,请执行以下操作:
在您的模块外部创建一个网络安全组资源,例如根目录下的
main.tf内部
,就像您在VM模块内部(针对Apache和Nginx)创建了一些资源一样,因此根目录下的
main.tf看起来如下所示:

resource "azurerm_network_security_group" "some_generic_vm_nsg" {
  ....
}

module "vm1" {
  source = "/modules/vm/"
  NSG = "${azurerm_network_security_group.some_generic_vm_nsg.id}"
}
注意,我们现在将nsg的ID传递给您的VM模块实例。 但是,您的VM模块尚未声明
NSG
变量。因此,创建文件
modules/vm/variables.tf
,并将其放入其中:

variable "NSG" {
  type = "string"
}
在您的模块中,
network\u security\u group\u id={我在这里放什么?}
变成:

network_security_group_id = "${var.NSG}"
这样,您可以将同一网络安全组分配给多个VM模块实例


您可以查看更多详细信息。

请随时将我的答案标记为正确答案;-)