Windows10でWSL2をインストールしAWS CLIを実行する



# 1.前提条件

今回WSL2をインストールしてAWS CLIを実行する環境は以下の通り。
 - Windows10 Pro　バージョン21H2（OSビルド19044.1526）
 - WSL未インストール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/2644e85b-6474-1900-aece-576abdde9eb4.png)

# 2.WSL2インストール
[「WSL のインストール」](https://docs.microsoft.com/ja-jp/windows/wsl/install)を参考に、WSLをインストールしていく。
管理者権限のPowerShellで以下コマンドを実行し、WSL2をインストールする。[^補足1]
[^補足1]:このコマンドはWSL がインストールされていない場合にのみ機能する。


```
wsl --install
```
このコマンドでは以下が実行される。
 - 必要なオプション コンポーネントの有効化
 - 最新 Linux カーネルのダウンロード
 - WSL 2 の既定としての設定
 - Linux ディストリビューション（既定では Ubuntu）のインストール

以下のように再起動を求められるので、端末を再起動する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/3c9d5e6d-fa11-9266-d5aa-0ec9dd0af527.png)
再起動すると以下のようにデフォルトのUNIXユーザアカウントを作成するよう求められる。Windowsのユーザ名と一致する必要はない。自由にユーザ名を入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/9b75ce50-f87c-895a-6c13-61a304e10b18.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/85cc1aca-7f77-f78a-2c72-d32ace851886.png)
パスワードを求められるので2回入力する。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/7a2255b3-c207-595a-612b-bbf703304e7d.png)
これでWSL2のセットアップが完了した。

# 3.AWS CLI v2インストール
[「Installing or updating the latest version of the AWS CLI」](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html)のLinux OSへのインストール手順を参照し、AWS CLIの最新バージョンであるv2をインストールする。

## 3-1.unzipコマンドをインストールする
WSL2で実行するUbuntuで作業する。
AWS CLIのパッケージをインストールした後unzipする必要があるので、unzipをインストールしておく。

```
sudo apt install unzip
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/1c9bea75-1bcc-3cd6-e641-b1bd14414516.png)

## 3-2.AWS CLI v2のパッケージをダウンロード
curlコマンドでAWS CLI v2のパッケージをダウンロードする。

```
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/229b4e58-554d-e04f-8ccb-534248c6cfbb.png)

unzipコマンドで展開する。

```
unzip awscliv2.zip
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/ad843411-14a8-f93c-b84e-5337532d16af.png)

## 3-3.AWS CLI v2のインストール
以下コマンドでインストールする。

```
sudo ./aws/install
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/7561d9d9-3ff5-103f-f2b8-554b6a9525ed.png)

以下バージョン確認コマンドが実行できるか試し、AWS CLI v2がインストールできたか確認する。

```
aws --version
```

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/b73a735d-d2c5-ce57-277f-84ac64b9bc43.png)
バージョン確認コマンドが実行でき、バージョンが表示され、AWS CLI v2がインストールされたことが確認できた。

# 4.CLIを使用するIAMユーザのアクセスキー・シークレットアクセスキーを作成
CLIを使用するのにIAMユーザのアクセスキーとシークレットアクセスキーが必要なので作成する。
AWSマネジメントコンソールのIAMから、CLIを使用する権限のあるユーザを選択し「アクセスキーの作成」をclickする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/ddcb3512-f2e0-d523-a4dc-f2a0ad3bd94a.png)
アクセスキーとシークレットアクセスキーが生成される。シークレットアクセスキーは二度と表示できないのでここで必ずコピーしておく。.csvファイルをダウンロードしておいてもよい。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/17359bfe-5900-187a-1a0f-cd195424664c.png)

:::note alert
アクセスキーとシークレットアクセスキーのセットが漏洩するとそのユーザの権限で何でも操作ができてしまうので、絶対に外部に漏らさないようにする。
:::

# 5.WSLで認証情報の登録
手順4で作成したアクセスキーとシークレットアクセスキー情報をWSLで登録する。
今回は[「クイックセットアップ」](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-quickstart.html)を参考に実施する。

以下コマンドを実行する。

```
aws configure
```

対話形式で以下情報を入力していく。
 - アクセスキー
 - シークレットアクセスキー
 - リージョン
 - デフォルトフォーマット

