Terraform Multiple Providerを使って複数のAzureサブスクリプションを使い分ける

 Terraformを使ったAzureリソースのデプロイをサブスクリプションを指定してできないかなと調べていたら、Multiple Providerを利用すると複数サブスクリプションを扱える事が分かりました。

Multiple Provider

 今回はMultiple Providerの設定を使い、2つのAzureサブスクリプションにリソースグループを作成してみました。公式サイトの情報を参照しながら設定を試してみました。

Provider Configuration
Configuring Azure CLI authentication in Terraform
The resource provider Meta-Argument

 Terraform初心者が色々やってみた内容を公開しています。過去のTerraform関連の記事はこちらに記載しております。

Terraformの記事一覧

スポンサーリンク

Terraform Multiple Providerとは

 Multiple Providerとは同じプロバイダーに対して複数の構成を定義する事を言います。リソースやモジュール別に使用する構成を指定する事が出来ます。

providerとは

 provider はTerraformがリソースを作成および管理するために使用するプラグインです。provider blockを使って設定します。Azureのproviderを指定する事でAzureのリソースを扱う事が出来ます。

Azureの場合のprovider記述例
provider “azurerm" {
 features {}
}

Multiple Providerとは

 aliasを指定する事で1つのTerraform構成で複数のproviderを設定できる機能になります。

Multiple Provider設定して複数のAzureサブスクリプションにデプロイ

 Multiple Provider設定を使って2つのサブスクリプションにリソースグループをデプロイしてみます。

Multiple Providerを使ってAzureサブスクリプションを指定

 provider設定で使用するAzureサブスクリプションを指定する事が出来ます。
 provider blockにaliasを作成します。aliasに別サブスクリプションを指定する事で複数のサブスクリプションを扱う事が出来るようになります。  

Azureで複数サブスクリプションを指定する場合のprovider記述例

provider “azurerm" {
  subscription_id = “123456789-1234-1234-1234-123456789012"
  features {}
}

provider “azurerm" {
 features {}
  alias = “Sub-id"
  subscription_id = “ABCDEFGHI-JKLM-NOPQ-RSTU-VWXYZ0123456"
}

 ※今回はサブスクリプションを指定していますが、リージョンやリソース単位と言った設定も可能だそうです。

2つのサブスクリプションにそれぞれリソースグループをデプロイ

2つのサブスクリプションにAzureリソースグループをデプロイしてみます。
サブのproviderにデプロイする為には、resource block内でproviderの指定を行います。

    • デプロイ内容
      • メインのサブスクリプションにrg-multiple-mainというリソースグループをデプロイ
      • サブのサブスクリプションにrg-multiple-subというリソースグループをデプロイ
    • 設定内容
      • provider blockでメイン、サブそれぞれのsubscription_idを指定
      • aliasにSub-idを指定したprovider blockを追加
      • サブにデプロイするresource にprovider = azurerm.Sub-idを追加
2つのサブスクリプションにリソースグループをデプロイ
terraform {
 required_version = “>= 1.0.0"
 required_providers {
  azurerm = {
   source = “hashicorp/azurerm"
   version = “>= 2.0"
  }
 }
}

provider “azurerm" {
    subscription_id = “123456789-1234-1234-1234-123456789012"
 features {
 }
}

provider “azurerm" {
 features {
 }
    alias = “Sub-id"
    subscription_id = “ABCDEFGHI-JKLM-NOPQ-RSTU-VWXYZ0123456"
}

resource “azurerm_resource_group" “rg-main" {
  name = “rg-multiple-main"
  location = “East US2"
 }

resource “azurerm_resource_group" “rg-sub" {
  provider = azurerm.Sub-id
  name = “rg-multiple-sub"
  location = “East US2"
}

Terraform Showを使ってデプロイしたリソースグループを確認

 デプロイ後にTerraform Showコマンドを使ってデプロイされたAzureリソースグループを確認してみます。
 Terraform Showコマンドはデプロイ状態(tfstate)を確認するコマンドになります。Terraform Showコマンドの詳細はこちら

Terraform Showの確認結果

# azurerm_resource_group.rg-main:
resource “azurerm_resource_group" “rg-main" {
id = “/subscriptions/123456789-1234-1234-1234-123456789012/resourceGroups/rg-multiple-main"
location = “eastus2"
name = “rg-multiple-main"
}

# azurerm_resource_group.rg-sub:
resource “azurerm_resource_group" “rg-sub" {
id = “/subscriptions/ABCDEFGHI-JKLM-NOPQ-RSTU-VWXYZ0123456/resourceGroups/rg-multiple-sub"
location = “eastus2"
name = “rg-multiple-sub"
}

2つのサブスクリプションにそれぞれリソースグループがデプロイされている事が分かりました。

最後に

 provider blockにサブスクリプションIDを指定するだけでとても簡単に複数のAzureサブスクリプションを使い分ける事が出来ました。providerの設定を使うともっと色々な事が出来るようなので今後も色々試してみたい所です。

 過去のTerraform関連の記事はこちらに記載しております。

Terraformの記事一覧