Terraform を使用して Azure でハブ スポーク ハイブリッド ネットワーク トポロジを作成する

Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。

この記事シリーズでは、Azure で Terraform を使用して、ハブ スポーク ネットワーク トポロジを実装する方法を示します。

ハブ スポーク トポロジは、一般的なサービスを共有しながらワークロードを分離する方法です。 これらのサービスには、ID とセキュリティが含まれます。 ハブは、オンプレミス ネットワークへの中心となる接続ポイントとして機能する仮想ネットワーク (VNet) です。 スポークはハブとピア接続する Vnet です。 共有サービスはハブにデプロイされ、個々のワークロードはスポーク ネットワークにデプロイされます。

この記事では、次のことについて説明します。

  • ハブ スポーク ハイブリッド ネットワーク参照アーキテクチャ リソースをレイアウトする
  • ハブ ネットワーク アプライアンス リソースを作成する
  • Azure にすべてのリソースの共通ポイントとして機能するハブ ネットワークを作成する
  • Azure に個々のワークロードをスポーク VNet として作成する
  • オンプレミスと Azure ネットワークの間にゲートウェイと接続を確立する
  • スポーク ネットワークへの VNet ピアリングを作成する

1. 環境を構成する

  • Azure サブスクリプション:Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。

2. ハブ スポーク トポロジ アーキテクチャを理解する

ハブ スポーク トポロジでは、ハブは VNet になります。 VNet は、オンプレミス ネットワークの中心となる接続ポイントとして機能します。 スポークは、ハブに対して配置される VNet であり、ワークロードを分離するために使用されます。 トラフィックは、ExpressRoute または VPN ゲートウェイ接続を経由してオンプレミスのデータセンターとハブの間を流れます。 次の図は、ハブ スポーク トポロジのコンポーネントを示しています。

Hub and spoke topology architecture in Azure

ハブ スポーク トポロジの利点

ハブ スポーク ネットワーク トポロジは、一般的なサービスを共有しながらワークロードを分離する方法です。 これらのサービスには、ID とセキュリティが含まれます。 ハブは、オンプレミス ネットワークへの中心となる接続ポイントとして機能する VNet です。 スポークはハブとピア接続する Vnet です。 共有サービスはハブにデプロイされ、個々のワークロードはスポーク ネットワークにデプロイされます。 ハブ スポーク ネットワーク トポロジのいくつかの利点を次に示します。

  • コストの削減: 複数のワークロードによって共有できる単一の場所にサービスを一元化します。 これらのワークロードには、ネットワーク仮想アプライアンスと DNS サーバーが含まれます。
  • サブスクリプション数の上限の解消: 中央のハブに別のサブスクリプションから VNet をピアリングします。
  • 問題の分離: 中央の IT (SecOps、InfraOps) とワークロード (DevOps) の間で実施します。

ハブ スポーク アーキテクチャの一般的な用途

ハブ スポーク アーキテクチャの一般的な用途の一部を次に示します。

  • 多くのお客様には、さまざまな環境にデプロイされているワークロードがあります。 これらの環境には、開発、テスト、および運用環境が含まれます。 多くの場合、これらのワークロードでは、DNS、IDS、NTP、AD DS などのサービスを共有する必要があります。 これらの共有サービスをハブ VNet に配置できます。 この方法で、各環境をスポークにデプロイして、分離を維持します。
  • 相互接続は必要ないが、共有サービスへのアクセスは必要なワークロード。
  • セキュリティ面の一元管理を必要とする企業。
  • 各スポークでワークロードの分別管理を必要とする企業。

3. デモ コンポーネントをプレビューする

このシリーズの各記事を進めていくときに、さまざまなコンポーネントを個別の Terraform スクリプトで定義します。 作成してデプロイするデモ アーキテクチャは、次のコンポーネントで構成されます。

  • オンプレミス ネットワーク。 組織内で運用されているプライベート ローカル エリア ネットワーク。 ハブ スポーク参照アーキテクチャでは、Azure 上の VNet を使用してオンプレミス ネットワークがシミュレートされます。

  • VPN デバイス: VPN デバイスまたはサービスによって、オンプレミス ネットワークへの外部接続が提供されます。 VPN デバイスは、ハードウェア アプライアンスまたはソフトウェア ソリューションが可能です。

  • ハブ VNet。 ハブは、オンプレミス ネットワークの中心となる接続ポイントであり、サービスをホストする場所です。 スポーク VNet でホストされているさまざまなワークロードで、これらのサービスを使用できます。

  • ゲートウェイ サブネット: VNet ゲートウェイは、同じサブネット内に保持されます。

  • スポーク VNet: スポークを使用すると、独自の VNet にワークロードを分離して、その他のスポークから個別に管理できます。 各ワークロードには複数の階層が含まれる場合があります。これらの階層には、Azure ロード バランサーを使用して接続されている複数のサブネットがあります。

  • VNet ピアリング: ピアリング接続を使用して、2 つの VNet を接続できます。 ピアリング接続は、VNet 間の非推移的な低遅延の接続です。 ピアリングが完了すると、VNet では、ルーターがなくても Azure バックボーンを使用してトラフィックを交換します。 ハブ スポーク ネットワーク トポロジでは、VNet ピアリングを使用して、ハブを各スポークに接続します。 同じリージョンまたは異なるリージョンの VNet をピアリングできます。

4. Terraform コードを実装する

  1. 複数の記事シリーズ全体のコード例を含むディレクトリを作成します。

  2. main.tf という名前のファイルを作成し、次のコードを挿入します。

    terraform {
    
      required_version = ">=0.12"
    
      required_providers {
        azurerm = {
          source  = "hashicorp/azurerm"
          version = "~>2.0"
        }
      }
    }
    
    provider "azurerm" {
      features {}
    }
    
  3. プロジェクト変数を格納する variables.tf という名前のファイルを作成し、次のコードを挿入します。

    variable "location" {
        description = "Location of the network"
        default     = "eastus"
    }
    
    variable "username" {
        description = "Username for Virtual Machines"
        default     = "azureuser"
    }
    
    variable "password" {
        description = "Password for Virtual Machines"
    }
    
    variable "vmsize" {
        description = "Size of the VMs"
        default     = "Standard_DS1_v2"
    }
    

    重要なポイント:

    • この記事では、terraform plan を呼び出すときに入力するパスワードを使用します。 実際のアプリでは、SSH の公開/秘密キーの組を使用することを検討してください。
    • SSH キーと Azure の詳細については、「Azure 上の Windows で SSH キーを使用する方法」を参照してください。

Azure での Terraform のトラブルシューティング

Azure で Terraform を使用する場合の一般的な問題のトラブルシューティング

次のステップ