```
AWS Access Key ID [None]: AKIAxxxxxxxxxxxV2CL
AWS Secret Access Key [None]: xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Default region name [None]: ap-northeast-1
Default output format [None]: json
```
![WSLに認証情報登録.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/ff050d77-5d45-07cb-62b1-c036d86b1726.png)

登録した情報は`~/.aws`配下の`config`と`credentials`に保存されている。
![WSLに認証情報登録2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/d0a264b0-5dc6-7d48-f0c9-cbda464af4f5.png)

以下AWS CLIコマンドを実行し、EC2情報を取得する。

```
aws ec2 describe-instances
```
![WSLでCLI実行結果.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/46712b94-c11b-7f05-9fd7-8ba229b43b2f.png)

# 6.CLIを実行するIAMユーザを切り替える
[「Named profiles for the AWS CLI」](https://docs.aws.amazon.com/ja_jp/cli/latest/userguide/cli-configure-profiles.html)を参考に、認証情報を追加で登録し、CLIコマンドを実行するIAMユーザを切り替える。（プロファイルの切り替え）

## 6-1.CLI用のIAMユーザを作っておく
プロファイル切り替え用のIAMユーザを作っておく。
今回は以下のユーザを作成し、アクセスキーとシークレットアクセスキーを生成しておく。

 - IAMユーザ名：cli-test-user
 - 権限：`IAMReadOnlyAccess`だけアタッチ
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/9632f758-318a-283f-6512-2eec4129c1ed.png)

## 6-2.認証情報の追加登録

WSLを開き、`~/.aws`配下の`config`（構成プロファイル）を編集する。
viエディタで`~/.aws`配下の`config`を開く。

```
vi .aws/config
```

viエディタで開くと、`config`は以下のように設定されている。

```
[default]
region = ap-northeast-1
output = json
```
`i`で編集モードに移行し、新しく作成したCLI用IAMユーザの情報を以下のように追記し、`esc`で編集モードを抜け、`:wq`で保存する。
```
[profile cli-test-user]
region=ap-northeast-1
output=text
```
![config修正.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/0ad9e371-d8db-a2ae-3f4e-2b6d42606a8d.png)

続いて`~/.aws`配下の`credentials`（クレデンシャルプロファイル）を編集する。
viエディタで`~/.aws`配下の`credentials`を開く。

```
vi .aws/credentials
```

viエディタで開くと、`credentials`は以下のように設定されている。

```
[default]
aws_access_key_id = AKIxxxxxxxxxxxxxV2CL
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
`i`で編集モードに移行し、新しく作成したCLI用IAMユーザの認証情報を以下のように追記し、`esc`で編集モードを抜け、`:wq`で保存する。
```
[cli-test-user]
aws_access_key_id = AKIxxxxxxxxxxxxxV2CL
aws_secret_access_key = xxxxxxxxxxxxxxxxxxxxxxxxxxxx
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/798d4475-1ecd-c5da-a985-43f5bf466863.png)

## 6-3.名前付きプロファイルの使用
CLIコマンドにオプションを追加することで、CLIコマンドを実行するIAMユーザを切り替えることができる。
次の例では、手順6-2のプロファイルで定義されたクレデンシャルと設定を使用して、アカウント内すべてのIAMユーザ一覧をテキスト形式で表示する。

```
aws iam list-users --profile cli-test-user
```
![CLI用ユーザでIAM表示OK.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/b3b250cd-9ad8-564a-1feb-10e0c9fc6f45.png)

`cli-test-user`は`IAMReadOnlyAccess`しか権限がないため、EC2の情報を取得しようとすると失敗する。

```
aws ec2 describe-instances --profile cli-test-user
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/0f07c025-a036-b5df-e87e-8ed68b04edfd.png)

## 6-4.（参考）環境変数でのプロファイル指定

以下のように環境変数を設定することにより、コマンドを実行するたびに`--profile`オプションでプロファイルを指定する必要がなくなる。

```
export AWS_PROFILE=cli-test-user
```

![環境変数を設定してプロファイルを切り替える.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1723719/d97e03a6-f9ab-7f5f-e9e4-7fe3f12e6c2c.png)
`--profile`オプションでプロファイルを指定しなくても、テキスト形式でIAMのリストが取得されている（=cli-test-userでAWS CLIコマンドが実行されている）。

# 参考

https://docs.microsoft.com/ja-jp/windows/wsl/about

https://docs.microsoft.com/ja-jp/windows/wsl/install

https://docs.microsoft.com/ja-jp/windows/wsl/setup/environment