🔖

direnvを用いた複数aws profileの利用

2022/09/20に公開

概要

下記の問題を、direnvを用いてそのディレクトリ以下は自動的にセットされたprofileを使うという方法により解消したメモ

背景となる面倒

aws {command} --profile {aws環境名} と引数渡してaws cli利用するのは面倒。
現在のディレクトリでどのprofile使ってるかわからなくなる。

こんな方へ

  • フリーランスのため複数aws環境を利用している。
  • 会社においてsandbox含め複数のaws環境を利用している。

前提

direnv

それぞれの環境(os/shell)で頑張ってインストール&利用できる環境を設定してね →こちら

そして、direnvによりこんなことできます →こちら

.aws/credentials

こんなふうに設定されてると思います。

[default]
aws_access_key_id=AKIAAAAAAAAAAAAAAAA
aws_secret_access_key=foofoofoofoo

[foo]
aws_access_key_id=AKIAAAAAAAAAAAAAAAA
aws_secret_access_key=foofoofoofoo

[bar]
aws_access_key_id=AKIBBBBBBBBBBBBBBBB
aws_secret_access_key=barbarbarbar

aws環境ごとにディレクトリ切る

(mac環境でやってます)

$ pwd
/Users/harashun11/Workspace

# ディレクトリ作成
$ mkdir foo bar

.envrcを記述

AWS_PROFILEを指定する

$ cd foo
$ vi .envrc

credentialsで定義した名前を指定

export AWS_PROFILE=foo

barディレクトリも同様に

export AWS_PROFILE=bar

終了

動作確認

$ cd /Users/harashun11/Workspace/foo
direnv: error /Users/harashun11/Workspace/foo/.envrc is blocked. Run `direnv allow` to approve its content
$ direnv allow
direnv: loading ~/Workspace/foo/.envrc
direnv: export +AWS_PROFILE

OK

注意

実際はこの環境下で言えば、
/Users/harashun11/Workspace/foo/foo1/.envrc
としてfoo1というrepository下に.envrcを作成するはず。その場合このままでは親階層の.envrcは読んでくれない。
なので、/Users/harashun11/Workspace/foo/foo1/.envrcにこのように記載する

# 階層を遡って直近の .envrc が自動でロード
source_up

export TEST=test

とすると

$ cd /Users/harashun11/Workspace/foo/foo1
direnv: loading ~/Workspace/foo/foo1/.envrc
direnv: loading ~/Workspace/foo/.envrc
direnv: export +AWS_PROFILE +TEST

とできる。

参考

https://qiita.com/ngyuki/items/fda1bbf29384bef7a805

最後に

foo1にsource_upを書くの面倒。foo2で忘れそう。なので、ほかいろいろやり方あったら教えて下さい

Discussion