GCPも少し触り始めたので、まずはVPCとサブネットをTerraformで作成してみました。
provider
credentials
で認証情報を持つjsonファイルのパスを指定しています。
AWSの場合、IAMユーザーを作成し、プログラムアクセス用の access_key_id
と secret_access_key
をcredentialファイルにセットしますが、GCPの場合はサービスアカウントを作成し、キーファイルのパスを指定するようです。今回は、key.json
という名前でホームディレクトリに配置してみました。(GOOGLE_APPLICATION_CREDENTIALS
の環境変数でパスを指定してもOKです)
なお、providerで指定する project
はGCPのアカウントに紐付けられるプロジェクトIDです。
業務の計画やチームの意味で使う一般的な「プロジェクト」ではありません。(最初わからなくて自由に名付けることができるのかと思ってしまった)
terraform {
required_version = ">= 1.0"
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.0"
}
}
}
provider "google" {
project = var.gcp_project
region = var.region
zone = var.zone
credentials = file("~/.gcp/key.json")
}
variables
とりあえず使いそうな変数を variables.tf
に宣言。
prefix に環境、プロジェクト名を入れたい派なので、ローカル変数で書いています。
variable "gcp_project" {
default = "Your GCP Project ID"
}
variable "project" {
default = "Your Project Name"
}
variable "env" {
default = "dev"
}
variable "region" {
default = "asia-northeast1"
}
variable "zone" {
default = "asia-northeast1a"
}
locals {
prefix = "${var.env}-${var.project}"
}
VPCとサブネットを作成
サブネットを2つ作成してみました。
なんと、VPCにはCIDRブロックを指定するパラメータはありません。
また、以下では指定していませんが、secondary_ip_range
でセカンダリのIPレンジを指定することもできます。公式ドキュメントを読んでも、プライマリ、セカンダリの使い分けがまだピンときていません。。
resource "google_compute_network" "vpc" {
name = "${local.prefix}-vpc"
auto_create_subnetworks = false
routing_mode = "REGIONAL"
mtu = 1460
}
resource "google_compute_subnetwork" "public" {
name = "${local.prefix}-public-subnet"
ip_cidr_range = "10.0.11.0/24"
network = google_compute_network.vpc.id
}
resource "google_compute_subnetwork" "private" {
name = "${local.prefix}-private-subnet"
ip_cidr_range = "10.0.21.0/24"
network = google_compute_network.vpc.id
}
コンソール画面を確認するとこんな感じで作成されていました。
public、privateと名付けていますが、AWSみたくルートテーブルで用途を変えれるのかなと勝手に想像しています。次はファイアウォールとルートテーブルあたりを確認してみたいと思います。