🔖
direnvを用いた複数aws profileの利用
概要
下記の問題を、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
とできる。
参考
最後に
foo1にsource_up
を書くの面倒。foo2で忘れそう。なので、ほかいろいろやり方あったら教えて下さい
Discussion