2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

LPIC勉強用環境(GCP)をterraformを使って構築する

Last updated at Posted at 2019-09-24

実現したいこと

  • GCP上にインスタンスをたてたり、壊したりしたい。(ssh接続できるホストが1つ以上ほしい)
  • できればスナップショットをとったりしたい。→ 別記事にて作成予定。

背景

  • 10月にLPICを受験することになったので、GCP環境上に練習用の環境を構築することにした。
  • せっかくなので環境を作ったり壊したりしやすいようにterraformを使ってみたい(個人的興味)。

Terraformとは

  • IaCのツール。
  • HCL(HashiCorp Configuration Language)と呼ばれる構成言語であるべき姿を定義する。
  • どうもTerraform CloudとTerraform CLIという二種類があるらしい。
  • 今回はTerraform CLIを使用する。

環境

(手書きですみません)
gcp.jpg

  • macにTerraformをインストールして、gcpを操作する感じ。

手順

Terraformをインストール

  • Homebrewで一発。
brew install terraform

terraform -> GCP用にサービスアカウントを設定

  • [IAMと管理]->[サービスアカウント]より、サービスアカウントがあるか確認する。
  • (ある場合)[操作]より[鍵を作成]を選択する。
  • 形式は[JSON]とする。
  • スクリーンショット 2019-09-25 0.16.23.png
  • 適当な場所にファイルを配備する。

サンプルコード作成

  • 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.

参照

所感

  • サクッと環境を構築したり壊したりできるので便利!!
  • ドキュメントサイトはあるが、初見ではやや難しい。。。
  • いくつかチュートリアルをやってみたら感覚掴めるかも?
2
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?