Google Cloud:コンソールでTerraformを使用した構築(初級)

Google Cloudを使用する上での参考にして頂けたら幸いです。
2023.01.25

IaC(Infrastructure as Code)の必要性

企業でGoogle Cloudを使用しインフラを構築するにあたりCloudコンソールからポチポチと行う方法とCloud Development ManagerというGoogle Cloud独自の構築方法、そして今回インストールするTerraformがあります。 今回はCloud Shellを使用してTerraformでVPCネットワーク、サブネット、GCEを作成してみたいと思います。 基本的には公式のチュートリアルに沿って進めていきますが、途中失敗した箇所など共有できれば幸いです。
【チュートリアル】
Terraform を使用して基本的な Flask ウェブサーバーをデプロイする

今回の手順

1.GCEのAPIを有効化

2.Cloud Shellを起動

3.プロジェクトの作成

4.VPC,サブネットの作成

5.GCEの作成

1.GCEのAPIを有効化

今回は、デモでVM周りのリソースを作成するだけなので、新規でプロジェクトを作成していきます。 理由としては、VM自体にも料金がかかりますので、VMが配置されているプロジェクトごと消せば思わぬ課金などの発生を防げるためです。 [IAMと管理]→[プロジェクトを作成]に移動し作成します。(または検索ボックスにプロジェクトを作成と入力してください) 今回はterraform-demoprojectというプロジェクトを作成し、リソースを配置していきます。

コンソール画面のGUI動作で作成したプロジェクトに移り、GCEのAPIを有効化します。 次にCloud Shellの操作に移ります。

2.Cloud Shellを起動

右上のCloud Shellのアイコンをクリックし起動させます。(一応わかりやすいように画像も)

下記のような画面が起動されます。
ただ上記の場合、カレントプロジェクトがvpc-host-nonprodとという別のプロジェクトになっているため、下記コマンドで移動します。

gcloud config set project terraform-demoproject

3.ディレクトリの作成

プロジェクトを移動したら、下記コマンドにて今回使用するディレクトリを作成していきます。

mkdir tf-tutorial && cd tf-tutorial

(tf-tutorialを作成し、tf-tutorialに移動するコマンド)

4.VPC,サブネットの作成

下記コマンドでリソースを記述するファイルを作成していきます。

vim main.tf

作成したvimファイルの中に、VPC,サブネットの作成のためのコードを記述していきます。
ちなみに#のコメントはそのコードに対してのメモになります。

resource "goole-_compute_network" "vpc_network" {

name = "my-custommode-network"

auto_create_subnetworks = faulse

mtu = 1460

}

resource "google_compute_subnetwork" "default" {

name = "my-custom-subnetworks"

#CIDR範囲でサブネットのアドレスを指定します

ip_cidr_range = "10.0.1.0/24"

#作成するリージョン指定

reagion = "asia-northeast1"

#使用するネットワークを指定

network = google_compute_network.vpc_network.id

}

cat main.tfコマンドで内容の確認も可能です。

5.GCEの作成

main.tfに以下のように記述し、GCEの作成を定義していきます。

# Create a single Compute Engine instance

resource "google_compute_instance" "default" {

name = "flask-vm"

#運用はしないので1番安いVMを指定します

machine_type = "f1-micro"

#ゾーンは東京に指定

zone = "asia-northeast1-a"

#sshタグを付与

tags = ["ssh"]

#永続ディスクを指定

boot_disk {

initialize_params {

image = "debian-cloud/debian-11"

}

}

#Flaskのインストール

metadata_startup_script = "sudo apt-get update; sudo apt-get install -yq build-essential python3-pip rsync; pip install flask"

network_interface {

#使用するサブネットを指定

subnetwork = google_compute_subnetwork.default.id

access_config {

#今回は外部IPはつけないためここには記述なし。

}

}

}

次にTerraform を初期化していきます。 下記コマンドを実行して必要なプラグインを追加し、.terraformディレクトリをビルドします。

terraform init

エラーが出ました。 main.tf内の記述が正しくなかったみたいです。
画像の赤枠とその他に誤字があったので修正して、再度実行したところ成功しました。
(下記画像のように緑文字で成功したと表示され、次にterraform planを実行しろと記載されています)

terraform planを実行します。
main.tfの構文が正しいことを確認し、作成されるリソースのプレビューが表示されます。

色々と長文が出てくるので割愛しますが、 最下行に
Note: You didn't use the -out option to save this plan, so Terraform can't guarantee to take exactly these actions if you run "terraform apply" now.
と出てきたらterraform applyを実行していきます。yesを入力すると、、、

このようにmain.tfで記述したリソースが作成されていきます。今回はVPC、サブネット、GCE(ディスク含む)が作成されます。
念のためGCEの画面確認したところ、しっかりと先ほどのパラメータでVMが作成されていました。(もちろんVPCもサブネットも作成済)

もしデプロイのみを試したく、作成したリソースが必要なければ最後にプロジェクトごと消しちゃいましょう。

まとめ

今回はTerraformをCloud Shellで実行するという基礎的な内容を試しました。
自分のPCにTerraformをインストールして、Google Cloudと繋げて、、、といった作業がないためかなり楽にリソースを作成することができました。
ただ、HCLというTerraform独自の言語を学習しなければならないデメリットもあるので、Javaなどのプログラミング言語がわかる方は別途のSDK for Terraformの方がいいのかも??(ただ初学者にとってはセットアップが大変かも知れません)
一応、そちらについてのブログも今後書いていくつもりです。(以下はその第一段のブログ)
Google Cloud:Mac BookにTerraformをインストールしてみた