AWS CLIで複数の認証情報を切り替える際にプロファイルを指定するのが大変そうなので現在いるGitのリポジトリから自動指定する


AWS CLIで複数の認証情報を切り替える際にプロファイルを指定するのが大変そうなので現在いるGitのリポジトリから自動指定できると良いなと思いました。

複数のプロファイルを用意

まず複数の認証情報を設定ファイルに記述します。

aws-cliにて、複数の認証情報を使い分けたい場合の設定方法

~/.aws/config
[profile repo1]
output = json
region = {リージョン}

[profile repo2]
output = json
region = {リージョン}
~/.aws/credentials
[repo1]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}

[repo2]
aws_access_key_id = {アクセスキー}
aws_secret_access_key = {シークレットキー}

awsコマンドで--profile指定が自動で出るように調整します。

~/.bashrc
$ alias aws='aws --profile=$(basename $(git rev-parse --show-toplevel 2>/dev/null || echo "default"))'
サブコマンド 説明
git rev-parse --show-toplevel 現在位置のGitのリポジトリ名を取得
2>/dev/null || echo "default" Gitじゃなければdefaultプロファイルを使う

実行例

$ cd ~/git/repo1
$ aws s3 ls
2018-01-01 repo1_dir1
2017-01-01 repo1_dir2
2016-01-01 repo1_dir3
.....


$ cd ~/git/repo2
$ aws s3 ls
2018-01-01 repo2_dir1
2017-01-01 repo2_dir2
2016-01-01 repo2_dir3
.....

これで認証情報の切り替えが捗りそうでした!

経緯

AWS CLIを使う機会があったんですが、「プロジェクトごととかで認証情報を切り替えるの大変だよね」という話があって、カレントディレクトリで切り替え出来ないかなと思いました。
「herokuコマンドやWP-CLIコマンドが現在位置の設定ファイルをデフォルトで読み込むので便利だなぁ」ということで、そこに似せてみました。
「現在ディレクトリのリポジトリ名 = プロファイル名」として、リポジトリ名ごとにプロファイルを作成して対応させます。