🌚

【チートシート】Terraform で Google Cloud の IP アドレスを使いこなす

2024/10/17に公開

はじめに

クラウドエース株式会社 第二開発部の坂本です。
Terraform で Google Cloud のリソースを作成する際に、IP アドレスが必要になることがあります。
例えば、Compute Engine インスタンスに固定のグローバル IP アドレスを割り当てたり、ロードバランサのフロントエンドにグローバル IP アドレスを設定したりする場合などです。
その際に、毎回 IP アドレスのリソースを Hashicorp のドキュメントを見て調べているのですが、 ドキュメントが少しわかりづらいと感じたため備忘録としてまとめました。

現状、 Terraform の hashicorp/google プロバイダには以下の二つの IP アドレスリソースが存在します。

一見、ローカル IP アドレス と グローバル IP アドレスの違いに見えますが、そうではありません。

本記事では、この二つのリソースについて詳しく見ていきましょう。

対象読者

  • Google Cloud の IP アドレスの種類について知りたい方
  • Terraform で Google Cloud の IP アドレス を構築する際にどのリソースを使用すればいいか知りたい方

扱う内容

  • Google Cloud の IP アドレスの種類
  • google_compute_addressgoogle_compute_global_address の違い
  • それぞれを使用することで作成できる IP アドレスの種類
  • 各 Google Cloud リソース を作る時にどちらを使えばいいか

Google Cloud の IP アドレスの種類

Terraform について見ていく前に、まずは Google Cloud の公式ドキュメントを見てみます。
ドキュメントによると、 IP アドレスは以下の 7 種類が存在します。

  • リージョン内部 IPv4 アドレス
  • リージョン内部 IPv6 アドレス
  • グローバル内部 IPv4 アドレス
  • リージョン外部 IPv4 アドレス
  • リージョン外部 IPv6 アドレス
  • グローバル外部 IPv4 アドレス
  • グローバル外部 IPv6 アドレス

これをみると、 Google Cloud の IP アドレスというリソースは以下のような分類ができそうです。

  • 外部 / 内部
  • リージョン / グローバル
  • IPv4 / IPv6

以上を踏まえて、 Terraform のリソースを見ていきます。

google_compute_address(リージョンに限定した用途)

google_compute_address は前セクションで挙げた中の、以下 4 種類のリソースを作成することができます。

  • リージョン内部 IPv4 アドレス
  • リージョン内部 IPv6 アドレス
  • リージョン外部 IPv4 アドレス
  • リージョン外部 IPv6 アドレス

すでに気づいている方もいらっしゃると思いますが、 google_compute_address は region という文字は入っていませんが、リージョン IP アドレスです。
リージョン IP アドレスとは、Google Cloud 上の特定のリージョンに紐づけることができる IP アドレスです。

google_compute_global_address(グローバルに適した用途)

それに対し、google_compute_global_address はグローバル IP アドレスです。この 「グローバル」 というのは、 パブリックという意味ではなく、 グローバルリソースという意味での「グローバル」です。
したがって、 google_compute_global_address は 特定のリージョンに紐づかないリソースに割り当てるための IP アドレスです。

google_compute_global_address では、 3 種類のリソースを作成することができます。

  • グローバル内部 IPv4 アドレス
  • グローバル外部 IPv4 アドレス
  • グローバル外部 IPv6 アドレス

ユースケース例

静的 IP アドレスを予約するユースケースとして、代表的なものの一つに外部アプリケーションロードバランサの構築が挙げられます。
外部アプリケーションロードバランサは、以下の図のように、 Google Cloud のサービスを外部に公開し、 SSL 通信の対応をしたい場合や、 負荷分散を実装したい場合によく使用します。
image
外部アプリケーションロードバランサについての詳細は公式ドキュメントをご参照ください。

ロードバランサを構成する際には、フロントエンド用の 静的外部 IP アドレスを予約する必要があります。

外部アプリケーションロードバランサには 以下の 2 種類が存在します。

  • グローバル外部アプリケーションロードバランサ
  • リージョン外部アプリケーションロードバランサ

