AWS CLI V2にアップグレード

# 2020/02/14 追記
こちらはGAになる前のAWS CLI v2のインストール手順 & 使用した所感です。
AWS CLI v2 GA版については [公式](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/install-cliv2-mac.html) にインストール手順が公開されていますのでそちらを参考にしてください。
GA版はzshでもインストールできます。

GA版のインストール手順とクレデンシャル管理方法については [AWS CLI v2とaws-vaultとpecoを使ってプロファイルを選択方式にする](https://qiita.com/Ricordanza/items/fb873407b57089300748) で紹介しています。

# はじめに
AWS CLI v2がリリースされていたので遅ればせながらインストールしてみた。
インストール手順は[ここ](https://aws.amazon.com/jp/blogs/developer/aws-cli-v2-development/)を参考にしています。

# tl;dr
- 公式ドキュメントにあるアップグレードの手順は `bash` 
- yaml形式でアウトプットできる
- Management Consoleを使って作ったクレデンシャルのcsvをそのままインポートできる。
- インポートすると prefix + ユーザー名の形式でプロファイルが作られる
- 個人的にファイルに平文でクレデンシャルを保管するのが気持ち悪いので `configure import` 使う機会はすくなそう

# アップグレード

## 前提
- macOS 10.13.6 High Sierra
- aws-cli/1.16.71 Python/3.6.6 Darwin/17.7.0 botocore/1.12.61

## インストール手順
v1を最新にしてからv2にアップデートするだけ。楽ちん。

```
$ pip install -U awscli 
$ pip install -e git://github.com/aws/aws-cli.git@v2#egg=awscli
```

zshをつかうとv2へのアップデートで怒られたのでおとなしくbashで作業をおこなった。

```
$ pip install -e git://github.com/aws/aws-cli.git@v2#egg=awscli
zsh: no matches found: git://github.com/aws/aws-cli.git@v2#egg=awscli
```

バージョン確認。こんな感じ。

```
$ aws --version
aws-cli/2.0.0dev0 Python/3.6.6 Darwin/17.7.0 botocore/1.12.48
```

# 利用

## yaml形式のアウトプット

### v1
当然エラー

```
$ aws ec2 describe-availability-zones --output yaml                                                      
usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help
aws: error: argument --output: Invalid choice, valid choices are:

json                                     | text
table
````

### v2
ymal形式で表示された。個人的にはyamlはわかりやすくてすき

```
$ aws ec2 describe-availability-zones --output yaml
AvailabilityZones:
- Messages: []
  RegionName: ap-northeast-1
  State: available
  ZoneId: apne1-az4
  ZoneName: ap-northeast-1a
- Messages: []
  RegionName: ap-northeast-1
  State: available
  ZoneId: apne1-az1
  ZoneName: ap-northeast-1c
- Messages: []
  RegionName: ap-northeast-1
  State: available
  ZoneId: apne1-az2
  ZoneName: ap-northeast-1d
```

textだとこんなかんじ。

```
$ aws ec2 describe-availability-zones --output text 
AVAILABILITYZONES	ap-northeast-1	available	apne1-az4	ap-northeast-1a
AVAILABILITYZONES	ap-northeast-1	available	apne1-az1	ap-northeast-1c
AVAILABILITYZONES	ap-northeast-1	available	apne1-az2	ap-northeast-1d
```

## configure import 

クレデンシャル情報を取り込んでみる。 
ファイルはこんな感じ

```credentials.csv 
User name,Password,Access key ID,Secret access key,Console login link
ricordanza,,AKIXXXXXXXXXXXXXXXXX,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx,https://000000000000.signin.aws.amazon.com/console
```

コマンド発行時にファイルを指定するとクレデンシャルをインポートする事ができる。楽。

``` 
$ aws configure import --csv  file://PATH/TO/credentials.csv --profile-prefix sample_
Successfully imported 1 profile(s)
```

こんな感じで設定が追加される。

```.aws/credentials
[sample_ricordanza]
aws_access_key_id = AKIXXXXXXXXXXXXXXXXX
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
```

楽に取り込めるのはありがいけど、平文管理がいやなので、個人的には envchain か HashiCorp Vault で管理することが多い。
envchain か HashiCorp Vaultにインポートするためのツールをつくろうかな。

## その他
他にも色々と機能が増えているようなので、おいおい試してみる。