Gleichzeitige Nutzung mehrerer gleicher Provider Konfigurationen in einem Terraform Projekt
Provider Konfiguration
Es ist nicht ungewöhnlich, dass man mit einem Terraform Projekt die Ressourcen mehrerer Azure Subscriptions verwaltet. Dazu können in der entsprechenden Konfigurationsdatei mehrere Provider des gleichen Typs angelegt werden. Um die Provider zu unterscheiden, muss im entsprechenden Provider Block ein alias
Parameter angegeben werden. Verwendet man bei einem Provider keinen Alias, so ist dieser der Default-Provider.
# Provider for Default Subscription provider "azurerm" { tenant_id = "<Tenant ID>" subscription_id = "<ID of Subscription>" skip_provider_registration = true features { } # Provider for additional Subscription 1 provider "azurerm" { alias = "subscription-01-provider" tenant_id = "<Tenant ID>" subscription_id = "<ID of Subscription 1>" skip_provider_registration = true features { } } # Provider for additional Subscription 2 provider "azurerm" { alias = "subscription-02-provider" tenant_id = "<Tenant ID>" subscription_id = "<ID of Subscription 2>" skip_provider_registration = true features { }
Resource/Data Konfiguration
Natürlich muss nun auch in den jeweiligen resource
und data
Blöcken angegeben werden, welcher Provider (also welche Subscription) jeweils verwendet werden soll, wenn man nicht den Default Provider verwendet. Im folgenden Beispiel frage ich eine Management Group ab, die dem Default Provider zugeordnet ist und legen je eine Resource Group pro zusätzlichem Provider an.
data "azurerm_management_group" "tenantroot" { name = "<ID of Management Group>" } resource "azurerm_resource_group" "rg_s01" { provider = "azurerm.subscription-01-provider" name = var.rg_s01_name location = var.location } resource "azurerm_resource_group" "rg_s02" { provider = "azurerm.subscription-02-provider" name = var.rg_s02_name location = var.location }
Module
Wenn das Terraform Projekt Module verwendet und initialisiert hat können die Provider-Werte als unterschiedliche Provider-Objekte an die Module durchgereicht werden.
module "<Module-Name>" { source = "<Module-Path>" providers = { azurerm = azurerm azurerm.subscription-01-provider = azurerm.subscription-01-provider azurerm.subscription-02-provider = azurerm.subscription-02-provider } }
Nachträgliche Anpassung
Hat man sein Projekt mit einem Provider angefangen und möchte nun einen zweiten Provider des gleichen Typs hinzufügen, so ist auch das möglich. Dafür müssen einfach die o.g. Anpassungen am Code hinzugefügt werden.