よっしー
こんにちは。よっしーです(^^)
今日は、Terraformでの状態管理について解説しています。
背景
下記のサイトを参考に実施したときの内容を自身のGCPプロジェクトに適用したときの内容を備忘として残しました。
実施内容
下記の手順で実施しました。
mkdir `作業ディレクトリ`
cd `作業ディレクトリ`
# terraformのバージョン指定
asdf local terraform 1.9.2
# terraformのバージョン確認
terraform --version
asdf local gcloud 482.0.0
asdf local python 3.12.4
# gcloudのバージョン確認
gcloud --version
# 操作アカウントの設定
gcloud config set account `アカウント`
# 操作アカウントの確認
gcloud config get-value account
# プロジェクト新規作成
gcloud projects create `プロジェクト`
# プロジェクトの情報確認
gcloud projects describe `プロジェクト`
# プロジェクトの設定
gcloud config set project `プロジェクト`
# 請求先アカウントの確認
gcloud beta billing accounts list
# 請求先アカウントのリンク
gcloud beta billing projects link `プロジェクト` --billing-account=`請求先アカウント`
# サービスの有効化
gcloud services enable compute.googleapis.com
# tfファイルの準備
touch main.tf
各ファイルの内容は下記になります。
main.tf
provider "google" {
project = "# 実際のプロジェクト ID に置き換え"
region = "REGION"
}
resource "google_storage_bucket" "test-bucket-for-state" {
name = "# 実際のプロジェクト ID に置き換え"
location = "US"
uniform_bucket_level_access = true
}
terraform {
backend "local" {
path = "terraform/state/terraform.tfstate"
}
}
上記のファイルを作成後、下記のコマンドを実行します。
# 初期化
terraform init
# 実行プランの作成
terraform plan
# 変更を適用
terraform apply
# 状態ファイルの確認
terraform show
解説
main.tf
このコードはTerraformの設定ファイルの一部で、Google Cloud Platformのリソースを管理するためのものです。以下に各セクションの解説をします:
- プロバイダの設定:
provider "google" {
project = "# 実際のプロジェクト ID に置き換え"
region = "REGION"
}
- Google Cloud Platformをプロバイダとして使用することを指定しています。
project
にはGCPのプロジェクトIDを設定します。region
には使用するリージョンを指定します。
- Cloud Storageバケットの作成:
resource "google_storage_bucket" "test-bucket-for-state" {
name = "# 実際のプロジェクト ID に置き換え"
location = "US"
uniform_bucket_level_access = true
}
google_storage_bucket
リソースを作成しています。name
にはバケットの名前を指定します(グローバルで一意である必要があります)。location
は”US”に設定されており、米国内にバケットが作成されます。uniform_bucket_level_access
をtrue
に設定することで、バケットレベルのアクセス制御を有効にしています。
- Terraformのバックエンド設定:
terraform {
backend "local" {
path = "terraform/state/terraform.tfstate"
}
}
- Terraformの状態ファイルをローカルに保存する設定です。
path
で指定されたローカルのパスに状態ファイルが保存されます。
このコードを使用する際は、コメントで示されている箇所を実際の値に置き換える必要があります。特に、プロジェクトIDとバケット名は適切な値に変更してください。
localバックエンド
terraformにおけるlocalバックエンドについて説明します。
- 概要:
localバックエンドは、Terraformの状態ファイル(state file)をローカルファイルシステムに保存するための最も基本的なバックエンド方式です。 - 特徴:
- シンプル: 設定が簡単で、追加のインフラストラクチャを必要としません。
- ローカル保存: 状態ファイルはローカルマシンに保存されます。
- 単一ユーザー向け: 主に個人開発や小規模なプロジェクトに適しています。
- 設定方法:
terraform {
backend "local" {
path = "パス/ファイル名.tfstate"
}
}
path
パラメータで、状態ファイルを保存する場所とファイル名を指定します。
- メリット:
- セットアップが容易
- 追加のコストがかからない
- ネットワーク接続を必要としない
- デメリット:
- チーム開発には適さない(状態ファイルの共有が困難)
- バージョン管理が難しい
- バックアップやセキュリティ面で懸念がある
- 使用シナリオ:
- 個人的な学習や実験
- 小規模なプロジェクト
- CI/CDパイプラインの一部として使用(ただし、注意が必要)
- 注意点:
- 状態ファイルには機密情報が含まれる可能性があるため、適切なアクセス制御が必要です。
- ローカルマシンの故障や誤削除のリスクがあるため、定期的なバックアップを検討すべきです。
localバックエンドは簡単に使用できますが、大規模なプロジェクトやチーム開発では、リモートバックエンド(例:S3、GCS、Terraformクラウドなど)の使用を検討することをお勧めします。
おわりに
今日は、Terraformでのモジュール操作について解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント