たくあんポリポリ

勉強したことを載せていきます。最近、技術系の記事はZennに書いています。(https://zenn.dev/chittai)

【Terraform】【GCP】terraformでGCPにインスタンスを生成するまで

前回、terraformコマンドを実行できるようにしたので、それを使ってGCP上にVMインスタンスを生成したいと思います。今回は、これをなぞればGCPインスタンスを一つ建てられるよ。という流れの説明です。とりあえずterraform始めたしパブクラ上になにか作ってみたいな〜って人向けです。

c-taquna.hatenablog.com

第1弾やることリスト

下記は調べればたくさん情報がでてくるので、一旦今回の記事の対象外とします。

  1. GCPのアカウントの作成
  2. GCPAPIの有効化
  3. GCPでプロジェクトを作成
  4. GCPでサービスアカウントの作成
  5. サービスアカウントのクレデンシャルファイルを作成する

第2弾やることリスト

  1. tfファイルの作成
  2. terraform init の実行
  3. terraform plan の実行
  4. terraform apply の実行

tfファイルの作成

ファイルの作成はどこでも問題ないですが、下記でAWSGCPに関するベストプラクティスがあるので、読んでみるとよいと思います。ディレクトリ構成とか見やすく直感的に管理できるかなと思いました。

github.com

今回作るファイル

- compute_instance.tf
- variables.tf
- terraform.tfvars

compute_instance.tf の作成

ここには、どのクラウドサービスを使用するか、どんなVMを立てるかという情報を書きます。

まずは、クラウドサービスプロバイダの宣言を行います。"${}"は変数です。別途書きますが、必要な情報は変数として定義して別で管理しています。

provider "google" {
		credentials = "${var.gcp_key_path}"
		project = "${var.gcp_project_id}"
		region = "${var.gcp_region_name}"
}

次に、作成するVMインスタンスの情報を宣言します。

resource "google_compute_instance" "gcp-instance-1" {
	name = "${var.gcp_instance_1}"
	machine_type = "g1-small"
	zone = "${var.gcp_zone}"

	boot_disk {
		initialize_params {
			size = 10
			type = "pd-standard"
			image = "centos-cloud/centos-7"
		}
	}

	network_interface {
		network = "default"
	}
}

name, machine, zone, boot_disk, network_interface このあたりの情報は実際にGCPにログインして確認できます。

  • name appserverなど、サーバにつける名前を書く。今回はAnsible使おうとおもったので、ansibleserverとした。

f:id:c_taquna:20190420123431p:plain

  • machine_type これはVMインスタンスのCPU・メモリをどのサイズで作成するのか決めるパラメータです。必要なリソースが搭載されているtypeを選択してください。
  • zone GCPの概念だとなんていう言葉かわからないのですが、リージョンの更に小さい単位をzoneと呼ぶらしい。冗長構成とかを考える必要がないので、今回はどれでもOK。
  • boot_disk ここではディスクサイズやディスクの属性、使用するOSイメージファイルの情報を書きます。
  • network_interface 今回はデフォルトにしました。


以上で、一旦VMインスタンスの情報は完了です。最低限ですが、これでVMインスタンスが建てられます。

variables.tf の作成

このファイルは、変数を定義します。terraformでは*.tfvarsファイルに書くこともできます。.tfvarsは実行時に指定しないと読み込まれないので、環境情報などを書くときに使用して実行時に使い分けるのが良さそうです。.tfvarsで変数を宣言してもvariables.tf を作成して変数を定義しないと変数を使用することはできません。

variable "gcp_project_id" {}
variable "gcp_region_name" {}
variable "gcp_key_path" {}
variable "gcp_instance_1" {}
variable "gcp_instance_2" {}
variable "gcp_zone" {}

中身は、.tfvarsに記載してあります。

terraform init の実行, terraform plan の実行, terraform apply の実行

tfファイルを作成した場所で上記コマンドを実行してください。エラーがでなければVMインスタンスの作成完了です。terraform apply のときは Do you want to perform these actions? と聞かれますが、yesと回答してください。要は設定変えるけどいいよね?という質問です。

感想

とりあえず、自分が忘れないように簡単に流れを書きました。あとは、実行するときにはまった箇所について書こうと思います。