コンテンツにスキップ

vpc_peering pattern

概要

vpc_peering patternモジュールでは、異なるVPC間を接続するVPCピアリングを設定します。

想定する適用対象環境

vpc_peering patternは、Delivery環境およびRuntime環境のいずれでも使用されることを想定しています。

依存するpattern

vpc_peering patternは、事前に以下のpatternが適用されていることを前提としています。また、network patternにより複数のVPCが作成されていることを前提とします。なお、接続するVPCは異なるCIDRである必要があります。

pattern名 利用する情報
network pattern VPC ID

構築されるリソース

このpatternでは、以下のリソースが構築されます。

リソース名 説明
Peering connection 異なるVPCを相互に接続できます。

モジュールの理解に向けて

vpc_peering patternでは異なる2つのVPCを接続するVPCピアリングを構築します。 たとえば、サービス用のVPCと仮想セキュアルーム用のVPCを分ける場合にVPCピアリングを行います。 VPCピアリングの全体像は以下の通りです。

全体像

この内、vpc_peering patternは以下図の通りVPCピアリングの部分のみを構築します。 VPCピアリングはピアリング要求をするVPCとピアリングを承諾するVPCの2つのVPC IDを指定して行います。 ピアリング要求をするVPCのことをリクエスタVPC、ピアリングを承諾するVPCのことをアクセプタVPCと呼びます。 リクエスタVPCとアクセプタVPCでとくに動作の違いはありません。 VPCピアリングは異なるAWSアカウント(クロスアカウント)や異なるリージョン(クロスリージョン)のVPC同士を繋げることもできます。 しかし、eponaで提供するvpc_peering patternは同一アカウント、同一リージョンのみを想定した実装になっています。

vpc_peering

ルートテーブルの設定について

VPCピアリングを作成した後、以下図の通り各VPC内で接続先VPCへのルーティングを設定する必要があります。 この設定はnetwork patternpeering_idpeering_cidrを指定して行います。 peering_idvpc_peering patternのoutputで出力されるpeering_idを指定します。 peering_cidrは接続先VPCのCIDRを指定します。 このルーティング設定はピア接続する相互のVPCに行ってください。

network

つまり、vpc_peering patternは前後にnetwork patternの実行が必要です。 以下の流れで設定します。

  • network patternをapply(2つ以上のVPCを作成)
  • vpc_peering patternをapply(outputされるpeering_idを確認)
  • network patternを再apply(各VPCにpeering_idおよびpeering_cidrを設定)

3つ以上のVPCを接続する場合の注意

3つ以上のVPCを接続する場合は注意が必要です。 VPCピアリングの仕様として、ピアリングは直接する必要があります。 たとえばA、B、Cの3つのVPCを相互に接続したい場合、以下図の悪い例のようにA-BとB-Cのピア接続だけだとA-Cの接続はできません。 この場合は以下図の良い例のようにA-B、B-Cに加え、A-Cのピアリングも設定します。

⚠️ 現在eponaで提供するvpc_peering patternは1対1のピアリングにしか対応していません。今後の機能拡張で複数ピアにも対応予定です。

triple

アクセス制限について

各VPC内のアクセス制限はセキュリティグループなどで設定してください。 たとえば、仮想セキュアルーム用VPC内のWorkSpacesからサービス用VPC内のRDSへ接続する場合を考えます。 この場合はサービス用VPCのRDSに適用しているセキュリティグループのインバウンドで仮想セキュアルーム用VPCのCIDR(または、プライベートサブネットのCIDR)を許可します。 このようなアクセス許可の設定はvpc_peering patternではなく、各patternモジュールで設定します。

サンプルコード

vpc_peering patternを使用したサンプルコードを、以下に記載します。 また、VPCピアリングを設定する場合のnetwork patternのサンプルコードも記載します。

vpc_peering pattern

module "vpc_peering" {
  source = "git::https://gitlab.com/eponas/epona.git//modules/aws/patterns/vpc_peering?ref=v0.2.6"

  tags = {
    env = "production"
  }

  name             = "secureroom-service-peering"
  requester_vpc_id = data.terraform_remote_state.network.outputs.secureroom.vpc_id
  accepter_vpc_id  = data.terraform_remote_state.network.outputs.service.vpc_id
}

network pattern

以下サンプルコードではpeering_idをremote_stateから読み込む想定の指定です。 この場合、instance_dependencies.tfを作成することになります。 しかし、network patternの初回実行時はinstance_dependencies.tfでremote_stateを定義しないでください。 network patternの初回実行時はvpc_peering patternをまだ実行していないため、エラーで実行できなくなってしまいます。 vpc_peering pattern実行後にinstance_dependencies.tfの定義と下記サンプルコードの様にpeering_idpeering_cidrを指定ください。

module "secureroom" {
  source = "git::https://gitlab.com/eponas/epona.git//modules/aws/patterns/network?ref=v0.2.6"

  name = "secureroom-runtime-production-network"

  cidr_block = "10.81.0.0/16"

  availability_zones = ["ap-northeast-1a", "ap-northeast-1c"]

  public_subnets             = ["10.81.10.0/24", "10.81.20.0/24"]
  private_subnets            = ["10.81.30.0/24", "10.81.40.0/24"]
  nat_gateway_deploy_subnets = ["10.81.10.0/24", "10.81.20.0/24"]

  # peering関連のパラメータはvpc_peering pattern実行後に設定する。
  # vpc_peering pattern実行前は以下パラメータをコメントアウトにする。
  peering_id   = data.terraform_remote_state.vpc_peering.outputs.vpc_peering.peering_id
  peering_cidr = "10.82.0.0/16"
}

module "service" {
  source = "git::https://gitlab.com/eponas/epona.git//modules/aws/patterns/network?ref=v0.2.6"

  name = "service-runtime-production-network"

  cidr_block = "10.82.0.0/16"

  availability_zones = ["ap-northeast-1a", "ap-northeast-1c"]

  public_subnets             = ["10.82.10.0/24", "10.82.20.0/24"]
  private_subnets            = ["10.82.30.0/24", "10.82.40.0/24"]
  nat_gateway_deploy_subnets = ["10.82.10.0/24", "10.82.20.0/24"]

  # peering関連のパラメータはvpc_peering pattern実行後に設定する。
  # vpc_peering pattern実行前は以下パラメータをコメントアウトにする。
  peering_id   = data.terraform_remote_state.vpc_peering.outputs.vpc_peering.peering_id
  peering_cidr = "10.81.0.0/16"
}

関連するpattern

vpc_peering patternに関連するpatternを、以下に記載します。

pattern名 説明
network ネットワークをデプロイするパターン

入出力リファレンス

Requirements

Name Version
terraform ~> 0.14.10
aws >= 3.37.0, < 4.0.0

Inputs

Name Description Type Default Required
accepter_vpc_id ピアリングを承諾するVPC(アクセプタ)のID string n/a yes
name VPCピアリングの名前 string n/a yes
requester_vpc_id ピアリングを要求するVPC(リクエスタ)のID string n/a yes
tags VPCピアリングに関するリソースに、共通的に付与するタグ map(string) {} no

Outputs

Name Description
peering_id VPCピアリングのID

※ このドキュメントはクリエイティブコモンズ(Creative Commons) 4.0 の「表示—継承」に準拠しています。

※ このドキュメントに記載されている会社名、製品名は、各社の登録商標または商標です。

© 2021 TIS Inc.