Я пытаюсь создать две машины Centos 8 с terraform на Azure.
Мои шаблоны гитхаб соединять
Когда я пытаюсь подать заявку, я получаю следующую ошибку, связанную с политикой.
Не могли бы вы подсказать, как это исправить?
> • Ошибка: создание подсети: (Имя «subnetforAutomation» / Имя виртуальной сети «vnetforAutomation» / Группа ресурсов «automation_mart»):
> network.SubnetsClient#CreateOrUpdate: Ошибка отправки запроса:
> StatusCode=0 -- Исходная ошибка: Code="RequestDisallowedByPolicy"
> Message="Ресурс "subnetforAutomation" запрещен политикой.
> Идентификаторы политик:
> '[{\"policyAssignment\":{\"name\":\"Deny-Subnet-Without-Nsg\",\"id\":\"/providers/Microsoft.Management/managementGroups/QSFT-landingzones/ провайдеры/Microsoft.Authorization/policyAssignments/Deny-Subnet-Without-Nsg\"},\"policyDefinition\":{\"name\":\"Подсети
> должна быть группа безопасности сети
> \",\"id\":\"/providers/Microsoft.Management/managementGroups/QSFT/providers/Microsoft.Authorization/policyDefinitions/Deny-Subnet-Without-Nsg\"}}]'".
> Target="subnetforAutomation"
> AdditionalInfo=[{"info":{"evaluationDetails":{"evaluatedExpressions":[{"expression":"type","expressionKind":"Field","expressionValue":"Microsoft.Network/virtualNetworks/subnets" ,"оператор":"Равно","путь":"тип","результат":"Истина","целевое значение":"Microsoft.Network/virtualNetworks/subnets"},{"выражение":"Microsoft.Network/ virtualNetworks/subnets/networkSecurityGroup.id","expressionKind":"Поле","оператор":"Существует","путь":"properties.networkSecurityGroup.id","результат":"True","targetValue":" false"}]},"policyAssignmentDisplayName":"Deny-Subnet-Without-Nsg","policyAssignmentId":"/providers/Microsoft.Management/managementGroups/QSFT-landingzones/providers/Microsoft.Authorization/policyAssignments/Deny-Subnet- Without-Nsg","policyAssignmentName":"Deny-Subnet-Without-Nsg","policyAssignmentScope":"/providers/Microsoft.Management/managementGroups/QSFT-landingzones","policyDefinitionDisplayName":"Подсети
> должна быть группа безопасности сети
> ","policyDefinitionEffect":"Запретить","policyDefinitionId":"/providers/Microsoft.Management/managementGroups/QSFT/providers/Microsoft.Authorization/policyDefinitions/Deny-Subnet-Without-Nsg","policyDefinitionName":"Запретить -Subnet-Without-Nsg"},"type":"PolicyViolation"}]
>
>
> с azurerm_subnet.subnet,
> в строке 24 main.tf, в ресурсе "azurerm_subnet" "подсеть":
> 24: ресурс "azurerm_subnet" "подсеть" {
>
Я пытался сохранить встроенную подсеть внутри vnet. И проблема возникает теперь при обращении к подсети из блока ресурсов экземпляра виртуальной машины на самом этапе планирования.
Ошибка: неподдерживаемый атрибут
✓
✓ в строке 26 network.tf в ресурсе "azurerm_network_interface" "example":
26: subnet_id = azurerm_virtual_network.vnet.subnet.id #azurerm_subnet.subnet.id
✓
• Не удается получить доступ к атрибутам набора объектов. Вы имели в виду доступ к атрибуту во всех элементах набора?
âµ
//main.tf
## <https://www.terraform.io/docs/providers/azurerm/r/windows_virtual_machine.html>
ресурс "azurerm_windows_virtual_machine" "пример" {
имя = var.machine_details.name
имя_компьютера = var.machine_details.name
resource_group_name = azurerm_resource_group.rg.name
местоположение = azurerm_resource_group.rg.location
размер = var.machine_details.size
admin_username = var.machine_details.username
admin_password = var.machine_details.password
network_interface_ids = [
azurerm_network_interface.example.id,
]
ОС_диск {
кэширование = "Чтение-Запись"
storage_account_type = "Стандартный_LRS"
}
source_image_reference {
издатель = "MicrosoftWindowsServer"
предложение = "WindowsServer"
sku = "2019-ЦОД"
версия = "последняя"
}
}
//network.tf
## <https://www.terraform.io/docs/providers/azurerm/r/virtual_network.html>
ресурс "azurerm_virtual_network" "vnet" {
имя = "виртуальная сеть"
адресное_пространство = ["10.0.0.0/16"]
местоположение = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
подсеть{
имя = "внутренний"
адрес_префикс = "10.0.2.0/24"
security_group = azurerm_network_security_group.example.id
}
}
## <https://www.terraform.io/docs/providers/azurerm/r/network_interface.html>
ресурс "azurerm_network_interface" "пример" {
имя = "пример-ник"
местоположение = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
ip_configuration {
имя = "внутренний"
subnet_id = azurerm_virtual_network.vnet.subnet.id #azurerm_subnet.subnet.id
private_ip_address_allocation = "Динамический"
public_ip_address_id = azurerm_public_ip.myvm1publicip.id
}
}
ресурс "azurerm_public_ip" "myvm1publicip" {
имя = var.public_ip.name
местоположение = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
метод_распределения = var.public_ip.метод_распределения
sku = var.public_ip.sku
}
ресурс "azurerm_network_security_group" "пример" {
имя = var.nsg
местоположение = azurerm_resource_group.rg.location
resource_group_name = azurerm_resource_group.rg.name
безопасность_правило {
имя = "тест123"
приоритет = 100
направление = "Входящий"
доступ = "Разрешить"
протокол = "TCP"
source_port_range = "*"
диапазон_порта_назначения = "*"
исходный_адрес_префикс = "*"
префикс_адреса_назначения = "*"
}
}
//провайдер.tf
## <https://www.terraform.io/docs/providers/azurerm/index.html>
провайдер "азурерм" {
Особенности {}
}
//rg.tf
## <https://www.terraform.io/docs/providers/azurerm/r/resource_group.html>
ресурс "azurerm_resource_group" "rg" {
имя = "ТерраформТестинг2"
местоположение = var.location
}
//переменные.tf
переменная "местоположение" {
тип = строка
description = "Регион Azure, в котором будут предоставлены все эти ресурсы"
по умолчанию = "eastus2"
}
переменная "public_ip" {
по умолчанию = {
имя = "пип1"
распределение_метод = "Динамический"
артикул = "Базовый"
}
}
переменная "nsg" {
тип = строка
описание = "Azure NSG"
по умолчанию = "пример-nsg"
}
переменная "machine_details" {
по умолчанию = {
имя = "пример-vm2"
размер = "Стандарт_E2s_v3" #"Стандарт_F2"
имя пользователя = "adminname"
пароль = "MyPaword!@3"
}
}