Cloud VPN を使用して、ハブアンドスポーク ネットワークをデプロイする。

Last reviewed 2022-01-11 UTC

このチュートリアルでは、Cloud VPN を使用して Google Cloud でハブアンドスポーク ネットワークを設定する方法について説明します。

次の図では、デプロイするアーキテクチャを示します。これは 2 つのスポーク VPC ネットワークで構成され、各 VPC ネットワークは、IPSec VPN トンネルを使用する中央のハブ ネットワークに接続されています。

Cloud VPN を使用するハブアンドスポーク アーキテクチャ

このアーキテクチャと代替の設計の詳細については、ハブアンドスポーク ネットワーク アーキテクチャをご覧ください。

目標

Google が提供する Terraform テンプレートを使用して、Google Cloud で次のリソースをプロビジョニングします。

  • 3 つの VPC ネットワーク(1 つのネットワークをハブとして、残りの 2 つのネットワークをスポークとして指定)。
  • 各 VPC ネットワークに 2 つのサブネット(指定した 2 つのリージョンにそれぞれ 1 つ)。
  • 各 VPC ネットワークに対する一連のファイアウォール ルール。
  • スポーク VPC ネットワークごとの Cloud NAT ゲートウェイ。
  • 各スポーク VPC ネットワークに対するテスト用の Compute Engine インスタンス。
  • Compute Engine インスタンス用のサービス アカウント。
  • 各スポーク VPC ネットワークに属し、それぞれに 1 つのトンネルを持つ動的 Cloud VPN ゲートウェイ。
  • ハブ VPC ネットワーク内の 2 つの動的 Cloud VPN ゲートウェイとトンネル(各スポークにそれぞれ 1 つ)。
  • ハブ VPC ネットワークのプライベート Cloud DNS ゾーン。スポーク VPC ネットワークのプライベート Cloud DNS ゾーンとピアリングされています。

料金

このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。

料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。 新しい Google Cloud ユーザーは無料トライアルをご利用いただける場合があります。

このドキュメントに記載されているタスクの完了後、作成したリソースを削除すると、それ以上の請求は発生しません。詳細については、クリーンアップをご覧ください。

