· 自動化とスケジューリング · 4 min read
Terraform: Google Cloud リソースの Infrastructure as Code の実践
Terraformを使用してGoogle Cloudリソースを効率的に管理する方法と、Infrastructure as Codeの実践的なアプローチを解説します。

Infrastructure as Code (IaC) と Terraform
Infrastructure as Code(IaC)は、インフラストラクチャの構成をコードで管理する手法です。Terraformは、HashiCorpが開発したオープンソースのIaCツールで、複数のクラウドプロバイダーをサポートしています。Google Cloudリソースの管理に特に適しており、効率的で再現性の高いインフラ構築を可能にします。
Terraform で Google Cloud を管理するメリット
- バージョン管理: Gitなどを使用してインフラの変更履歴を追跡
- 一貫性: 環境間で同一の構成を維持
- 自動化: CI/CDパイプラインとの統合が容易
- 可視性: インフラ構成をコードで明示的に記述
Terraform の基本的な使い方
1. Terraform の初期化
プロジェクトディレクトリで以下のコマンドを実行し、Terraformを初期化します。
terraform init
2. Google Cloud プロバイダーの設定
main.tf
ファイルにGoogle Cloudプロバイダーを設定します。
terraform {
required_providers {
google = {
source = "hashicorp/google"
version = "~> 4.0"
}
}
}
provider "google" {
project = "your-project-id"
region = "us-central1"
}
3. リソースの定義
Google Cloudリソースを定義します。例えば、Cloud Storage バケットを作成する場合:
resource "google_storage_bucket" "example_bucket" {
name = "example-terraform-bucket"
location = "US"
}
4. 計画と適用
変更内容を確認し、適用します。
terraform plan
terraform apply
実践的な Terraform の使用例
1. VPC ネットワークの構築
resource "google_compute_network" "vpc_network" {
name = "terraform-network"
auto_create_subnetworks = false
}
resource "google_compute_subnetwork" "subnet" {
name = "terraform-subnet"
ip_cidr_range = "10.0.1.0/24"
region = "us-central1"
network = google_compute_network.vpc_network.id
}
2. Cloud SQL インスタンスの作成
resource "google_sql_database_instance" "main" {
name = "main-instance"
database_version = "POSTGRES_13"
region = "us-central1"
settings {
tier = "db-f1-micro"
}
}
3. Cloud Functions のデプロイ
resource "google_storage_bucket" "function_bucket" {
name = "cloud-function-bucket"
}
resource "google_storage_bucket_object" "function_archive" {
name = "function.zip"
bucket = google_storage_bucket.function_bucket.name
source = "./function.zip"
}
resource "google_cloudfunctions_function" "function" {
name = "terraform-function"
description = "Function created by Terraform"
runtime = "python39"
available_memory_mb = 128
source_archive_bucket = google_storage_bucket.function_bucket.name
source_archive_object = google_storage_bucket_object.function_archive.name
trigger_http = true
entry_point = "hello_world"
}
ベストプラクティス
- モジュール化: 再利用可能なコンポーネントを作成
- 変数の使用: 環境ごとの違いを変数で管理
- リモートステート: Terraformの状態をリモートで安全に管理
- ワークスペース: 複数の環境(開発、本番など)を管理
セキュリティの考慮事項
- IAM: 適切な権限設定でTerraformの実行を制限
- 機密情報: 環境変数や暗号化されたファイルで管理
- アクセス制御: リモートステートへのアクセスを制限
まとめ
TerraformをGoogle Cloud リソースの管理に活用することで、効率的で一貫性のあるインフラストラクチャ管理が可能になります。適切な計画と実装により、スケーラブルで保守性の高いIaCプラクティスを確立できます。
Terraformと Google Cloud の詳細については、以下の書籍がおすすめです: