LoginSignup
9
4

More than 3 years have passed since last update.

CloudNATをTerraformでつくる

Last updated at Posted at 2020-05-01

Cloud NAT is 何

Cloud NATはGCPのサービスのひとつであるクラウドNAT(Network Address Translation)である。

プライベートなネットワークを作成した時に、ネットワーク内からインターネットに接続するために作成する。
これによって外部IPを持たないGCEインスタンスやGKEクラスタがインターネットと安全に接続し、パケットを損失せずに受け取ることが出来る。

他社の類似サービスとしてAWS NAT ゲートウェイが挙げられるが、ちょっと概念と使い方が異なるので注意。

いざ、Terraform化

Terraformで記述する場合、3つのリソースを組み合わせてCloud NATを作成する。

またそもそもCloud NATを設置する前に、Cloud NATを設置するネットワークも必要。

それぞれTerraformで作成する。

まずはネットワークから。

resource "google_compute_network" "test_network" {
  name                            = test-network
  project                         = var.project_id
  auto_create_subnetworks         = false 
  delete_default_routes_on_create = false
}

auto_create_subnetworks=true にすると各リージョンに 10.128.0.0/9 の範囲から自動的にサブネットワークが生成される。

またdelete_default_routes_on_create=trueにすると、ネットワーク生成後にデフォルトのルート(0.0.0.0/0)が削除される。

ここで注意点があるが、ネットワーク周りの命名(上記でいうとtest-network)はRFCに則る必要があるのでリソース名にアンスコ( _ )を入れることが出来ない。ここぞというばかりにエラーで怒られる。Terraform上のリソース名(上記でいうと test_network )はアンスコが入っていても問題ない。

次にNATルーターを作成する。


resource "google_compute_router" "nat_router" {
  name    = "nat-router"
  project = var.project_id
  region  = var.region
  network = google_compute_network.network.self_link
}

networkに先程作ったネットワークのself_linkを貼る。

次にNATアドレス。

resource "google_compute_address" "nat_address" {
  name    = "nat-address"
  project = var.project_id
  region  = var.region
}

最後にNATを作成する。

resource "google_compute_router_nat" "nat" {
  name                               = "nat"
  project                            = var.project_id
  region                             = var.region
  router                             = google_compute_router.nat_router.name
  nat_ip_allocate_option             = "AUTO_ONLY"
  source_subnetwork_ip_ranges_to_nat = "ALL_SUBNETWORKS_ALL_IP_RANGES"
}

nat_ip_allocate_optionは AUTO_ONLYMANUAL_ONLY を渡す。
AUTO_ONLYの場合、NATに割り振る外部IPアドレスをGCPが自動で調整してくれる。MANUAL_ONLYの場合はそれをユーザがやることになる。

source_subnetwork_ip_ranges_to_natはサブネットワークごとにNATをどのような設定にする。
ALL_SUBNETWORKS_ALL_IP_RANGES は各サブネットワーク内の全てのIP範囲をNATに許可する。
ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES は各サブネットワークの全てのプライマリIP範囲をNATに許可する。

nat_ip_allocate_option=MANUAL_ONLYにするともう少し設定を書く必要があるが、詳しくはこちら

9
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
4