#terraform #terraform-provider-azure
#terraform #terraform-provider-azure
Вопрос:
Я ссылаюсь на существующие подсети, как показано ниже, но я хочу, чтобы NSG была создана и подключена к подсети. Это выдает ошибку.
Ниже приведен код для повторного ввода и добавления NSG:
data "azurerm_subnet" "tf-sn-erx-app" {
name = "${var.subnet_app_name}"
virtual_network_name = "${data.azurerm_virtual_network.tf-vn-erx.name}"
resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
security_group = "${azurerm_network_security_group.tf-nsg-erx-application.id}"
}
data "azurerm_subnet" "tf-sn-erx-sql" {
name = "${var.subnet_sql_name}"
virtual_network_name = "${data.azurerm_virtual_network.tf-vn-erx.name}"
resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
security_group = "${azurerm_network_security_group.tf-nsg-erx-sql.id}"
}
resource "azurerm_network_security_group" "tf-nsg-erx-application" {
name = "${var.application_nsg}"
location = "${data.azurerm_resource_group.tf-rg-erx-external.location}"
resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
}
resource "azurerm_network_security_rule" "tf-nsr-erx-application-5985" {
name = "Open Port 5985"
priority = 100
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "5985"
source_address_prefix = "*"
destination_address_prefix = "*"
resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
network_security_group_name = "${azurerm_network_security_group.tf-nsg-erx-application.name}"
}
resource "azurerm_network_security_rule" "tf-nsr-erx-application-5986" {
name = "Open Port 5986"
priority = 101
direction = "Inbound"
access = "Allow"
protocol = "Tcp"
source_port_range = "*"
destination_port_range = "5986"
source_address_prefix = "*"
destination_address_prefix = "*"
resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
network_security_group_name = "${azurerm_network_security_group.tf-nsg-erx-application.name}"
}
Однако, когда я запускаю terraform, сообщается об ошибке ниже.
Error: data.azurerm_subnet.tf-sn-erx-app: : invalid or unknown key: security_group
Error: data.azurerm_subnet.tf-sn-erx-sql: : invalid or unknown key: security_group
В чем проблема?
Комментарии:
1. @CharlesXu и BMW, приносим извинения за задержку. Я был на пасхальных каникулах. Получилось так, как показано ниже: « network_security_group_id = «$ {azurerm_network_security_group.tf-nsg-erx-application.id }» «
2. Итак, я должен опубликовать это в качестве ответа, тогда это, безусловно, работает. У меня все NI теперь связаны с IP-адресами.
3. Если вы используете вещи в моем ответе, вам следует отметить его вместо добавления другого. Вы получаете от меня ответ и возвращаете мне отметку.
4. Есть еще какие-нибудь новости?
5. @CharlesXu со страстью ценю вашу настойчивость! Я опубликовал ответ, по крайней мере, это сработало для меня. Спасибо вам и BMW.
Ответ №1:
Как говорит @BMW, security_group
в данных нет свойства azurerm_subnet
. Если вы хотите связать NSG с существующей подсетью, вы можете использовать azurerm_subnet_network_security_group_association
для этого. Просто используйте данные azurerm_subnet
для ссылки на существующую подсеть и создайте для нее NSG или используйте существующую.
Ответ №2:
security_group
В источнике данных нет ключа azurerm_subnet
Argument Reference
name - (Required) Specifies the name of the Subnet.
virtual_network_name - (Required) Specifies the name of the Virtual Network this Subnet is located within.
resource_group_name - (Required) Specifies the name of the resource group the Virtual Network is located in.
https://www.terraform.io/docs/providers/azurerm/d/subnet.html
Комментарии:
1. Я думаю, что он говорит — вы должны удалить этот ключ 🙂
2. @4c74356b41 да
Ответ №3:
Я заставил его работать с помощью приведенного ниже кода:
resource "azurerm_network_interface" "tf-ni-erx-mkconn" {
count = 3
name = "${var.mkconn_base_hostname}${format("d",count.index 1)}-nic01"
location = "${data.azurerm_resource_group.tf-rg-erx-external.location}"
resource_group_name = "${data.azurerm_resource_group.tf-rg-erx-external.name}"
network_security_group_id = "${azurerm_network_security_group.tf-nsg-erx-application.id}"
Комментарии:
1. Если это решение, почему вы задаетесь вопросом, как создать NSG для существующей подсети ?! Это не отвечает на вопрос.
2. @CharlesXu Я понял это после того, как опубликовал вопрос. Я могу прикрепить несколько скриншотов. Это, безусловно, работает.
3. Да, это работает. Но это показывает, что NSG связан с сетевой картой. Вы также можете связать NSG с подсетью в качестве своего вопроса.
4. Хорошо, какой из них следует соблюдать. NSG в сетевой адаптер или в подсеть, следуя рекомендациям по безопасности, не могли бы вы посоветовать мне, пожалуйста?
5. Это все практики, только на ваш выбор. Для подсети это для всех служб в подсети. Для сетевой карты это только для той, с которой она связана.