💨

Terraform - direnvでフォルダごとにgcpやawsのconfigを切り替えよう

2024/05/24に公開

何?

  • terraformをローカルで運用していると、devやprod環境ごとに、GCPやAWSのプロバイダのconfigを切り替えたくなる
  • いちいちコマンドを叩いて現在の設定を書き換えるのは面倒だし、異なる環境に対して誤った設定をしてしまう可能性もある
  • direnvを使うとフォルダ移動で自動でconfigを適用することができる

前提

以下がインストールされている

  • direnv

    brew install direnv
    
  • gcloud cli

    • GCPを使う場合
  • aws cli

    • AWSを使う場合

GCPを使う場合

configurationを作成する

configuration の一覧表示

gcloud config configurations list

configurationの作成

# my-dev を適宜変更
gcloud config configurations create my-dev

configurationの初期化(初回のみ)

# promptに従って設定する
gcloud init

configuration の一覧表示(確認)

gcloud config configurations list

補足

configuration の削除

gcloud config configurations delete my-dev

.envrcを定義する

configを適用したいフォルダに .envrc を作成し、以下を追記

export CLOUDSDK_ACTIVE_CONFIG_NAME=my-dev

読み込まれない場合

# 許可する
direnv allow
# shell を 再起動する
exec $SHELL -l

トラブルシューティング

  • 認証が通らない
    • ADCを更新する

      gcloud auth application-default login
      
    • ADC(Application Default Credential)は、configurationsで切り替わら図、そのままのため、認証が通らない場合は再度ログインを行う必要がある。(会社のアカウントや個人のアカウントでメールアドレスが異なる場合など)

AWSを使う場合

configurationを作成する

aws configure --profile my-dev

.envrcを定義する

configを適用したいフォルダに .envrc を作成し、以下を追記

export AWS_PROFILE=my-dev

おまけ

terraformにはログレベルを設定することができ、環境変数も用意されている

Debugging | Terraform | HashiCorp Developer

.envrc に以下のように定義することで、デバッグログを特定のファイルに書き出すこともできる

export TF_LOG=DEBUG
export TF_LOG_PATH=/tmp/terraform_debug.log

参考文献

Discussion