Google Cloud:コンソールでTerraformを使用した構築(初級)
IaC(Infrastructure as Code)の必要性
企業でGoogle Cloudを使用しインフラを構築するにあたりCloudコンソールからポチポチと行う方法とCloud Development ManagerというGoogle Cloud独自の構築方法、そして今回インストールするTerraformがあります。
今回はCloud Shellを使用してTerraformでVPCネットワーク、サブネット、GCEを作成してみたいと思います。
基本的には公式のチュートリアルに沿って進めていきますが、途中失敗した箇所など共有できれば幸いです。
【チュートリアル】
Terraform を使用して基本的な Flask ウェブサーバーをデプロイする
今回の手順
- GCEのAPIを有効化
- Cloud Shellを起動
- プロジェクトの作成
- VPCとサブネットの作成
- GCEの作成
1.GCEのAPIを有効化
今回は新規でプロジェクトを作成していきます。
理由としては、VM自体にも料金がかかりますので、VMが配置されているプロジェクトごと消せば思わぬ課金などの発生を防げるためです。
[IAMと管理]→[プロジェクトを作成]に移動し作成します。(または検索ボックスにプロジェクトを作成と入力してください)
今回はterraform-demoproject
というプロジェクトを作成し、リソースを配置していきます。
コンソール画面のGUI動作で作成したプロジェクトに移り、GCEのAPIを有効化します。
次にCloud Shellの操作に移ります。
2.Cloud Shellを起動
右上のCloud Shellのアイコンをクリックし起動させます。
下記のような画面が起動されます。
ただ上記の場合、カレントプロジェクトがvpc-host-nonprodとという別のプロジェクトになっているため、下記コマンドで移動します。
3.ディレクトリの作成
プロジェクトを移動したら、下記コマンドにて今回使用するディレクトリを作成していきます。
mkdir tf-tutorial && cd tf-tutorial
(tf-tutorialを作成し、tf-tutorialに移動するコマンド)
4.VPCとサブネットの作成
下記コマンドでリソースを記述するファイルを作成していきます。
作成した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ディレクトリをビルドします。
エラーが出ました。
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をインストールしてみた