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

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