【Terraform】【GCP】terraformでGCPにインスタンスを生成するまで
前回、terraformコマンドを実行できるようにしたので、それを使ってGCP上にVMインスタンスを生成したいと思います。今回は、これをなぞればGCPでインスタンスを一つ建てられるよ。という流れの説明です。とりあえずterraform始めたしパブクラ上になにか作ってみたいな〜って人向けです。
第1弾やることリスト
下記は調べればたくさん情報がでてくるので、一旦今回の記事の対象外とします。
第2弾やることリスト
- tfファイルの作成
- terraform init の実行
- terraform plan の実行
- terraform apply の実行
tfファイルの作成
ファイルの作成はどこでも問題ないですが、下記でAWSとGCPに関するベストプラクティスがあるので、読んでみるとよいと思います。ディレクトリ構成とか見やすく直感的に管理できるかなと思いました。
今回作るファイル
- 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}" }
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とした。
- zone GCPの概念だとなんていう言葉かわからないのですが、リージョンの更に小さい単位をzoneと呼ぶらしい。冗長構成とかを考える必要がないので、今回はどれでもOK。
- boot_disk ここではディスクサイズやディスクの属性、使用するOSイメージファイルの情報を書きます。
- network_interface 今回はデフォルトにしました。
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と回答してください。要は設定変えるけどいいよね?という質問です。
感想
とりあえず、自分が忘れないように簡単に流れを書きました。あとは、実行するときにはまった箇所について書こうと思います。