本記事では、Infrastructure as Code(IaC)ツールのTerraformを使ってGoogle Cloud環境を構築する手順を、セットアップ方法から解説します。
Google Cloudには公式のIaCサービスとしてCloud Deployment Manager(CDM)がありますが、CDMは2020/4/15で更新が止まっています。そのため、本記事ではより多くのリソースをサポートし、コミュニティが活発なTerraformを紹介します。
Terraformとは
Terraformは、HashiCorp社によって開発されたオープンソースのIaCツールです。インフラの構成をコードとして記述することで、インフラの構築・変更・バージョン管理を自動化できます。
Terraformのメリット
- インフラ構築の自動化
- バージョン管理
- 再現性
- ドキュメント化
- モジュール化
事前準備
Terraform CLIのインストール
Windows環境でのインストール手順を示します。
- Terraform CLIの実行ファイルのzipファイルをダウンロード
Install | Terraform | HashiCorp DeveloperExplore Terraform product documentation, tutorials, and examples. - zipファイルを解凍し、「terraform.exe」を任意のフォルダに配置(C:\Users\<ユーザ名>\terraform等)
- コマンドプロンプトで以下のコマンドを実行し、実行ファイルへのパスを通す
setx PATH "%PATH%;<フォルダパス>"
例)setx PATH "%PATH%;C:\Users\<ユーザ名>\terraform"
- コマンドプロンプトを閉じる
- コマンドプロンプトを新しく開き、以下のコマンドを実行する
terraform -v
- バージョン情報が出力されればインストール成功です
Google Cloud CLI(gcloud CLI)のインストール
- gcloud CLIのインストーラをダウンロード
バージョニングされたアーカイブからのインストール | Google Cloud CLI Documentation - zipファイルを解凍し、google-cloud-sdkフォルダを任意のフォルダに配置(C:\Users\<ユーザ名>等)
- フォルダ内のinstall.batを実行
- コマンドプロンプトで以下のコマンドを実行し、binフォルダ内の実行ファイルへのパスを通す
setx PATH "%PATH%;<フォルダパス>"
例)setx PATH "%PATH%;C:\Users\<ユーザ名>\google-cloud-sdk\bin"
- コマンドプロンプトを閉じる
- コマンドプロンプトを新しく開き、以下のコマンドを実行する
gcloud version
- バージョン情報が出力されればインストール成功
- コマンドプロンプトで以下のコマンドを実行し、対話形式でgcloud CLIをセットアップ
gcloud init
- コマンドプロンプトで以下のコマンドを実行する
gcloud auth application-default login
- 自動で開かれたログイン画面でログインすることで、アプリケーションがGoogleCloudAPIを使用するための認証情報を取得できる
リソース構築
例として、Pub/Subトピックを作成します。
設定ファイル作成
main.tfという名前でファイルを作成し、以下のコードを記述
# 使用するプロバイダプラグインを指定(今回はGCP環境を構築するためgoogle) provider "google" { project = "<GCPプロジェクトID>" region = "<リージョン>" } # プロバイダプラグインとTerraform CLIのバージョンを指定 terraform { required_providers { google = { source = "hashicorp/google" version = "~> 6.10.0" } } required_version = "~> 1.9.0" } # リソースを定義 resource "google_pubsub_topic" "sample" { name = "sample" }
Terraform CLIの初期化
以下のコマンドを実行し、terraformを初期化
terraform init
更新内容の確認
以下のコマンドを実行し、更新内容を確認
terraform plan
# google_pubsub_topic.sample will be created
(Pub/Subトピックが作成される)
Plan: 1 to add, 0 to change, 0 to destroy
(1個のリソースが追加され、0個のリソースが変更され、0個のリソースが削除される)
リソース作成
以下のコマンドを実行し、更新内容をクラウドに反映
terraform apply
トピックが作成された
リソース変更
- 設定ファイルを編集(トピックにラベルを追加)
# 使用するプロバイダプラグインを指定(今回はGCP環境を構築するためgoogle) provider "google" { project = "<GCPプロジェクトID>" region = "<リージョン>" } # プロバイダプラグインとTerraform CLIのバージョンを指定 terraform { required_providers { google = { source = "hashicorp/google" version = "~> 6.10.0" } } required_version = "~> 1.9.0" } # リソースを定義(ラベルを追加) resource "google_pubsub_topic" "sample" { name = "sample" labels = { name = "aiueo" } }
- 以下のコマンドを実行し、更新内容を反映
terraform apply
ラベルが追加された
リソース削除
- 設定ファイルのリソース定義部分を削除 or コメントアウト
# 使用するプロバイダプラグインを指定(今回はGCP環境を構築するためgoogle) provider "google" { project = "techs-3-gcp-prj" region = "asia-northeast1" } # プロバイダプラグインとTerraform CLIのバージョンを指定 terraform { required_providers { google = { source = "hashicorp/google" version = "~> 6.10.0" } } required_version = "~> 1.9.0" } # リソース定義部分をコメントアウト # resource "google_pubsub_topic" "sample" { # name = "sample" # labels = { # name = "aiueo" # } # }
- 以下のコマンドを実行し、更新内容を反映
terraform apply
トピックが削除された
おわりに
本投稿では、Terraformを使ってGCP環境を構築する手順を紹介しました。Terraformを利用し、インフラ環境をコードとして定義することで、インフラの構築・管理を効率的に行うことが可能となります。皆様もぜひ、Terraformによるインフラ構築にチャレンジしてみてください。