Для лазурной терраформы мне неясно про вывод команды? - PullRequest
0 голосов
/ 04 октября 2019

Не понимаю, когда команда вывода используется в лазурной терраформе? Куда идет выход? Зачем нам нужен этот вывод? У нас есть несколько файлов TF в Aws, которые я конвертирую в Azure. Какой тип информации выводится?

Без этой информации, что произойдет?

Пожалуйста, приведите примеры.

Спасибо

1 Ответ

0 голосов
/ 04 октября 2019

Множество вопросов, я не уверен, что смогу охватить все это, но могу привести пример.

Хорошей практикой будет создание модулей терраформ, а затем использование выходных данных этих модулей дляпередать аргументы другим модулям, использующим тот же тип ввода.

Ниже приведен «базовый модуль», который создает группу ресурсов, виртуальную сеть, пару подсетей (например, внешнюю и внутреннюю), NSG и привязки. правила для подсетей

resource "azurerm_resource_group" "main_rg" {
  name     = var.resource_group_name
  location = var.location

  tags = {
    group    = var.resource_group_name
    Customer = var.tag_reference
    stack    = "resource group"
  }

}

resource "azurerm_virtual_network" "main_vnet" {
  name                = "${azurerm_resource_group.main_rg.name}-primary-vnet"
  address_space       = ["${var.vnet_cidr}"]
  location            = azurerm_resource_group.main_rg.location
  resource_group_name = azurerm_resource_group.main_rg.name

  tags = {
    group    = var.resource_group_name
    Customer = var.tag_reference
    stack    = "virtual network"
  }

}

resource "azurerm_subnet" "backend_subnet" {
  name                 = "${azurerm_resource_group.main_rg.name}-backend-subnet"
  resource_group_name  = azurerm_resource_group.main_rg.name
  virtual_network_name = azurerm_virtual_network.main_vnet.name
  address_prefix       = var.backend_subnet_cidr
  service_endpoints    = ["Microsoft.Sql", "Microsoft.Storage"]
}

resource "azurerm_subnet" "frontend_subnet" {
  name                 = "${azurerm_resource_group.main_rg.name}-frontend-subnet"
  resource_group_name  = azurerm_resource_group.main_rg.name
  virtual_network_name = azurerm_virtual_network.main_vnet.name
  address_prefix       = var.frontend_subnet_cidr
  service_endpoints    = ["Microsoft.Sql"]
}

resource "azurerm_network_security_group" "default_nsg" {
  name                = "${azurerm_resource_group.main_rg.name}-nsg"
  location            = azurerm_resource_group.main_rg.location
  resource_group_name = azurerm_resource_group.main_rg.name

  security_rule {
    name                        = "appgwV1Exception"
    priority                    = 100
    direction                   = "Inbound"
    access                      = "Allow"
    protocol                    = "*"
    source_port_range           = "*"
    destination_port_range      = "65503-65534"
    source_address_prefix       = "Internet"
    destination_address_prefix  = "*"
    description = "This is needed to allow helth check of backend server to pass according to official documentation"
  }

  security_rule {
    name                        = "appgwV2Exception"
    priority                    = 200
    direction                   = "Inbound"
    access                      = "Allow"
    protocol                    = "*"
    source_port_range           = "*"
    destination_port_range      = "65200-65535"
    source_address_prefix       = "Internet"
    destination_address_prefix  = "*"
    description = "This is needed to allow helth check of backend server to pass according to official documentation"
  }

  security_rule {
    name                        = "Office"
    priority                    = 500
    direction                   = "Inbound"
    access                      = "Allow"
    protocol                    = "*"
    source_port_range           = "*"
    destination_port_range      = "443"
    source_address_prefix       = "1.2.3.4/32"
    destination_address_prefix  = "*"
    description                 = "Allow 443 access from the office"
  }


  tags = {
    group    = var.resource_group_name
    Customer = var.tag_reference
    stack    = "NSG"
  }
}


resource "azurerm_subnet_network_security_group_association" "nsg_to_backend" {
  network_security_group_id = azurerm_network_security_group.default_nsg.id
  subnet_id                 = azurerm_subnet.backend_subnet.id
}

resource "azurerm_subnet_network_security_group_association" "nsg_to_frontend" {
  network_security_group_id = azurerm_network_security_group.default_nsg.id
  subnet_id                 = azurerm_subnet.frontend_subnet.id
}


output "resource_group_name" {
  value = azurerm_resource_group.main_rg.name
}

output "vnet_name" {
  value = azurerm_virtual_network.main_vnet.name
}

output "vnet_id" {
  value = azurerm_virtual_network.main_vnet.id
}

output "backend_subnet_id" {
  value = azurerm_subnet.backend_subnet.id
}

output "frontend_subnet_id" {
  value = azurerm_subnet.frontend_subnet.id
}

output "nsg_id" {
  value = azurerm_network_security_group.default_nsg.id
}

Опять же, наилучшей практикой terraform является использование выходного файла, но я избавлю вас от этого, пока посмотрите выходные данные в нижней части файла, теперь у меня есть другой модульдля создания виртуальной машины, так что мой main.tf, если хотите, или весь файл может выглядеть примерно так:

provider "azurerm" {
  version = "~> 1.21"
}

terraform {
  backend "azurerm" {}
}


module "base_infra" {
  source               = "../../base_infra"
  location             = var.location
  resource_group_name  = var.resource_group_name
  vnet_cidr            = var.vnet_cidr
  backend_subnet_cidr  = var.backend_subnet_cidr
  frontend_subnet_cidr = var.frontend_subnet_cidr
  tag_reference        = var.tag_reference
}

module "webapp_vm" {
  source               = "../../webapp"
  resource_group_name  = module.base_infra.resource_group_name
  location             = var.location
  vnet_cidr            = module.base_infra.main_vnet_id
  subnet_id            = module.base_infra.backend_subnet_id
  tag_reference        = var.tag_reference
  datadisk_size_gb     = "200"
  instance_count       = "1"
  instance_name_prefix = "${module.base_infra.resource_group_name}-webapp"
  vm_size              = var.vm_size
  vm_username          = var.vm_username
  vm_password          = module.webapp_vm_password.password_result
}

Я действительно обрезал некоторые углы в своем ответе, надеюсь, я дал вам достаточно

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...