AWS CLI v2をpipからインストールしてみた
AWS CLI v2がGAされました!
早速使い込みたいところですが、Mac/Windows/AMD64 Linux 向けのビルド済みインストーラーしか提供されておらず
- ARM など別アーキテクチャーにインストール
- venv などで複数バージョンをインストール
などが不便です。
今回は AWS CLI v2 をソースコードからインストールして、上記課題を解決する方法を紹介します。
AWS CLI V2をソースコードからインストールする
EC2にはARMベースの AWS Gravitonプロセッサーを搭載したEC2 A1インスタンスがあります。
$ uname -r 4.14.154-128.181.amzn2.aarch64
AWS CLI V2 は、諸々がバンドルされたビルド済みバイナリが用意されていますが、残念ながらARM(AArch64)向けのバイナリは現時点では提供されていません。
利用環境向けのバイナリが提供されていないときは、GitHub をターゲットにしてインストールしましょう。
AWS CLI の実態である botocore(低レベルAPI) と aws-cli(CLI向け高レベルAPI) の v2 ブランチを pip
経由で GitHub からインストールします。
$ python3 -mpip install https://github.com/boto/botocore/archive/v2.tar.gz $ python3 -mpip install https://github.com/aws/aws-cli/archive/v2.tar.gz $ aws --version aws-cli/2.0.0 Python/3.7.4 Linux/4.14.154-128.181.amzn2.aarch64 botocore/2.0.0dev4
非常に重要な点として、botocoreと aws-cli のインストール順を逆にすると、インストールに失敗します。ご注意ください。
ビルドに必要なパッケージをインストール
AWS CLI v2のビルドにはいくつかの開発系パッケージが必要です。
Amazon Linux 2のまっさら環境では、以下のパッケージをインストールすると、ビルドできます。
$ sudo yum install -y python3 python3-devel gcc libffi-devel openssl-devel
ディストリビューション・OSに合わせて読み替えてください。
AWS CLI V2 はPyPIに登録されていない
GitHub 経由でインストールする必要がある理由について説明します。
AWS CLI V2 向けのパッケージ(aws-cli
,botocore
)は Python のパッケージインデックスである PyPI に登録されていません。
そのため pip
で v2 用のバージョン(2.0.0
)を指定して AWS CLI をインストールしようとしても、失敗します。
$ python3 -m pip install awscli==2.0.0 Collecting awscli==2.0.0 Could not find a version that satisfies the requirement awscli==2.0.0 (from versions: 0.4.1, ... No matching distribution found for awscli==2.0.0
しかたなしに AWS CLI を GitHub からインストールしようとすると、aws-cli
が 依存している botocore
のV2向けバージョン(2.0.0dev4
)が PyPI に登録されていないので、インストールに失敗します。
$ python3 -m pip install https://github.com/aws/aws-cli/archive/v2.tar.gz ... Collecting botocore==2.0.0dev4 (from awscli==2.0.0) Could not find a version that satisfies the requirement botocore==2.0.0dev4 (from awscli==2.0.0) (from versions: 0.4.1, ... No matching distribution found for botocore==2.0.0dev4 (from awscli==2.0.0)
解決方法
本体(aws-cli
)よりも先に依存ライブラリ(botocore
)をインストールして解決します。
botocore
のv2 ブランチの最新バージョンが 2.0.0dev4
です。
$ python3 -m pip install https://github.com/boto/botocore/archive/v2.tar.gz ... $ python3 -c 'import botocore;print(botocore.__version__)' 2.0.0dev4
botocore@v2
をインストールした状態で aws-cli@v2
をインストールすれば、エラーにはなりません。
$ python3 -mpip install https://github.com/aws/aws-cli/archive/v2.tar.gz ... Successfully installed awscli-2.0.0 cffi-1.14.0 colorama-0.4.3 cryptography-2.8 prompt-toolkit-2.0.10 pycparser-2.19 ruamel.yaml-0.15.100 s3transfer-0.3.3 wcwidth-0.1.8 $ aws --version aws-cli/2.0.0 Python/3.7.4 Linux/4.14.154-128.181.amzn2.aarch64 botocore/2.0.0dev4
そもそもなんで PyPI にアップロードされていないの?
V1 系は PyPI にアップロードされていますが、V2 系は意識的にPyPI にアップロードされていません。
開発チームがユーザーの質問に GitHub で回答しています。
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.
AWS CLI の PyPI 経由のインストールが PyPI に想像以上の負荷をかけているとのことなので(1日約100万回のダウンロード)、そのあたりが関係しているのかもしれません。
AWS CLI v2 がリリースされたことで、 pip install awscli が減るといいなぁ。 PyPI 全体のそれなりの部分がこいつとその依存だから。。。https://t.co/RHKgQBBBX9
— Inada Naoki (@methane) February 12, 2020
というわけで AWS CLI V1/V2 によらず、バンドルインストーラーを積極的に活用しましょう!