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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.