diff --git a/infrastructure/modules/storage/main.tf b/infrastructure/modules/storage/main.tf index d2d9cde2..26ad4000 100644 --- a/infrastructure/modules/storage/main.tf +++ b/infrastructure/modules/storage/main.tf @@ -80,6 +80,25 @@ resource "azurerm_storage_queue" "queue" { depends_on = [module.private_endpoint_queue_storage] } +resource "azurerm_storage_object_replication" "object_replication" { + for_each = local.containers_with_replication + + source_storage_account_id = azurerm_storage_account.storage_account.id + destination_storage_account_id = each.value.object_replication.destination_storage_account_id + + rules { + source_container_name = each.value.object_replication.source_container_name + destination_container_name = each.value.object_replication.destination_container_name + } +} + +locals { + containers_with_replication = { + for key, container in var.containers : + key => container + if container.object_replication != null + } +} /* -------------------------------------------------------------------------------------------------- Private Endpoint Configuration diff --git a/infrastructure/modules/storage/tfdocs.md b/infrastructure/modules/storage/tfdocs.md index 794cc8e2..5ae92187 100644 --- a/infrastructure/modules/storage/tfdocs.md +++ b/infrastructure/modules/storage/tfdocs.md @@ -6,7 +6,7 @@ The following input variables are required: ### [containers](#input\_containers) -Description: Definition of Storage Containers configuration, including optional immutability policy settings. +Description: Definition of Storage Containers configuration, including optional immutability policy and object replication settings. Type: @@ -20,6 +20,11 @@ map(object({ protected_append_writes_all_enabled = optional(bool, false) protected_append_writes_enabled = optional(bool, false) })) + object_replication = optional(object({ + source_container_name = string + destination_storage_account_id = string + destination_container_name = string + }), null) })) ``` @@ -347,5 +352,6 @@ The following resources are used by this module: - [azurerm_storage_account.storage_account](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_account) (resource) - [azurerm_storage_container.container](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_container) (resource) - [azurerm_storage_container_immutability_policy.policy](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_container_immutability_policy) (resource) +- [azurerm_storage_object_replication.object_replication](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_object_replication) (resource) - [azurerm_storage_queue.queue](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/resources/storage_queue) (resource) - [azurerm_client_config.current](https://registry.terraform.io/providers/hashicorp/azurerm/latest/docs/data-sources/client_config) (data source) diff --git a/infrastructure/modules/storage/variables.tf b/infrastructure/modules/storage/variables.tf index 3e3318eb..2b5a9160 100644 --- a/infrastructure/modules/storage/variables.tf +++ b/infrastructure/modules/storage/variables.tf @@ -54,7 +54,7 @@ variable "blob_properties_versioning_enabled" { } variable "containers" { - description = "Definition of Storage Containers configuration, including optional immutability policy settings." + description = "Definition of Storage Containers configuration, including optional immutability policy and object replication settings." type = map(object({ container_name = string container_access_type = string @@ -64,6 +64,11 @@ variable "containers" { protected_append_writes_all_enabled = optional(bool, false) protected_append_writes_enabled = optional(bool, false) })) + object_replication = optional(object({ + source_container_name = string + destination_storage_account_id = string + destination_container_name = string + }), null) })) }