Azure StorageでTerraformの状態管理ファイルterraform.tfstateを管理する方法

このブログをご覧のみなさん、こんにちは。

Terraformでインフラを構築する方法 part.2で書いた通り、Atlasを使わずに管理する方法です。

以下は、HashiCorpの公式サイトにあるTerraformのRemote State Backend: azure – Terraform by HashiCorpを実践した内容になります。

Environment

Terraform Remote on Azure Storage

Example Usageに記載の通り、以下を実行します。

$ terraform remote config 
  -backend=azure 
  -backend-config="storage_account_name=[作成したAzure Storageのアカウント]" 
  -backend-config="container_name=[作成したAzure Storageのコンテナ名]" 
  -backend-config="key=[好きな名前 リポジトリ名.terraform.tfstate とかがオススメ]"

もし、Azure Resource Manager Credentialsで認証する場合は、resource_group_nameも必要になり、実行コマンドは以下になります。

$ terraform remote config 
  -backend=azure 
  -backend-config="storage_account_name=[作成したAzure Storageのアカウント]" 
  -backend-config="container_name=[作成したAzure Storageのコンテナ名]" 
  -backend-config="key=[好きな名前 リポジトリ名.terraform.tfstate とかがオススメ]"
  -backend-config="resource_group_name=[リソースグループ名]"

この時、以下の4つの環境変数が必要になります。それぞれの環境変数にどういった値を設定すればいいかわからない場合は、Creating Credentialsを参照してください。

  • ARM_SUBSCRIPTION_ID: そのまま
  • ARM_CLIENT_ID: そのまま
  • ARM_CLIENT_SECRET: そのまま
  • ARM_TENANT_ID: そのまま
  • ARM_ACCESS_KEY: Storageアカウントのアクセスキー

エラーなく、コマンドが実行できると、以下のようになります。

$ terraform remote config 
  -backend=azure 
  -backend-config="storage_account_name=[作成したAzure Storageのアカウント]" 
  -backend-config="container_name=[作成したAzure Storageのコンテナ名]" 
  -backend-config="key=[好きな名前 リポジトリ名.terraform.tfstate とかがオススメ]"
  -backend-config="resource_group_name=[リソースグループ名]"
Remote configuration updated
Remote state configured and pulled.
$ terraform remote pull
Local and remote state in sync
$ terraform remote push
State successfully pushed!

これができるようになると、以下の順番でコマンドを実行していくことで、複数人やCIでTerraformを管理ができるようになります。

  1. terraform remote config
  2. terraform remote pull
  3. terraform plan/apply
  4. terraform remote push