💨
Terraform - direnvでフォルダごとにgcpやawsのconfigを切り替えよう
何?
- terraformをローカルで運用していると、devやprod環境ごとに、GCPやAWSのプロバイダのconfigを切り替えたくなる
- いちいちコマンドを叩いて現在の設定を書き換えるのは面倒だし、異なる環境に対して誤った設定をしてしまう可能性もある
- direnvを使うとフォルダ移動で自動でconfigを適用することができる
前提
以下がインストールされている
-
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