【#awscli】管理者権限を持たないWindows環境に「AWSコマンドラインインターフェイス(AWS CLI v2)」をインストールする #AWS #awscliv2 #jawsug #環境構築 #環境設定

AWS CLI v2では「Pythonがなくてもインストールできるようになった！」というのがウリなのですが、 相変わらずWindows MSI インストーラ形式で提供されているので管理者権限を持たないWindows端末にインストールすることができません。

というわけで管理者権限を持たないWindows端末に「AWSコマンドラインインターフェイス(AWS CLI v2)」をインストールした際の内容を自分用のメモとしてまとめました。

#### 環境情報
|OS/ソフトウェア |バージョン |入手元 |
|:---|:---|:---|
|Windows 10 pro |バージョン1903(May 2019) |Microsoft Corporation |
|Python3 |3.8.2 |https://www.python.org/downloads/windows/ |
|pip |20.0.2 | |
|botocore |2.0.0dev6 |https://github.com/boto/botocore/archive/v2.tar.gz |
|aws-cli |2.0.2 |https://github.com/aws/aws-cli/archive/v2.tar.gz |

# 1. Python3 のインストール

まず「Python3」をインストールします。

### □手順 1-1: 公式URLからPythonの`executable installer`をダウンロードします
■URL
https://www.python.org/downloads/windows/

■ファイル名
`python-3.8.2-amd64.exe`

### □手順 1-2: ダウンロードした`executable installer`を実行します

### □手順 1-3: `Add Python 3.8 to PATH`チェックボックスにチェックを入れた後`Customize installation`をクリックします

```
[　] Install launcher for all users(recommended)
[✔] Add Python 3.8 to PATH
```

<img width="498" alt="capture_004_08032020_111112.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44745/a1dd15eb-46bb-9a6d-f863-78bf40166463.jpeg">

### □手順 1-4: 次の Optional Features にチェックを入れて`Next`ボタンをクリックします

```
[✔] Documentaion
[✔] pip
[✔] tcl/tk and IDLE
[✔] py launcher
[　] for for all users(requires elevation)
```

<img width="498" alt="capture_005_08032020_111127.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44745/8663b6b4-13f8-2a2a-b731-e8b08a1f32d4.jpeg">


### □手順 1-5: 次の Advanced Options にチェックを入れて`Install`ボタンをクリックします

```
[　] Install for all users
[　] Associate files with Python (requires the py launcher)
[✔] Create shortcuts for installed applications
[✔] Add Python to environment variables
[✔] Precompile standard library
[　] Download debugging symbols
[　] Download debug binaries (requires VS 2015 or later)
```

![7c0e1a4c-07d5-abc5-8792-64530fba6d48.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44745/878ca92f-7a32-a7a3-3c0e-8a4c67ed0510.jpeg)


### □手順 1-6: `Close`ボタンをクリックし`executable installer`を終了します

![capture_005_23072019_013724.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/44745/2636c2bf-58d9-20eb-fc60-b9df427621f7.jpeg)

### □手順 1-7: スタートメニューから`Powershell`を起動し次のコマンドを実行、Pythonがインストールされて、パスが通っていることを確認します

```powershell
PS C:\> & python --version
Ptyhon 3.8.2
```

# 2. botocore と aws-cli のインストール

AWS CLI v1 の時は、Python3 インストール後は pip で比較的に簡単にインストールできたのですが、
v2 になってから意図的に PyPI 上にも公開しないことになったようで、少し工夫が必要です。
https://github.com/aws/aws-cli/issues/4947

```
Not publishing CLI v2 to PyPI has been a conscious decision
and for the time being we have no plans to publish to PyPI.
In the long term we want the fact that the AWS CLI is written
in Python to be more of an implementation detail than a feature.
```

### □手順 2-1: まず `pip`を最新バージョンにアップグレードします

```powershell
PS C:\> & easy_install.exe -U pip
```

### □手順 2-2: 次に`pip`を使ってGitHubレポジトリ上から`botocore`をインストールします

