AWS
aws-cli

Defaultのプロファイル依存のコマンドがあっても確実にAWSプロファイルを切り替える

最近シェルを書くのが楽しいjustInCaseの@hirogaです。

AWSのプロファイル切り替えで事故ることが多かったので、確実に切り替えるためのスクリプトを書きました! ウチではこうしている、などご意見大歓迎です。


TL;DR

~/.aws/config~/.aws/credentials をリンク化します。


コード

#!/bin/bash

# asu (AWS Switch User)
set -e
user=$1

ln -f ~/.aws/${user}.config ~/.aws/config
ln -f ~/.aws/${user}.credentials ~/.aws/credentials

export -n AWS_ACCESS_KEY_ID
export -n AWS_SECRET_ACCESS_KEY
export -n AWS_SESSION_TOKEN
export -n AWS_DEFAULT_PROFILE
export -n AWS_DEFAULT_REGION
export -n AWS_DEFAULT_OUTPUT
export -n AWS_SHARED_CREDENTIALS_FILE
export -n AWS_CONFIG_FILE

aws configure list

こんな感じで使います。

asu develop-user


解説

複数のAWSプロファイルを切り替えて使うなら、コマンドの末尾に --profile USERNAME とするのが最も確実だと思います。

でも、チームメンバーが共用で利用しているスクリプトが AWS_DEFAULT_PROFILE 依存だったら困りますよね? ※1

他にも、プロファイルを環境変数から設定するパターンもあります。(CircleCIでのデプロイをローカル実行するケースなど...)

そんなケースに対応するべく作りました。

※1 本来は~/.aws/config内に記述するプロファイル名をチームで揃える、などの運用が正しいかもしれませんね。ご意見募集です!


細かいこだわりポイント



  • ${user}.configconfig.${user} で迷いましたが、拡張子が違うとアイコンが変わって紛らわしいので前者にしました。

  • ハードリンクかシンボリックリンクかで迷いましたが、対象のプロファイルがないときにはリンクでコケて欲しかった + config/credentialsだけDockerでvolumeするケースを想定してハードリンクにしました。

  • そのほかの環境変数は事故の元なので全部消しました。