実現したいこと
- GCP上にインスタンスをたてたり、壊したりしたい。(ssh接続できるホストが1つ以上ほしい)
- できればスナップショットをとったりしたい。→ 別記事にて作成予定。
背景
- 10月にLPICを受験することになったので、GCP環境上に練習用の環境を構築することにした。
- せっかくなので環境を作ったり壊したりしやすいようにterraformを使ってみたい(個人的興味)。
Terraformとは
- IaCのツール。
- HCL(HashiCorp Configuration Language)と呼ばれる構成言語であるべき姿を定義する。
- どうもTerraform CloudとTerraform CLIという二種類があるらしい。
- 今回はTerraform CLIを使用する。
環境
- macにTerraformをインストールして、gcpを操作する感じ。
手順
Terraformをインストール
- Homebrewで一発。
brew install terraform
terraform -> GCP用にサービスアカウントを設定
サンプルコード作成
- vm2台を作成するhclを以下に記述する。
provider "google" {
project = "(prj_name)"
credentials = "${file(serviceaccount)_.json")}"
region = "asia-northeast1"
zone = "asia-northeast1-b"
}
resource "google_compute_instance" "vm_instance" {
count = "2"
name = "(vm_name)"
machine_type = "f1-micro"
boot_disk {
initialize_params {
image = "(image)"
}
}
metadata = {
ssh-keys = "(username):${file("~/.ssh/id_rsa.pub")}"
}
network_interface {
# A default network is created for all GCP projects
network = "default"
access_config {
}
}
}
- prj_name: プロジェクトID
- (serviceaccount)_.json: [手順]で出力したjsonのパス
- (image): ここで確認できるイメージ名
- (username): ログインユーザ名(なんでもよい)
Terraform周りのコマンド実行
- 初期化
hogehogenoiMac:gcp hogehoge$ terraform init
# .terraformディレクトリ一式が作成される
- 作成したコードに文法のエラーがないか、何が作成されるかを確認する。
hogehogenoiMac:gcp hogehoge$ terraform plan
Refreshing Terraform state in-memory prior to plan...
...
Plan: 1 to add, 0 to change, 0 to destroy.
------------------------------------------------------------------------
Note: You didn't specify an "-out" parameter to save this plan, so Terraform
can't guarantee that exactly these actions will be performed if
"terraform apply" is subsequently run.
- 問題がなければ
terraform apply
を使用して設定を適用する。
hogehogenoiMac:gcp hogehoge$ terraform apply
...
Do you want to perform these actions?
Terraform will perform the actions described above.
Only 'yes' will be accepted to approve.
Enter a value: yes
# 問題なければyesと答える
google_compute_instance.vm_instance: Creating...
google_compute_instance.vm_instance: Still creating... [10s elapsed]
google_compute_instance.vm_instance: Creation complete after 12s [id=(project)]
Apply complete! Resources: 1 added, 0 changed, 0 destroyed.
Terraformで作成した環境を削除する時はterraform destroy
を使用する。
hogehogenoiMac:gcp hogehoge$ terraform destroy
...
Do you really want to destroy all resources?
Terraform will destroy all your managed infrastructure, as shown above.
There is no undo. Only 'yes' will be accepted to confirm.
Enter a value: yes
# 問題なければyesと答える
google_compute_instance.vm_instance: Destroying... [id=(project)]
google_compute_instance.vm_instance: Still destroying... [id=(project), 10s elapsed]
google_compute_instance.vm_instance: Still destroying... [id=(project), 20s elapsed]
google_compute_instance.vm_instance: Destruction complete after 28s
Destroy complete! Resources: 1 destroyed.
参照
- Google Cloud がチュートリアルを提供しているので↓、初歩的なことはできた
- https://cloud.google.com/community/tutorials/getting-started-on-gcp-with-terraform
所感
- サクッと環境を構築したり壊したりできるので便利!!
- ドキュメントサイトはあるが、初見ではやや難しい。。。
- いくつかチュートリアルをやってみたら感覚掴めるかも?