Google CloudのTerraformでリソース作成するチュートリアルをやってみた

Google Cloudのチュートリアルで、Terraform使ってのリソース作成をやってみた!
2023.09.08

みなさん、こんにちは!

クルトンです。

今回は、Google CloudのリソースをTerraformで作成するチュートリアルを実行してみました。以前のブログではAWSリソースの作成をしていたのですが「Google Cloudだとどういう感じなんだろう?」と気になっておりました。 そんなとき、ちょうどよくGoogle Cloudさん側でナイスなチュートリアルを発見したのでやってみる事にしてみました。

前提

Google Cloudのプロジェクトが作られている状態で開始します。

また、Compute Engineを使うため、APIを有効化しておいてください。

Terraform実行にはCloud Shellが便利で、すぐに実行できます。チュートリアルでも使用すると書いてあるのでそちら利用します。

やってみた

まず最初にGoogle Cloudコンソールを開きます。

その後、Cloud Shellの起動をします。画面上部、右側のボタンをクリックしてください。

CloudShellButton

ウェブサーバーとなるVMの作成まで

以降は、Cloud Shellのターミナル上での操作になります。

以下のコマンドを順番に実行してください。

  • 今回作成するtfファイルを置くフォルダの作成と移動
    • mkdir tf-tutorial && cd tf-tutorial
  • ファイルの作成
    • nano main.tf

main.tfへ以下の内容を書きます。

resource "google_compute_network" "vpc_network" {
  name                    = "my-custom-mode-network"
  auto_create_subnetworks = false
  mtu                     = 1460
}

resource "google_compute_subnetwork" "default" {
  name          = "my-custom-subnet"
  ip_cidr_range = "10.0.1.0/24"
  region        = "us-west1"
  network       = google_compute_network.vpc_network.id
}

# Create a single Compute Engine instance
resource "google_compute_instance" "default" {
  name         = "flask-vm"
  machine_type = "f1-micro"
  zone         = "us-west1-a"
  tags         = ["ssh"]

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }

  # Install 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 {
      # Include this section to give the VM an external IP address
    }
  }
}

次にTerraform実行時の初回時に必要なコマンドを叩きます。(先ほど作ったtfファイル以外にもファイルが作成されます。)

terraform init

成功すると、次の画像のような画面が現れるかと思います。

fig2

initし終わると、リソース作成のコマンドであるterraform applyコマンドが実行できるのですが、作って大丈夫そうか、確認をしておきます。次のコマンドを叩いてください。

terraform plan

terraform planコマンドを叩くと、次の画像のようなものが出るかもしれません。承認をクリックでOKです!

fig2

作っても大丈夫かをチェックするのは、実際に必要なリソース作成をする場合において、重要な工程です。チュートリアルではありますが念の為に確認しておきました。

では実際にリソース作成をしていきます。次のコマンドを叩いてください。

terraform apply

作っても良いか、yesと打ち込む必要があります。yesと打ち込んだ後にEnterキーを押して数分待ちます。

fig4

数分待った後、Apply complete! Resources: ~~~~.というふうに表示されるかと思います。実際にVMインスタンスが作成されているか確認すると、flask-vmという名前で作成されているかと思います。(作成されていないように見えましたら、リロードしてみてください。)

fig5

ウェブサーバーを起動する

Webサーバーにするためのインスタンス作成が終わりました。次に、接続できるようにネットワークの設定を追加します。 再びmain.tfファイルを修正します。以下の内容を末尾に追加してください。(nanoコマンドでファイルを開いて修正したら良いです。)

resource "google_compute_firewall" "ssh" {
  name = "allow-ssh"
  allow {
    ports    = ["22"]
    protocol = "tcp"
  }
  direction     = "INGRESS"
  network       = google_compute_network.vpc_network.id
  priority      = 1000
  source_ranges = ["0.0.0.0/0"]
  target_tags   = ["ssh"]
}

修正終わりましたら、リソース作成・変更のためのコマンドを叩きます。先ほどと同じく、次のコマンドを叩いてください。

terraform apply

次にWebサーバーに繋がったときに応答をするPythonファイルを作成していきます。 Webサーバーの中で作業をするため、ssh接続していきます。

VMインスタンスのflask-vmという名前から右に行くと、接続というカラムの中にSSHと書かれているかと思います。これをクリックしてください。

クリックすると新しいウィンドウが開かれます。

クリック後に、次の画像のような画面が出てくるかと思います。Authorizeをクリックしてください。 fig6

接続できましたら、次のコマンドを叩いてファイル作成を開始します。

nano app.py

ファイルに記述する内容は次の通りです。

from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello_cloud():
  return 'Hello Cloud!'

app.run(host='0.0.0.0')

記入終わりましたら、サーバーを起動するために次のコマンドを叩いておいてください。

python3 app.py

実行できましたら、ウィンドウを消さずに置いておいてください。

では、実際にアクセスしてみましょう! Google Cloud コンソールに再び戻りまして、先ほどと同じくVMインスタンスのflask-vmという名前の接続というカラムの中にあるSSHをクリックしてください。

新しくSSH接続して開かれた画面で、次のコマンドを叩いてください。

curl http://0.0.0.0:5000

ターミナル上にHello Cloudと表示されていたら、成功です!

ローカルマシンからサーバーに接続する

次にローカルマシンから接続できるように修正をしていきます。Cloud Shellで開いているターミナルでmain.tfファイルを再度nanoコマンドで開き、次の内容を末尾に追加してください。

resource "google_compute_firewall" "flask" {
  name    = "flask-app-firewall"
  network = google_compute_network.vpc_network.id

  allow {
    protocol = "tcp"
    ports    = ["5000"]
  }
  source_ranges = ["0.0.0.0/0"]
}

// A variable for extracting the external IP address of the VM
output "Web-server-URL" {
 value = join("",["http://",google_compute_instance.default.network_interface.0.access_config.0.nat_ip,":5000"])
}

追加終わりましたら、忘れずにterraform applyをしておいてください!

terraform apply完了すると、Cloud Shell上に次のようなURLが表示されます。

Web-server-URL = "http://IP_ADDRESS:5000"

httpから始まるURL部分をクリックできますので、クリックしてみてください。

Hello Cloud!と書かれたページが表示されます。

これでチュートリアルとしては終わりなので、SSH接続で開かれたウィンドウについてはexitとコマンドを叩いて終了してください。

リソースの削除

Terraformで作成したリソースについては、terraform destroyコマンドを実行すると全て削除可能です。今後使うご予定がある場合を除いて、削除をすると良いかと思います。(main.tfファイルがあるので、再度必要になった場合は、terraform applyコマンドで同じ構成を数分で作成が可能です。)

終わりに

Google Cloud公式のチュートリアルで、Terraformを使ったリソース作成があったのでやってみました。 Terraformを使うと、簡単に環境を作ったり破棄したりする事が可能ですが、Google Cloudでも使えるのは便利ですね。

今回はここまで。

それでは、また!