Terraform で VPC Peering をやる
Terraform で VPC Peering をやる:
業務で VPC Peering する機会があったので記録として残す。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-peering.html
2つのVPCをつないでお互いに保有するリソースをあたかも同じネットワークに存在しているかのようにする機能。
アカウント、リージョンを跨ぎのピアリングも可能。
CIDRブロックが一致・重複していると VPC Peering を作成できない。
例えば、
この場合に、
下記より詳細に見ていく。
これは単に VPC を2つ立ててるだけ。
マネジメントコンソールから VPC Peering しようとすると accepter が、
ピアリングを受け入れるかどうか許可する手順が必要だが、
これは、VPCが同じAWSアカウントに所属している場合のみ有効。
それぞれの VPC にルートテーブルを定義して相互通信できるようしている。
片方だけ定義すれば一方通行な通信になる。
必要に応じて適切な通信プロトコルを許可するために定義する。
今回は省略している。
下記、ご参照いただきたい。
terraform plan, apply の実行は、 hashicorp が出している docker image を利用した。
わたしの fish terminal のエイリアスを参考までに貼っておく。
実行したいときは、下記のように使う。
業務で VPC Peering する機会があったので記録として残す。
https://docs.aws.amazon.com/ja_jp/vpc/latest/userguide/vpc-peering.html
VPC Peering おさらい
2つのVPCをつないでお互いに保有するリソースをあたかも同じネットワークに存在しているかのようにする機能。アカウント、リージョンを跨ぎのピアリングも可能。
制限事項(抜粋)
CIDRブロックが重複してちゃダメ
CIDRブロックが一致・重複していると VPC Peering を作成できない。
ピアリング先のVPCを経由した通信ができない
例えば、 vpc-a
と vpc-b
がピアリングしているのに加え、VPC-A
と vpc−c
がピアリングしているとする。この場合に、
vpc-b
と vpc-c
の相互通信をすることはできない。
Terraform で VPC Peering をやる
resource "aws_vpc" "vpc-a" { cidr_block = "10.0.0.0/16" tags { Name = "vpc-a" } } resource "aws_vpc" "vpc-b" { cidr_block = "10.1.0.0/16" tags { Name = "vpc-b" } } resource "aws_vpc_peering_connection" "op-connection" { peer_vpc_id = "${aws_vpc.vpc-a.id}" vpc_id = "${aws_vpc.vpc-b.id}" auto_accept = true tags { Name = "op-connection" } } resource "aws_route_table" "vpc-a-route-table" { vpc_id = "${aws_vpc.vpc-a.id}" route { cidr_block = "${aws_vpc.vpc-b.cidr_block}" vpc_peering_connection_id = "${aws_vpc_peering_connection.op-connection.id}" } tags { Name = "vpc-a-route-table" } } resource "aws_route_table" "vpc-b-route-table" { vpc_id = "${aws_vpc.vpc-b.id}" route { cidr_block = "${aws_vpc.vpc-a.cidr_block}" vpc_peering_connection_id = "${aws_vpc_peering_connection.op-connection.id}" } tags { Name = "vpc-b-route-table" } }
aws_vpc
これは単に VPC を2つ立ててるだけ。resource "aws_vpc" "vpc-a" { cidr_block = "10.0.0.0/16" tags { Name = "vpc-a" } } resource "aws_vpc" "vpc-b" { cidr_block = "10.1.0.0/16" tags { Name = "vpc-b" } }
aws_vpc_peering_connection
peer_vpc_id
には accepter となる VPC の id を、vpc_id
には requester となる VPC の id を指定する。マネジメントコンソールから VPC Peering しようとすると accepter が、
ピアリングを受け入れるかどうか許可する手順が必要だが、
auto_accept
を true
にしておくことでオート承認できるようにしている。これは、VPCが同じAWSアカウントに所属している場合のみ有効。
resource "aws_vpc_peering_connection" "op-connection" { peer_vpc_id = "${aws_vpc.vpc-a.id}" vpc_id = "${aws_vpc.vpc-b.id}" auto_accept = true tags { Name = "op-connection" } }
aws_route_table
それぞれの VPC にルートテーブルを定義して相互通信できるようしている。片方だけ定義すれば一方通行な通信になる。
resource "aws_route_table" "vpc-a-route-table" { vpc_id = "${aws_vpc.vpc-a.id}" route { cidr_block = "${aws_vpc.vpc-b.cidr_block}" vpc_peering_connection_id = "${aws_vpc_peering_connection.op-connection.id}" } tags { Name = "vpc-a-route-table" } } resource "aws_route_table" "vpc-b-route-table" { vpc_id = "${aws_vpc.vpc-b.id}" route { cidr_block = "${aws_vpc.vpc-a.cidr_block}" vpc_peering_connection_id = "${aws_vpc_peering_connection.op-connection.id}" } tags { Name = "vpc-b-route-table" } }
セキュリティーグループ
必要に応じて適切な通信プロトコルを許可するために定義する。今回は省略している。
その他の制限事項
下記、ご参照いただきたい。
Tips
terraform plan, apply の実行は、 hashicorp が出している docker image を利用した。わたしの fish terminal のエイリアスを参考までに貼っておく。
alias tf-aws 'docker run -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY -e AWS_DEFAULT_REGION -it -v $PWD:/app/ -w /app/ hashicorp/terraform:light'
plan
$ tf-aws plan
apply
$ tf-aws apply
コメント
コメントを投稿