terraform使ってみた備忘録
はじめに
sweeep株式会社エンジニアの五十嵐です。
Terraformというクラウドのリソースを管理するツールを使ってみたので、備忘録として記事を書きました。
ローカル端末からTerraformを使って、Google Cloudに簡単なリソースを作成するのが今回のゴールです。
事前準備
これらの事前準備が必要となります。
- Google Cloudプロジェクトの作成
- gcloudコマンドのインストール
- gsutilコマンドのインストール
- クレデンシャル生成
クレデンシャル生成は以下の記事をご参照ください。
tfstateファイルを管理するためのバケット作成
Terraform はローカルの tfstate という名前のファイルで差分を管理しています。
複数人で開発する場合には tfstate ファイルをクラウドのストレージに保存して競合を防げます。
Google CloudではCloud Storageが使用できるので、状態管理に使用するバケットを以下で作成します。
$ gsutil mb gs://<バケット名>
これでバケットの準備ができました。
Terraform
Terraformをインストールするか、Dockerのコンテナを使用することができます。
ではTerraformのリソースをmain.tfへ定義していきます。
providersのバージョンは以下で確認しました。
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 "gcp_project_id" {}
variable "primary_region" {}
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に以下を追記します
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とも相性がいい手法なので、様々な効率化が期待できます。
最後に、弊社では絶賛エンジニア募集中なので、気になる方は以下を覗いてみてください!
Discussion