【チートシート】Terraform で Google Cloud の IP アドレスを使いこなす
はじめに
クラウドエース株式会社 第二開発部の坂本です。
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_address
とgoogle_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 通信の対応をしたい場合や、 負荷分散を実装したい場合によく使用します。
外部アプリケーションロードバランサについての詳細は公式ドキュメントをご参照ください。
ロードバランサを構成する際には、フロントエンド用の 静的外部 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_address
と google_compute_global_address
の違いについて解説しました。
一見わかりづらい二つのリソースの違いが理解できたでしょうか?
本記事が、 Google Cloud を Terraform で構築する方の参考になれば幸いです。
Discussion