AWSの設定(プロファイル)をコマンドで簡単に切り替える方法
はじめに
管理するクラウド上のシステムが増えてくると、AWS の設定(プロファイル)の切り替えが頻発してきます。
aws では、設定情報+認証情報をそれぞれ以下のファイルで管理しています。
- `~/.aws/config
~/.aws/credentials
僕の Mac の設定ファイルはそれぞれ以下のようになっています。 ( セキュアな情報のため、一部マスキング OR 変換しています。 )
$ cat ~/.aws/config
[default]
region = ap-southeast-1
output = json
[profile project-production]
region = ap-northeast-1
output = json
[profile project-staging]
region = ap-northeast-1
output = json
[profile project-development]
region = ap-northeast-1
output = json
$ cat ~/.aws/credentials
[default]
aws_access_key_id = ********************
aws_secret_access_key = ****************************************
[project-production]
aws_access_key_id = ********************
aws_secret_access_key = ****************************************
[project-staging]
aws_access_key_id = ********************
aws_secret_access_key = ****************************************
[project-development]
aws_access_key_id = ********************
aws_secret_access_key = ****************************************
僕の Mac には AWS 接続用のプロファイルが 4 つ 存在していることになります。
以下のようなコマンドを実行した場合は default のプロファイルが利用されます。
$ aws s3 ls
*default** 以外のプロファイルを利用したい場合は以下のように --profile
オプションを指定します。
$ aws s3 ls --profile project-development
この --profile
オプションを毎回付与するのは面倒ですね。
もっとかんたんに、 aws
コマンド実行時の環境を切り替えられるようにしてみたいと思います。
検証環境
$ uname -moi
x86_64 MacBookPro16,1 Darwin
$ zsh --version
zsh 5.8 (x86_64-apple-darwin19.6.0)
$ yarn --version
1.22.11
1. "AWSP" を使う
AWS ( AWS Profile Switcher ) というツールを使うことが今回の問題を解決にするためにぴったりでした。
導入前にですが、 AWS のプロファイルが複数存在し、これを切り替える必要がない場合は当然ながら導入は不要 です。
インストール
公式ページには以下のコマンドが掲載されていました。
# npm コマンドの事前インストールが必要
$ npm install -g awsp
僕は YARN を使うことが多いので、以下のコマンドでインストールしました。
# yarn コマンドの事前インストールが必要
$ yarn global add awsp
余談ですが、最近は yarn
からまた npm
利用が主流なのでしょうか。この辺のトレンドに疎く。。。
セットアップ
軽微な設定を行います。
alias
を設定し、 エイリアス経由で呼び出すような使い方とのことです。
以下のエイリアスを ~/.bashrc
あるいは ~/.zshrc
に追記しておきます。
alias awsp="source _awsp"
設定後は新しくターミナルを立ち上げ直すとよいでしょう。
使い方
以下のコマンドを実行します。
$ awsp
すると、選択式のインタラクティブなメッセージが表示されるので、上下キーあるいは vi
操作のように j
/ p
で上下して、自分 g あ切り替えたいプロファイルを先 t なくして ENTER
キーを押します。
AWS Profile Switcher
? Choose a profile (Use arrow keys)
project-production
❯ project-staging
project-development
default
ここでは project-staging
が選択された状態となっています。
この状態で aws
コマンドを使った場合、 --profile
オプションの有無に関わらず project-staging
プロファイルが利用された状態となります。
# 以下のいずれも同じ結果となります
$ aws s3 ls
$ aws s3 ls --profile project-staging
からくり
仕掛けは単純。
AWS_PROFILE
という環境変数が設定されている場合、 aws
コマンドは --profile $AWS_PROFILE
というオプションが設定されているものとして動作します。
試しに awsp
コマンド実行後に環境変数を表示してみると、たしかに想定された値がセットされています。
$ echo $AWS_PROFILE
project-staging
2. 使ってみたが肌に合わない / fzf
が好きな人向け
使ってみたはいいですが、使い勝手が僕にはあいませんでした。
というのも、コマンドラインが fzf
に最適化されすぎているためです。
awsp
と入力したあとで、無意識にプロファイル名の一部を入力し、絞り込みしようとしてしまうのです。
そんな僕は、結局かんたんなシェルコマンド + fzf の設定を選択しました。
$ alias awsp='export AWS_PROFILE=$(sed -n "s/\[\(profile \)\?\|\]//gp" ~/.aws/config | fzf)'
これを ~/.bashrc
あるいは ~/.zshrc
に追記します。
これこれ!という使い勝手!
ひとこと
更に、ZSH のプロンプトテーマとして以下のものを使っていて、この AWS Profile 表示設定を加え、どのプロファイルを利用中かがわかるようにしています。
間違って別環境に対して誤操作してしまったら怖いですからね。
ディスカッション
コメント一覧
まだ、コメントがありません