Terraform で GCP 上に VPC / Subnet / Instance を作成する
Terraform の GCP 用 Provider を使って、VPC / Subnet / Compute Instance を作成する .tf ファイルをメモしておきます。
google_compute_instance にも Google recommends custom service accounts that have cloud-platform scope and permissions granted via IAM Roles.
と書かれていますので、Service Account を紐付けています。
尚、検証用に作成している為、作成する Instance は preemptible にしています。 preemptible については プリエンプティブル VM インスタンス に詳しく、一部を抜粋すると下記のように書かれています。
プリエンプティブル VM は、通常のインスタンスよりはるかに低価格で作成、実行できるインスタンスです。ただし、他のタスクがリソースへのアクセスを必要とする場合、Compute Engine がこのインスタンスを停止(プリエンプト)する可能性があります。プリエンプティブル インスタンスは Compute Engine の余剰のキャパシティを利用する機能であり、使用できるかどうかは利用状況に応じて異なります。
.tf ファイル
実際の .tf ファイルは以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82 | variable "project_id" {
default = "<PROJECT-ID>"
}
variable "region" {
default = "asia-northeast1"
}
variable "zone" {
default = "asia-northeast1-a"
}
provider "google" {
project = var.project_id
region = var.region
}
resource "google_compute_network" "vpc1" {
name = "vpc1"
auto_create_subnetworks = false
}
resource "google_compute_firewall" "firewall1" {
name = "firewall1"
network = google_compute_network.vpc1.name
allow {
protocol = "tcp"
ports = ["22"]
}
direction = "INGRESS"
log_config {
metadata = "INCLUDE_ALL_METADATA"
}
source_ranges = ["0.0.0.0/0"]
target_tags = ["my-instances"]
}
resource "google_compute_subnetwork" "subnet1" {
name = "subnet1"
region = var.region
network = google_compute_network.vpc1.self_link
ip_cidr_range = "10.0.0.0/16"
log_config {
metadata = "INCLUDE_ALL_METADATA"
}
}
resource "google_service_account" "account1" {
account_id = "account1"
display_name = "account1"
}
resource "google_compute_instance" "instance1" {
name = "instance1"
machine_type = "e2-micro"
tags = ["my-instances"]
zone = var.zone
boot_disk {
initialize_params {
image = "ubuntu-os-cloud/ubuntu-2104-hirsute-v20210928"
}
}
network_interface {
network = google_compute_network.vpc1.name
subnetwork = google_compute_subnetwork.subnet1.name
access_config {}
}
scheduling {
preemptible = true
automatic_restart = false
}
service_account {
email = google_service_account.account1.email
scopes = ["cloud-platform"]
}
}
|