始める前に

  1. 既存のプロジェクトにリソースをデプロイするか、Terraform で作成される新しいプロジェクトにデプロイするかを決定します。

  2. 必要な権限を取得します。

    指定された Terraform テンプレートを使用してリソースを作成し管理するには、Google アカウントまたはサービス アカウントに次の Identity and Access Management(IAM)ロールが必要です。

    • Compute 管理者(roles/compute.admin
    • サービス アカウント管理者(roles/iam.serviceAccountAdmin
    • プロジェクト IAM 管理者(roles/resourcemanager.projectIamAdmin
    • Service Usage 管理者(roles/serviceusage.serviceUsageAdmin
    • DNS 管理者(roles/dns.admin
    • プロジェクト作成者(roles/resourcemanager.projectCreator)(新しいプロジェクトにリソースをデプロイするために必要です)

    必要な権限を付与されていない場合、または不明な場合は、組織の管理者にお問い合わせください。

  3. (省略可)Terraform が作成する新しいプロジェクトにリソースをデプロイする場合は、この手順をスキップします。

    既存のプロジェクトや作成したプロジェクトを使用するには、次の手順を行います。

    1. Google Cloud Console の [プロジェクト セレクタ] ページで、Google Cloud プロジェクトを選択または作成します。

      プロジェクト セレクタに移動

    2. Google Cloud プロジェクトで課金が有効になっていることを確認します

    3. Compute Engine, Cloud DNS, Resource Manager, Service Usage, and IAM API を有効にします。

      API を有効にする

環境の準備

このチュートリアルでは、Cloud Shell またはローカルホストを使用します。Cloud Shell には Terraform がプリインストールされ、Google Cloud で認証を行うように設定されます。

Cloud Shell を使用するには

  • Cloud Shell で Terraform のサンプル テンプレートをダウンロードして開きます。

    Cloud Shell で開く

    Cloud Shell が別のブラウザタブで起動し、Cloud Shell 環境の「$HOME/cloudshell_open」ディレクトリに Terraform のサンプル テンプレートがダウンロードされます。

ローカルホストを使用するには

次の手順を行います。

  1. Terraform バージョン 0.13.0 以降をインストールします

  2. Google Cloud 用の Terraform のサンプルとモジュールから Terraform のサンプル テンプレートをダウンロードします。

  3. 認証を設定します。

    1. サービス アカウントを作成します。

      gcloud iam service-accounts create SERVICE_ACCOUNT_NAME

      SERVICE_ACCOUNT_NAME をサービス アカウントの名前に置き換えます。

    2. サービス アカウントに roles/owner IAM ロールを付与します。

      gcloud projects add-iam-policy-binding PROJECT_ID --member="serviceAccount:SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com" --role=roles/owner

      次のように置き換えます。

      • SERVICE_ACCOUNT_NAME: サービス アカウントの名前
      • PROJECT_ID: サービス アカウントを作成したプロジェクト ID
    3. 鍵ファイルを生成します。

      gcloud iam service-accounts keys create FILE_NAME.json --iam-account=SERVICE_ACCOUNT_NAME@PROJECT_ID.iam.gserviceaccount.com

      次のように置き換えます。

      • FILE_NAME: 鍵ファイルの名前
      • SERVICE_ACCOUNT_NAME: サービス アカウントの名前
      • PROJECT_ID: サービス アカウントを作成したプロジェクト ID
  4. 環境変数 GOOGLE_APPLICATION_CREDENTIALS を設定して、アプリケーション コードに認証情報を指定します。この変数は、現在のシェル セッションにのみ適用されます。この変数を新しいシェル セッションに適用する場合は、シェル起動ファイル(~/.bashrc ファイルや ~/.profile ファイルなど)で変数を設定します。

    Linux または macOS

    export GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

    KEY_PATH は、認証情報が含まれる JSON ファイルのパスに置き換えます。

    例:

    export GOOGLE_APPLICATION_CREDENTIALS="/home/user/Downloads/service-account-file.json"

    Windows

    PowerShell の場合:

    $env:GOOGLE_APPLICATION_CREDENTIALS="KEY_PATH"

    KEY_PATH は、認証情報が含まれる JSON ファイルのパスに置き換えます。

    例:

    $env:GOOGLE_APPLICATION_CREDENTIALS="C:\Users\username\Downloads\service-account-file.json"

    コマンド プロンプトの場合:

    set GOOGLE_APPLICATION_CREDENTIALS=KEY_PATH

    KEY_PATH は、認証情報が含まれる JSON ファイルのパスに置き換えます。

Terraform 変数の構成

ダウンロードした Terraform コードには、要件に基づいてデプロイをカスタマイズするために使用できる変数が含まれています。たとえば、サブネット CIDR 範囲を調整し、リソースをデプロイするプロジェクトを指定できます。

  1. ローカルホストまたは Cloud Shell にダウンロードしたコードで、blueprints/networking/hub-and-spoke-peering サブディレクトリに移動します。

    cd blueprints/networking/hub-and-spoke-vpn
    
  2. variables.tf ファイルを開きます。

    このファイルでは、Terraform 構成の入力変数が宣言されています。一部の変数には default 値があります。

  3. 値を割り当てる必要がある変数を特定します。

    • デフォルト値がない変数(例: project_id)。
    • 変更するデフォルト値がある変数。

      たとえば、ip_ranges にはデフォルトの CIDR 範囲がありますが、デプロイには別の範囲を使用することが必要な場合があります。

    識別した変数ごとに description を確認して、type をメモします。

  4. terraform.tfvars という名前のテキスト ファイルを作成します。

  5. terraform.tfvars ファイルで、以前に特定した変数に適切な値を割り当てます。

    例:

    ip_ranges = {
      hub-a     = "10.0.0.0/24"
      hub-b     = "10.0.8.0/24"
      spoke-1-a = "10.0.16.0/24"
      spoke-1-b = "10.0.24.0/24"
      spoke-2-a = "10.0.32.0/24"
      spoke-2-b = "10.0.40.0/24"
    }
    
    project_id = "my-project"
    
    regions = {
      a = "us-central1"
      b = "us-west1"
    }
    
  6. Terraform を初期化します。

    terraform init
    

    次のメッセージが表示されるまで待ちます。

    Terraform has been successfully initialized!
    
  7. 構成にエラーがないことを確認します。

    terraform validate
    

    コマンドからエラーが返される場合は、構成で必要な修正を行い、terraform validate を再度実行します。

    コマンドで次のメッセージが返されるまで、この手順を繰り返します。

    Success! The configuration is valid.
    
  8. 構成で定義されているリソースを確認します。

    terraform plan
    

    出力には、構成を適用したときに Terraform でプロビジョニングされたリソースが一覧表示されます。

    変更する場合は、構成を編集してから、terraform validateterraform plan を再度実行します。

リソースのプロビジョニング

構成にこれ以上の変更が必要ない場合は、リソースをデプロイします。

  1. 次のコマンドを実行します。

    terraform apply
    

    作成されるリソースのリストが Terraform で表示されます。

  2. アクションの実行を求めるメッセージが出力されたら、「yes」と入力します。

    Terraform で API が有効になっていないことを示すエラー メッセージが表示される場合は、メッセージに表示されている各リンクを使用して必要な API を有効にします。

    Terraform でデプロイの進行状況を示すメッセージが表示されます。すべてのリソースが作成されると、Terraform によって次のメッセージが表示されます。

    Apply complete!
    

これで、Google Cloud にハブアンドスポーク ネットワークをデプロイできました。

リソースの追加、変更、削除

リソースを追加、変更、削除するには、Terraform 構成を編集してから、コマンド terraform validateterraform planterraform apply をこの順序で実行します。

クリーンアップ

このチュートリアルで作成したリソースについて、Google Cloud アカウントに課金されないようにするには、不要なリソースをすべて削除します。

  1. 次のコマンドを実行します。

    terraform destroy
    

    Terraform によって、破棄されるリソースのリストが表示されます。

  2. アクションの実行を求めるメッセージが出力されたら、「yes」と入力します。

    Terraform によって、進行状況を示すメッセージが表示されます。すべてのリソースが削除されると、Terraform によって次のメッセージが表示されます。

    Destroy complete!
    

次のステップ