〇野比太「〇〇えもん〜、複数のIAMを楽にスイッチしたいよー」

## 自己紹介
おはようございます。こんにちは。こんばんは。
株式会社プロトソリューション(沖縄)で自社開発チームに所属しているスナガワです。
みなさま、よいBeer Time🍺な日々をおくれてますか？

## 本記事について
本記事では以下の悩みを持った方へ小技を紹介する感じです。
- 管理するAWSアカウントが増えてきたよー
- AWS CLIを使用する際、毎回profileを指定するの面倒くさいよー
- かといって、環境変数で切り替えるのも面倒くさいよー
- もっと楽に、profileを指定せずスイッチしたいよー
- どうにかしてよー、ドラ○もん〜


## 環境
ちなみに環境は以下の感じです。
```zsh
$ sw_vers
ProductName:	macOS
ProductVersion:	12.6
BuildVersion:	21G115

$ echo $SHELL
/bin/zsh

$ node -v
v16.17.1

$ npm -v
8.15.0
```
## ある日のやりとり
※あの見慣れたやり取り風でご紹介します、読み飛ばしたい方は[導入手順](#導入手順)を参照

### 登場人物(むるうちなーんちゅ)
- 栄野比太(えのびた)：沖縄県うるま市在住の新人5年目
- ナハえもん(なはえもん)：沖縄県那覇市からきた栄野比太の上司
- ジャイアント比嘉(じゃいあんとひが)：大きい人。栄野比太の同僚

### 定時後の夕暮れ
栄野比太　「ナハえもん〜」

ナハえもん「どうしたんだい、栄野比太くん」

栄野比太　「ジャイアント比嘉がブチギレしてくるんだよ〜」

ナハえもん「なにがあったんだい」

栄野比太　「あのね。aws cliコマンドを使ってS3のbucketを確認しようと思ったんだけど」
　　　　　「ジャイアント比嘉が作成したbucketが見つからなかったんだ」

ナハえもん「どんなコマンドを使用したんだい？」

・栄野比太は、使用したコマンドをみせた
```zsh
$ aws s3 ls
2018-12-11 17:08:50 enobita-bucket
2018-12-14 14:55:44 enobita-bucket2
```
栄野比太　「今朝、ジャイアント比嘉から新しいAWSアカウントをもらったんだ」

ナハえもん「ふむふむ」

栄野比太　「その情報を`config` `credentials`にも追加したんだけど、、」
```zsh:config
$ cat ~/.aws/config
[default]
region = ap-northeast-1
output = json

[profile giant-higa]
region = ap-northeast-1
output = json
```
```zsh:credentials
$ cat ~/.aws/credentials
[default]
aws_access_key_id = xxxxxxxxxxxxxxxxxxxx
aws_secret_access_key = nnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnnn

[giant-higa]
aws_access_key_id = zzzzzzzzzzzzzzzzzzzz
aws_secret_access_key = mmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmmm
```
栄野比太　「この状態でaws s3 lsコマンドを叩いても`giant-higa-buket`がなくて、、、」
　　　　　「それをジャイアント比嘉に言ったらメタクソ怒られたんだ。」

ナハえもん「なぁんだ。そんなことか〜」
　　　　　「そんなときは、`--profile`オプションを付けて名前を指定すればいいんだよ」
　　　　　「追加したprofile名の`giant-higa`を指定するんだ」
```zsh
$ aws s3 ls --profile giant-higa
2018-12-04 19:05:48 giant-higa-bucket
2020-11-10 07:12:20 giant-higa-bucket2
```
:::note warn
`--profile`オプション無しで実行した場合、defaultで設定されているIAMで実行されます
:::
栄野比太　「へぇ〜profileを指定する必要があったんだね」

ナハえもん「ためになったね〜」

:::note info
ちなみに
環境変数のAWS_PROFILEをセットすればdefaultが変更されるため
`--profile`オプション無しで実行しても`giant-higa`のprofileが適用された結果になります
```zsh
$ export AWS_PROFILE=giant-higa
$ aws s3 ls
```
:::


### しばらく経って、定時後の夕暮れ
栄野比太　「ねぇ、ねぇナハえもん助けてよ〜」

ナハえもん「今度はどうしたんだい栄野比太くん」

栄野比太　「実はねぇ。他にも新しいIAMをもらって、、、」
　　　　　「作業のたびに`--profile`オプションを指定するのがしんどくなってきたんだ」
　　　　　「もっと楽に仕事がしたいよー」
　　　　　「不労所得がほしいよー」

ナハえもん「なぁんだ。そんなことか〜　※不労所得のくだりは無視して」
　　　　　「そんなときはこれ！」　テッテレー♪
　　　　　「[awsp](https://github.com/johnnyopao/awsp) コマンドーーー」

栄野比太　「なにそれ。ひみつ道具ちゃうんかい」

ナハえもん「複数のIAM(プロファイル)を楽にスイッチできるツールやさ！」
　　　　　（ひみつ道具にたよんなや。ITで解決せぇや）

## 導入手順
:::note warn
事前にnode・npmのインストールが必要です
:::
- awspのインストール
[公式のインストール手順](https://github.com/johnnyopao/awsp#setup)(README.md)に従ってnpmでインストール


```zsh
npm install -g awsp
```

- 設定の追加
`~/.zshrc`（bash の場合 `~/.bashprofile`） に、以下を追加します
```zsh
alias awsp="source _awsp"
```
ここまで設定できたら、一旦、ターミナルを再起動して`awsp`コマンドを打ちます
```zsh
$ awsp
? Choose a profile (Use arrow keys)
❯ enobita
  giant-higa
  account-hoge1
  account-hoge2
  default

? Choose a profile enobita
```
対話シェルとなるので、プロファイルを` ❯ `で選択してEnter
```zsh
? Choose a profile enobita
```
さて、プロファイルが切り替わってるか確認してみましょう
```zsh
$ echo $AWS_PROFILE
enobita
```

栄野比太　「ふぇ〜〜。便利〜。ありがとうナハえもん！」
　　　　　「んで、不労所得の件は？」

ナハえもん「しょうがないなぁ〜。そのときはこれ....」 テッテレー♪

次回に続く...

## まとめ
AWSプロファイルのスイッチには、`--profile`を指定するか、環境変数のAWS_PROFILEをセットすればOK！
もっと楽にスイッチするには`awsp`を導入してみよう！

**ちなみに**
ターミナル上で(プロンプトのテーマをいじって)どのプロファイルを選択しているか表示させることもできます。
※`aws:(プロファイル名)`のような
![](https://raw.githubusercontent.com/johnnyopao/awsp/master/screenshot.png)
[公式](https://github.com/johnnyopao/awsp#show-your-aws-profile-in-your-shell-prompt)の手順にも記載されています。この辺はまた次回にでも！！

では、よいBeer Time🍺を！
See you again.