公式ドキュメントを見ると、以下の表のようにそれぞれのロードバランサに割り当てられる IP アドレスの種類がわかります。

ロードバランサの種類 IP アドレス
グローバル外部アプリケーションロードバランサ グローバル IP アドレス
リージョン外部アプリケーションロードバランサ リージョン IP アドレス

前セクションで解説したように、 Terraform の IP アドレスのリソースを選ぶ基準は、 IP アドレスが 「リージョンリソース」か「グローバルリソース」です。
したがって、それぞれのロードバランサを作成する時に使用する Terraform の IP アドレスのリソース名 は以下の表のようになります。

リソース名 IP アドレス Terraform のリソース名
グローバル外部アプリケーションロードバランサ グローバル IP アドレス google_compute_global_address
リージョン外部アプリケーションロードバランサ リージョン IP アドレス google_compute_address

チートシート

前セクションで紹介したユースケース以外にも、IP アドレスが必要になる場合が多くありますので、チートシートとしてまとめてみました。

GCE インスタンス / GKE ノード

紐づけたいリソース IP アドレスの種類 Terraform のリソース
内部 IPv4 アドレス リージョン内部 IPv4 アドレス google_compute_address
内部 IPv6 アドレス リージョン内部 IPv6 アドレス google_compute_address
外部 IPv4 アドレス リージョン外部 IPv4 アドレス google_compute_address
外部 IPv6 アドレス リージョン外部 IPv6 アドレス google_compute_address
エイリアス IP 範囲 リージョン内部 IPv4 アドレス google_compute_address

ロードバランサ

紐づけたいリソース IP アドレスの種類 Terraform の IP アドレスリソース
リージョン内部パススルーネットワークロードバランサ リージョン内部 IPv4 アドレス google_compute_address
リージョン内部アプリケーションロードバランサ リージョン内部 IPv4 アドレス google_compute_address
リージョン外部パススルーネットワークロードバランサ リージョン外部 IPv4 アドレス google_compute_address
リージョン外部プロキシネットワークロードバランサ リージョン外部 IPv4 アドレス google_compute_address
リージョン外部アプリケーション ロードバランサ リージョン外部 IPv4 アドレス google_compute_address
リージョン外部パススルーネットワークロードバランサ リージョン外部 IPv6 アドレス google_compute_address
グローバル外部プロキシネットワークロードバランサ グローバル外部 IPv4 アドレス google_compute_global_address
グローバル外部アプリケーションロードバランサ グローバル外部 IPv4 アドレス google_compute_global_address
グローバル外部プロキシネットワークロードバランサ グローバル外部 IPv6 アドレス google_compute_global_address
グローバル外部アプリケーションロードバランサ グローバル外部 IPv6 アドレス google_compute_global_address

プロトコル転送

紐づけたいリソース IP アドレスの種類 Terraform IP アドレスリソース
内部プロトコル転送 リージョン内部 IPv4 アドレス google_compute_address
外部プロトコル転送 リージョン外部 IPv4 アドレス google_compute_address

Private Service Connect

紐づけたいリソース IP アドレスの種類 Terraform IP アドレスリソース
Private Service Connect エンドポイント グローバル内部 IPv4 アドレス google_compute_global_address
Private Service Connect エンドポイント (マネージドサービス用) リージョン内部 IPv4 アドレス google_compute_address

その他

紐づけたいリソース IP アドレスの種類 Terraform IP アドレスリソース
Cloud DNS フォワーダーのエントリポイント リージョン内部 IPv4 アドレス google_compute_address
Cloud NAT リージョン外部 IPv4 アドレス google_compute_address
Cloud VPN リージョン外部 IPv4 アドレス google_compute_address

おわりに

この記事では、Terraform の google_compute_addressgoogle_compute_global_address の違いについて解説しました。
一見わかりづらい二つのリソースの違いが理解できたでしょうか?
本記事が、 Google Cloud を Terraform で構築する方の参考になれば幸いです。

Discussion