TerraformでGCPの静的IPアドレス(外部IP/内部IP)を予約する
日本語での情報がまとまっていなかったため、TerraformでGCPの静的アドレスを予約する方法をまとめます。本記事では、Terraform v0.12.9を利用しています。最新の情報はTerraform公式ドキュメントを確認してください。
利用するリソース(Resource)
以下のresourceを利用します。
https://www.terraform.io/docs/providers/google/r/compute_address.html
主な変数と変数についての説明を以下にまとめます。
変数名 | 記載 | 説明 |
---|---|---|
name | 必須 | リソースの名前を指定します。名前は1〜63文字で、RFC1035に準拠する必要があります。具体的には、名前は1〜63文字で、正規表現[a-z]([-a-z0-9] * [a-z0-9])?と一致する必要があります。つまり、最初の文字は小文字でなければならず、後続のすべての文字はダッシュ、小文字、または数字でなければなりません。ただし、最後の文字はダッシュにすることはできません |
address | このリソースによって作成される静的外部アドレスが入ります。リソース作成時には、内部アドレスタイプにのみ指定できます。IPv4のみがサポートされており、IPアドレスは、指定されたサブネットワーク内に存在する必要があります。 | |
address_type | 予約するアドレスのタイプ、内部(INTERNAL)または外部(EXTERNAL)を指定します。指定しない場合、デフォルトはEXTERNALになります。 | |
network_tier | このアドレスの構成に使用されるネットワーク層を指定します。PREMIUM か STANDARDを指定できます。デフォルトでは、PREMIUMが設定されます。 | |
subnetwork | アドレスを予約するサブネットワークのURLを指定します。IPアドレスを指定する場合、サブネットワークのIP範囲内にある必要があります。このフィールドは、address_typeがINTERNALで、GCE_ENDPOINT/DNS_RESOLVER用途でのみ使用できます。 | |
region | 作成されたアドレスが存在するリージョンを指定します。指定されていない場合、プロバイダーで指定したリージョンが使用されます。 |
静的外部(リージョン)IPの予約方法
以下にTerraformコードの記載例を示します。
resource "google_compute_address" "static_region_ip" { name = "static_region_ip" region = "asia-northeast1" network_tier = "STANDARD" }
- 名前(name)は、任意のものを指定します。
- 静的リージョンIPを作成を作成したいため、作成したいリージョン(region)を指定しています。
- ネットワークサービス階層(network_tier)は、STANDARDを指定しています。
Terraformで上記を実行することで、静的リージョンIPが予約(払い出し)されます。
グローバルネットワークの静的IPアドレスを予約する場合は、nameだけ指定します。
静的内部IPアドレスの予約方法
以下にTerraformコードの記載例を示します。
resource "google_compute_address" "static_internal_ip" { name = "static_internal_ip" region = "asia-northeast1" subnetwork = "default" address_type = "INTERNAL" address = "xxx.xxx.xxx.xxx" }
- リージョンIPと異なり、サブネットを指定しています。
- GCP公式ドキュメントに記載されているように、内部IPアドレスは、VPCネットワーク配下で予約されるためです。
- アドレスタイプ(address_type)には、必ずINTERNALを指定します。
- アドレス(address)には、設定したいアドレスを記載します。指定したサブネットワークに含まれるIPアドレスを指定します。
まとめ
今回、Terraformを利用して、静的IPアドレス(外部IP/内部IP)を予約する方法を説明しました。静的アドレスには、3種類(外部グローバル/外部リージョン/内部)あるため、変数指定の有無で予約されるIPアドレスが異なることに注意する必要がありそうです。
ディスカッション
コメント一覧
まだ、コメントがありません