```powershell
PS C:\> & pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host github.com --trusted-host codeload.github.com https://github.com/boto/botocore/archive/v2.tar.gz

Collecting https://github.com/boto/botocore/archive/v2.tar.gz
  Downloading https://github.com/boto/botocore/archive/v2.tar.gz
     | 5.1 MB 43 kB/s
Collecting jmespath<1.0.0,>=0.7.1
  Downloading jmespath-0.9.5-py2.py3-none-any.whl (24 kB)
Collecting docutils<0.16,>=0.10
  Downloading docutils-0.15.2-py3-none-any.whl (547 kB)
     |████████████████████████████████| 547 kB 6.8 MB/s
Collecting python-dateutil<3.0.0,>=2.1
  Downloading python_dateutil-2.8.1-py2.py3-none-any.whl (227 kB)
     |████████████████████████████████| 227 kB 6.4 MB/s
Collecting urllib3<1.26,>=1.20
  Downloading urllib3-1.25.8-py2.py3-none-any.whl (125 kB)
     |████████████████████████████████| 125 kB 6.4 MB/s
Collecting six>=1.5
  Downloading six-1.14.0-py2.py3-none-any.whl (10 kB)
Installing collected packages: jmespath, docutils, six, python-dateutil, urllib3, botocore
    Running setup.py install for botocore ... done
Successfully installed botocore-2.0.0.dev6 docutils-0.15.2 jmespath-0.9.5 python-dateutil-2.8.1 six-1.14.0 urllib3-1.25.8
```

####試した環境ではプロキシの影響で`--trusted-host`オプションを付与せずに実行すると次のエラーメッセージが出力されてしまいました

```powershell
PS C:\> & pip install https://github.com/boto/botocore/archive/v2.tar.gz

Collecting https://github.com/boto/botocore/archive/v2.tar.gz
  WARNING: Retrying (Retry(total=4, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)'))': /boto/botocore/archive/v2.tar.gz
  WARNING: Retrying (Retry(total=3, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)'))': /boto/botocore/archive/v2.tar.gz
  WARNING: Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)'))': /boto/botocore/archive/v2.tar.gz
  WARNING: Retrying (Retry(total=1, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)'))': /boto/botocore/archive/v2.tar.gz
  WARNING: Retrying (Retry(total=0, connect=None, read=None, redirect=None, status=None)) after connection broken by 'SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)'))': /boto/botocore/archive/v2.tar.gz
ERROR: Could not install packages due to an EnvironmentError: HTTPSConnectionPool(host='github.com', port=443): Max retries exceeded with url: /boto/botocore/archive/v2.tar.gz (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:1108)')))
```
### □手順 2-3: 次に`aws-cli`をGitHubレポジトリからインストールします

