AWS の設定(プロファイル)をコマンドで簡単に切り替える方法

2021-09-06AWS,Bash

はじめに

管理するクラウド上のシステムが増えてくると、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 からまた MARKDOWN_HASHbb30e85411b56df41296726ab445dc8fMARKDOWNHASH 利用が主流なのでしょうか。この辺のトレンドに疎く。。。

セットアップ

軽微な設定を行います。

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 表示設定を加え、どのプロファイルを利用中かがわかるようにしています。

間違って別環境に対して誤操作してしまったら怖いですからね。

2021-09-06AWS,Bash