aws-cli セットアップ 【AWS】

# やりたいこと
aws-cli のセットアップ（インストール〜認証情報の設定）を行う。

# やりかた

## :gem:アクセスキーの作成
ご自身のIAM Userのマネジメントコンソールにて、
「セキュリティ認証情報」>「アクセスキー」>「アクセスキーを作成する」
から、アクセスキーとシークレットキーを作成し、手元に控えておいてください。

作成途中で「主要なベストプラクティスと代替案にアクセスする」という画面でユースケースを選択させられますが、
「`コマンドラインインターフェイス (CLI)`」を選んでください。


## :gem:aws-cliのインストール
最新バージョンのインストーラーは[公式ドキュメント](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html#getting-started-install-instructions)に掲載されています。
インストーラーを起動するとウィンドウが開くので、手順に従って進めます。

versionが表示されればOKです。
```
❯ aws --version
aws-cli/2.9.23 Python/3.9.11 Darwin/21.3.0 exe/x86_64 prompt/off
```

※
クラスメソッドさんの記事「[M1 MacBook に AWS CLI v2 をインストール（v1 から移行）する
](https://dev.classmethod.jp/articles/installing-aws-cli-v2-on-m1-macbook-migrating-from-v1/)」によると、Homebrewでaws-cliをインストールすることはできるが、AWS公式から提供されたものではないそうです。



## :gem:認証情報の設定

`aws configure list`で、現在適用されている設定を確認できます。
まだ何も設定していないので、Noneが表示されています。

```bash
❯ aws configure list   

      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                <not set>             None    None
access_key                <not set>             None    None
secret_key                <not set>             None    None
    region                <not set>             None    None
```

ところで、設定を追加する際は「プロファイル」というものを設定したり設定しなかったりできます。
「プロファイル」を使うと、名前付きの設定を登録することができます。複数のアクセスキーを使い分けたい場合に有効です。



### プロファイルを指定せずに認証情報を登録
プロファイルを指定せずに設定を登録してみます。
この場合`default`というプロファイル名で登録されます。

`aws configure`で、認証情報を登録できます。

- AWS Access Key ID　：先程手元に控えたアクセスキー
- AWS Secret Access Key　：先程手元に控えたシークレットキー
- Default region name　：デフォルトでリクエストを送信するリージョン
- Default output format　：出力結果の形式。（json, yaml, text, tableが指定できる模様。[公式ドキュメント](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-usage-output-format.html)）

```bash
❯ aws configure

AWS Access Key ID [None]: xxxxxx 
AWS Secret Access Key [None]: xxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]:
```


認証情報を登録すると、`~/.aws`配下にファイルが作成されます。

```bash
❯ cat ~/.aws/credentials

[default]
aws_access_key_id = xxxxxx
aws_secret_access_key = xxxxxx
```

```bash
❯ cat ~/.aws/config                                 

[default]
region = ap-northeast-1
```

これらのファイルについての詳細は、引用してばかりで恐縮ですがクラスメソッドさんの「[AWS CLI のコンフィグファイルと環境変数とコマンドラインオプションで指定できる内容をまとめて確認してみた](https://dev.classmethod.jp/articles/aws-cli-configuration-file-env-option/)」という記事が大変わかりやすかったです。

### プロファイルを指定して認証情報を登録
次はプロファイルを指定して設定を登録してみます。


`aws configure`に`--profile`オプションをつけることで、プロファイルを指定できます。
```bash
❯ aws configure --profile hoge

AWS Access Key ID [None]: yyyyyy
AWS Secret Access Key [None]: yyyyyy
Default region name [None]: ap-northeast-1
Default output format [None]:
```

最初に追加したdefaultの下に、プロファイル「hoge」の情報が追記されているのが確認できます。

```bash
❯ cat ~/.aws/credentials

[default]
aws_access_key_id = xxxxxx
aws_secret_access_key = xxxxxx
[hoge]
aws_access_key_id = yyyyyy
aws_secret_access_key = yyyyyy

```

```bash
❯ cat ~/.aws/config              

[default]
region = ap-northeast-1
[profile hoge]
region = ap-northeast-1
```

## :gem:認証情報の使用方法

プロファイルを指定してコマンドを実行したい際は、以下の２つの方法があります。


方法１：実行時に`--profile`オプションをつける
```bash
❯  aws s3 ls --profile hoge
```

方法２：環境変数を設定する。
```bash
❯ export AWS_PROFILE=hoge
```

```bash
# 現在適用されている設定を確認
❯ aws configure list

      Name                    Value             Type    Location
      ----                    -----             ----    --------
   profile                    hoge              env    ['AWS_PROFILE', 'AWS_DEFAULT_PROFILE']
 （略）
```


## :gem:その他コマンド

登録されている認証情報の一覧を見たいときは以下です。
```bash
❯  aws configure list-profiles                  

default
hoge
```



# 参考
- 公式ドキュメント
    - 「[AWS CLI の最新バージョンを使用してインストールまたは更新を行う](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/getting-started-install.html)」
- クラスメソッド株式会社 
    - 「[M1 MacBook に AWS CLI v2 をインストール（v1 から移行）する](https://dev.classmethod.jp/articles/installing-aws-cli-v2-on-m1-macbook-migrating-from-v1/)」
    - 「[AWS CLI のコンフィグファイルと環境変数とコマンドラインオプションで指定できる内容をまとめて確認してみた](https://dev.classmethod.jp/articles/aws-cli-configuration-file-env-option/)」