よっしー
こんにちは。よっしーです(^^)
今日は、stateファイル(tfstate)をTerraform Cloudに移行する方法について解説しています。
背景
stateファイル(tfstate)をTerraform Cloudに移行する方法について調査する機会がありましたので、その時の内容を備忘として記事に残しました。
Terraform Cloudに移行する理由
Terraform Cloudに移行する主な理由は以下のとおりです:
- 状態の一元管理:
チーム全体で一貫した状態を共有できます。これにより、複数の開発者が同じインフラストラクチャに対して作業する際の競合を減らせます。 - セキュリティの向上:
状態ファイルには機密情報が含まれることがあります。Terraform Cloudでは、これらの情報を暗号化して安全に保存します。 - バージョン管理:
状態の変更履歴を追跡でき、必要に応じて以前の状態に戻すことが可能です。 - 自動バックアップ:
状態ファイルの自動バックアップが提供されるため、データ損失のリスクが低減します。 - リモート実行:
Terraform の実行をクラウド上で行えるため、ローカル環境に依存せず、一貫した実行環境を確保できます。 - コラボレーションの改善:
チームメンバー間でのワークフローの共有や、変更のレビューが容易になります。 - アクセス制御:
誰が状態ファイルにアクセスできるかを細かく制御できます。 - 監査とコンプライアンス:
インフラストラクチャの変更履歴を追跡し、必要に応じて監査できます。 - CI/CDとの統合:
Terraform CloudはCI/CDパイプラインとの統合が容易で、インフラストラクチャの自動デプロイメントを実現できます。 - スケーラビリティ:
大規模なインフラストラクチャ管理や複雑な環境でも、効率的に運用できます。
これらの利点により、特に複数の開発者やチームが関わる大規模なプロジェクトでは、Terraform Cloudへの移行が推奨されます。ただし、小規模なプロジェクトや個人使用の場合は、ローカルでの管理で十分な場合もあります。
移行手順
GCPプロジェクトの作成
# プロジェクト新規作成
gcloud projects create terraform-20240721
terraform apply
作成したプロジェクトに terraform apply を実行しておきます。
サービスアカウント作成
# サービスアカウントの作成
gcloud iam service-accounts create sa-ft-20240721 \
--display-name="workload identity for poc-gcp-20240721"
# 作成したサービスアカウントにロール付与
gcloud projects add-iam-policy-binding terraform-20240721 \
--member serviceAccount:sa-ft-20240721@terraform-20240721.iam.gserviceaccount.com \
--role roles/compute.instanceAdmin
Workload Identity 作成
# プール作成
gcloud iam workload-identity-pools create poc-terraform-pool \
--location="global" \
--description="PoC terraform cloud 連携"
# プロバイダ作成
gcloud iam workload-identity-pools providers create-oidc terraform-20240721 \
--location="global" \
--workload-identity-pool="poc-terraform-pool" \
--issuer-uri="https://app.terraform.io" \
--attribute-mapping="google.subject=assertion.sub,attribute.terraform_workspace_name=assertion.terraform_workspace_name" \
--attribute-condition="assertion.terraform_organization_name==\"組織名\""
# サービスアカウントに紐づける
gcloud iam service-accounts add-iam-policy-binding sa-ft-20240721@terraform-20240721.iam.gserviceaccount.com \
--role=roles/iam.workloadIdentityUser \
--member="principalSet://iam.googleapis.com/projects/456853259844/locations/global/workloadIdentityPools/poc-terraform-pool/*"
Terraform Cloud に Workspace を作成
下記のワークスペースを作成
poc-gcp-20240721
Workspace に環境変数を追加
作成したワークスペースに環境変数を作成
環境変数名 | 値 |
TFC_GCP_PROVIDER_AUTH | true |
TFC_GCP_RUN_SERVICE_ACCOUNT_EMAIL | sa-ft-20240721@terraform-20240721.iam.gserviceaccount.com |
TFC_GCP_WORKLOAD_PROVIDER_NAME | projects/456853259844/locations/global/workloadIdentityPools/poc-terraform-pool/providers/terraform-20240721 |
tfファイルの修正
下記のterraformブロックに修正します。
terraform {
cloud {
organization = "組織名"
workspaces {
name = "poc-gcp-20240721"
}
}
}
terraform init
下記のコマンドを実行します。
terraform init
terraform cloud のワークスペースでstateファイルが移行されたのを確認します。
terraform.tfstateの削除
下記のコマンドを実行します。
rm terraform.tfstate
おわりに
今日は、 stateファイル(tfstate)をTerraform Cloudに移行する方法について解説しました。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント