Files
infrastructure/terraform/modules/azure/storage/main.tf
2026-02-09 21:51:46 -08:00

82 lines
2.0 KiB
HCL

# Azure Storage Module
# Main resources
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "~> 3.0"
}
}
}
# Storage Account
resource "azurerm_storage_account" "main" {
name = var.storage_account_name
resource_group_name = var.resource_group_name
location = var.location
account_tier = var.account_tier
account_replication_type = var.account_replication_type
account_kind = var.account_kind
enable_https_traffic_only = var.enable_https_traffic_only
min_tls_version = var.min_tls_version
blob_properties {
delete_retention_policy {
days = var.blob_delete_retention_days
}
container_delete_retention_policy {
days = var.container_delete_retention_days
}
}
network_rules {
default_action = var.network_rules.default_action
bypass = var.network_rules.bypass
ip_rules = var.network_rules.ip_rules
virtual_network_subnet_ids = var.network_rules.virtual_network_subnet_ids
}
tags = var.tags
lifecycle {
create_before_destroy = true
}
}
# Containers
resource "azurerm_storage_container" "containers" {
for_each = var.containers
name = each.value.name
storage_account_name = azurerm_storage_account.main.name
container_access_type = each.value.access_type
}
# File Shares
resource "azurerm_storage_share" "shares" {
for_each = var.file_shares
name = each.value.name
storage_account_name = azurerm_storage_account.main.name
quota = each.value.quota
}
# Queues
resource "azurerm_storage_queue" "queues" {
for_each = var.queues
name = each.value.name
storage_account_name = azurerm_storage_account.main.name
}
# Tables
resource "azurerm_storage_table" "tables" {
for_each = var.tables
name = each.value.name
storage_account_name = azurerm_storage_account.main.name
}