😊

terraform使ってみた備忘録

2022/12/14に公開

はじめに

sweeep株式会社エンジニアの五十嵐です。
Terraformというクラウドのリソースを管理するツールを使ってみたので、備忘録として記事を書きました。
ローカル端末からTerraformを使って、Google Cloudに簡単なリソースを作成するのが今回のゴールです。
https://registry.terraform.io/providers/hashicorp/google/latest/docs

事前準備

これらの事前準備が必要となります。

  • Google Cloudプロジェクトの作成
  • gcloudコマンドのインストール
  • gsutilコマンドのインストール
  • クレデンシャル生成

クレデンシャル生成は以下の記事をご参照ください。
https://dev.classmethod.jp/articles/accesse-google-cloud-with-terraform/

tfstateファイルを管理するためのバケット作成

Terraform はローカルの tfstate という名前のファイルで差分を管理しています。
複数人で開発する場合には tfstate ファイルをクラウドのストレージに保存して競合を防げます。
Google CloudではCloud Storageが使用できるので、状態管理に使用するバケットを以下で作成します。

$ gsutil mb gs://<バケット名>

これでバケットの準備ができました。

Terraform

Terraformをインストールするか、Dockerのコンテナを使用することができます。
ではTerraformのリソースをmain.tfへ定義していきます。
providersのバージョンは以下で確認しました。
https://github.com/hashicorp/terraform-provider-google/blob/main/CHANGELOG.md

main.tf
terraform {
  required_providers {
    google = {
      source  = "hashicorp/google"
      version = "4.46.0"
    }
  }
}

provider "google" {
  credentials = file("ダウンロードしたJSONファイルへのフルパス")
  project = var.gcp_project_id
  region  = var.primary_region
}

var.hoge はTrraformで変数を扱う仕組みです。
variable.tfに以下のように記載し

variable.tf
variable "gcp_project_id" {}
variable "primary_region" {}

terraform.tfvarsに実際に注入する値を記載します。
秘匿情報を扱う場合にはこのファイルをバージョン管理せず、どこかで秘匿情報を管理しておき、開発メンバーに共有します。
https://developer.hashicorp.com/terraform/language/values/variables#variable-definitions-tfvars-files

terraform.tfvars
gcp_project_id    = "hogehoge"
primary_region    = "us-central1"

この状態で、以下を実行してtfstateが作成されるか確認します。

$ terraform init -backend-config="bucket=バケット名"

Initializing the backend...

Successfully configured the backend "gcs"! Terraform will automatically
use this backend unless the backend configuration changes.

Initializing provider plugins...

Google Cloudのコンソールで確認すると、Google Cloud Storageにtfsateファイルが作成されています。

Google Cloudにvpcのリソースを作成する

main.tfに以下を追記します

main.tf
resource "google_compute_network" "vpc_network" {
  name = "terraform-network"
}

そしてplanとapplyを実行します。

$ terraform plan
$ terraform apply

コンソールで確認するとvpcのリソースが作成されています。

リソースの削除は以下のコマンドを使用します。

$ terraform destroy

ちゃんとリソースが削除されていました。

$ gcloud compute networks list
NAME     SUBNET_MODE  BGP_ROUTING_MODE  IPV4_RANGE  GATEWAY_IPV4
default  AUTO         REGIONAL

さいごに

IaCを導入することで人的ミスの削減や、コードの再利用による効率化ができるといったメリットがあると思います。
またCI/CDとも相性がいい手法なので、様々な効率化が期待できます。

最後に、弊社では絶賛エンジニア募集中なので、気になる方は以下を覗いてみてください!
https://www.wantedly.com/companies/sweeep/projects

Discussion