```powershell
PS C:\> & pip install --trusted-host pypi.org --trusted-host files.pythonhosted.org --trusted-host github.com --trusted-host codeload.github.com https://github.com/aws/aws-cli/archive/v2.tar.gz

Collecting https://github.com/aws/aws-cli/archive/v2.tar.gz
  Downloading https://github.com/aws/aws-cli/archive/v2.tar.gz
     - 3.0 MB 15 kB/s
Requirement already satisfied: botocore==2.0.0dev6 in c:\users\kukita\appdata\local\programs\python\python38\lib\site-packages (from awscli==2.0.2) (2.0.0.dev6)
Collecting colorama<0.4.4,>=0.2.5
  Downloading colorama-0.4.3-py2.py3-none-any.whl (15 kB)
Requirement already satisfied: docutils<0.16,>=0.10 in c:\users\kukita\appdata\local\programs\python\python38\lib\site-packages (from awscli==2.0.2) (0.15.2)
Collecting cryptography<=2.9.0,>=2.8.0
  Downloading cryptography-2.8-cp38-cp38-win_amd64.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 3.2 MB/s
Collecting s3transfer<0.4.0,>=0.3.0
  Downloading s3transfer-0.3.3-py2.py3-none-any.whl (69 kB)
     |████████████████████████████████| 69 kB 4.5 MB/s
Collecting ruamel.yaml<0.16.0,>=0.15.0
  Downloading ruamel.yaml-0.15.100.tar.gz (318 kB)
     |████████████████████████████████| 318 kB 6.4 MB/s
Collecting prompt-toolkit<3.0.0,>=2.0.0
  Downloading prompt_toolkit-2.0.10-py3-none-any.whl (340 kB)
     |████████████████████████████████| 340 kB 6.4 MB/s
Requirement already satisfied: jmespath<1.0.0,>=0.7.1 in c:\users\kukita\appdata\local\programs\python\python38\lib\site-packages (from botocore==2.0.0dev6->awscli==2.0.2) (0.9.5)
Requirement already satisfied: python-dateutil<3.0.0,>=2.1 in c:\users\kukita\appdata\local\programs\python\python38\lib\site-packages (from botocore==2.0.0dev6->awscli==2.0.2) (2.8.1)
Requirement already satisfied: urllib3<1.26,>=1.20 in c:\users\kukita\appdata\local\programs\python\python38\lib\site-packages (from botocore==2.0.0dev6->awscli==2.0.2) (1.25.8)
Requirement already satisfied: six>=1.4.1 in c:\users\kukita\appdata\local\programs\python\python38\lib\site-packages (from cryptography<=2.9.0,>=2.8.0->awscli==2.0.2) (1.14.0)
Collecting cffi!=1.11.3,>=1.8
  Downloading cffi-1.14.0-cp38-cp38-win_amd64.whl (177 kB)
     |████████████████████████████████| 177 kB 6.8 MB/s
Collecting wcwidth
  Downloading wcwidth-0.1.8-py2.py3-none-any.whl (17 kB)
Collecting pycparser
  Downloading pycparser-2.20-py2.py3-none-any.whl (112 kB)
     |████████████████████████████████| 112 kB 3.2 MB/s
Installing collected packages: colorama, pycparser, cffi, cryptography, s3transfer, ruamel.yaml, wcwidth, prompt-toolkit, awscli
    Running setup.py install for ruamel.yaml ... done
    Running setup.py install for awscli ... done
Successfully installed awscli-2.0.2 cffi-1.14.0 colorama-0.4.3 cryptography-2.8 prompt-toolkit-2.0.10 pycparser-2.20 ruamel.yaml-0.15.100 s3transfer-0.3.3 wcwidth-0.1.8
```

### □手順 2-4: `aws --version`コマンドを実行し正常にインストールされていることを確認できれば完了です


```powershell
PS C:\> & aws --version

拡張子 .py のファイルの関連付けが見つかりません
aws-cli/2.0.2 Python/3.8.2 Windows/10 botocore/2.0.0dev6
```

## おまけ：`拡張子 .py のファイルの関連付けが見つかりません`という警告メッセージへの対応

#### 管理者権限を有しているアカウントで下記コマンドを実行してもらうことができれば解決できるはずです。。。

```powershell
PS C:\> & assoc .py=Python.File
PS C:\> & ftype Python.File="%USERPROFILE%\AppData\Local\Programs\Python\Python37\python.exe" "%1" %*
```

## おまけ(その2)： 「AWS CLI v2」実行時のMFA(Multi-Factor Authentication:多要素認証)の有効化

「AWS CLI」を使用するためにはアクセスキー(アクセスキーIDとシークレットキーのキーペア)が必要になるのですが、このアクセスキーが漏洩すると怖いことが起こるので、ちゃんとMFA(Multi-Factor Authentication:多要素認証)を有効にしましょう ↓

**【#awscli】あらかじめ指定した接続元IPアドレス以外からの「AWS CLI v2」実行時はMFA(ワンタイムパスワードでの認証)が必要になるようIAMを設定する #AWS #awscliv2 #jawsug #環境構築 #環境設定**
https://qiita.com/kukita/items/1a4f9c35a956eb37003d

---

以上、管理者権限を持たないWindows端末に「AWSコマンドラインインターフェイス(AWS CLI v2)」をインストールする手順でした。