From 1f62871e1a42e695423fcfad11b1ed8542519510 Mon Sep 17 00:00:00 2001 From: Anssi Hakanen Date: Mon, 22 Apr 2024 12:44:35 +0300 Subject: [PATCH] Adding networking & refactoring --- main.tf | 1 + modules/Container/main.tf | 5 +++++ modules/Container/variables.tf | 4 ++++ modules/Database/main.tf | 1 + modules/Monitoring/outputs.tf | 4 ++++ modules/Network/main.tf | 19 +++++++++++++++++++ modules/Network/variables.tf | 12 ++++++++++++ plan.out | Bin 15518 -> 32217 bytes 8 files changed, 46 insertions(+) diff --git a/main.tf b/main.tf index 99ae455..ae945d2 100644 --- a/main.tf +++ b/main.tf @@ -54,6 +54,7 @@ module "container" { location = var.location prefix = var.prefix env = var.env + subnet = module.network.compute_subnet_id } module "monitoring" { diff --git a/modules/Container/main.tf b/modules/Container/main.tf index 17d74fe..ac8b2b0 100644 --- a/modules/Container/main.tf +++ b/modules/Container/main.tf @@ -4,6 +4,7 @@ resource "azurerm_container_group" "container_group" { resource_group_name = var.rg os_type = "Linux" ip_address_type = "Public" + subnet_ids = toset([var.subnet]) container { @@ -20,5 +21,9 @@ resource "azurerm_container_group" "container_group" { port = 80 protocol = "TCP" } + ports { + port = 3310 + protocol = "TCP" + } } } \ No newline at end of file diff --git a/modules/Container/variables.tf b/modules/Container/variables.tf index dc242d9..cae6c3e 100644 --- a/modules/Container/variables.tf +++ b/modules/Container/variables.tf @@ -17,4 +17,8 @@ variable "prefix" { variable "env" { type = string +} + +variable "subnet" { + type = string } \ No newline at end of file diff --git a/modules/Database/main.tf b/modules/Database/main.tf index bae0aca..c233147 100644 --- a/modules/Database/main.tf +++ b/modules/Database/main.tf @@ -14,6 +14,7 @@ resource "azurerm_mssql_server" "sql_server" { name = "dbs-${var.prefix}-${var.env}-001" resource_group_name = var.rg location = var.location + tags = var.tags version = "12.0" administrator_login = data.azurerm_key_vault_secret.dbuser.value administrator_login_password = data.azurerm_key_vault_secret.dbpass.value diff --git a/modules/Monitoring/outputs.tf b/modules/Monitoring/outputs.tf index e40d4ab..4c44f13 100644 --- a/modules/Monitoring/outputs.tf +++ b/modules/Monitoring/outputs.tf @@ -4,4 +4,8 @@ output "instrumentation_key" { output "app_id" { value = azurerm_application_insights.application_insights.app_id +} + +output "log_analytics_workspace_id" { + value = azurerm_log_analytics_workspace.log_analytics_workspace.id } \ No newline at end of file diff --git a/modules/Network/main.tf b/modules/Network/main.tf index 4889b73..88e50f8 100644 --- a/modules/Network/main.tf +++ b/modules/Network/main.tf @@ -34,4 +34,23 @@ resource "azurerm_subnet" "backend" { resource_group_name = var.rg virtual_network_name = azurerm_virtual_network.vnet1.name address_prefixes = ["10.100.3.0/24"] +} + +resource "azurerm_private_dns_zone" "zones" { + for_each = var.private_dns_zones + + name = each.value + resource_group_name = var.rg + tags = var.tags +} + +# Private DNS Zone links to VNET +resource "azurerm_private_dns_zone_virtual_network_link" "zone_links" { + for_each = azurerm_private_dns_zone.zones + + name = "${each.value.name}-link" + resource_group_name = var.rg + private_dns_zone_name = each.value.name + virtual_network_id = azurerm_virtual_network.vnet1.id + tags = var.tags } \ No newline at end of file diff --git a/modules/Network/variables.tf b/modules/Network/variables.tf index 145bfb3..e7e8b4e 100644 --- a/modules/Network/variables.tf +++ b/modules/Network/variables.tf @@ -18,4 +18,16 @@ variable "prefix" { variable "env" { type = string +} + +variable "private_dns_zones" { + type = map(string) + default = { + blob_zone = "privatelink.blob.core.windows.net" + file_zone = "privatelink.file.core.windows.net" + eventgrid_zone = "privatelink.eventgrid.azure.net" + functionapp_zone = "privatelink.azurewebsites.net" + container_zone = "privatelink.aci.azure.net" + sql_zone = "privatelink.database.windows.net" + } } \ No newline at end of file diff --git a/plan.out b/plan.out index 97644477d41005bf4c38bbf7eae70d4abd83ecdb..3ae8fb6a2c29a0ba0dcd11ccb34e6415d4636915 100644 GIT binary patch delta 25910 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 G*8c-s