[TIPS] AWS CLIの「v1」と「v2」を共存させて使う方法

「AWS CLI v2を使ってみたいけど互換性が・・・」「v1もv2も両方使いたい」という方、それ、できますよ?
2020.04.22

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

みなさん、こんにちは!
AWS事業本部の青柳@福岡オフィスです。

AWS CLIの新しいバージョン「v2」が正式リリースされて、2カ月ほど経ちました。

[アップデート] リソース名の補完など強力な機能追加!AWS CLI v2 が GA されました! | Developers.IO

皆さん、もう使いこなしてますか?

もしかすると、互換性などを気にして旧バージョン(v1)から移行できていない方もいらっしゃるのではないでしょうか?

そこで、今回はAWS CLIの「v1」と「v2」を共存させて使い分ける方法をご紹介します。

AWSドキュメントでは、AWS CLI v1が既に導入されている環境にAWS CLI v2を導入する場合の推奨は「AWS CLI v1をアンインストールして、AWS CLI v2のみを使用する」と謳われています。 ただし、インストールパスやコマンド名が重複せず完全に独立するように気を付ければ、両バージョンを共存させることは可能です。

AWS CLI v1の「新しいインストール方法」を使います

AWS CLI v1のインストール方法と言えば、Pythonのパッケージ管理システム「pip」を使った方法が良く知られていると思います。

実は、AWS CLI v2のインストール方法と同様に、zipファイルをダウンロードしてきてインストールする方法も提供されているのです。

バンドルされたインストーラを使用して AWS CLI バージョン 1 をインストールする (Linux または macOS) - AWS Command Line Interface

今回は、このインストール方法を利用して「v1」と「v2」を共存させたいと思います。

共存させる手順

「v2」→「v1」の順にインストールしていきます。

なお、pipを使ってインストールした「v1」が残っている場合は、予めアンインストールしておいてください。

AWS CLI v2のインストール

インストーラーを含むzipファイルをダウンロードして、展開します。

$ cd /tmp
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip

インストーラーを実行します。

$ sudo ./aws/install -i /usr/local/aws-cli -b /usr/local/bin

ここで、インストーラーのオプションパラメータについて説明します。

オプション 説明 省略時のデフォルト値
-i, --install-dir ライブラリを含むインストール資産の配置先ディレクトリ /usr/local/aws-cli
-b, --bin-dir 実行コマンドのシンボリックリンクを作成するディレクトリ /usr/local/bin
-u, --update アップデートインストールの際に指定する

-bオプションは、パスが通ったディレクトリにすることがポイントです。

ちなみに、今回の-i-bの各オプションはいずれもデフォルトと同じパスを指定していますので、以下のようにオプションを省略しても同じ結果となります。

$ sudo ./aws/install

インストーラーの処理が正常に完了しましたら、コマンドが実行できることを確認しましょう。

$ aws --version
aws-cli/2.0.8 Python/3.7.3 Linux/4.14.173-137.229.amzn2.x86_64 botocore/2.0.0dev12

AWS CLI v1のインストール

インストーラーを含むzipファイルをダウンロードして、展開します。

$ cd /tmp
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip

インストーラーを実行します。

$ sudo ./awscli-bundle/install -i /usr/local/aws-cli-v1 -b /usr/local/bin/aws-v1

「v1」のインストーラーのオプションパラメータは以下のようになっています。

オプション 説明 省略時のデフォルト値
-i, --install-dir ライブラリを含むインストール資産の配置先ディレクトリ ~/.local/lib/aws
-b, --bin-location 実行コマンドのシンボリックリンクのパス シンボリックリンクを作成しない

-bオプションの指定方法が「v2」と異なり、シンボリックリンクを作成するディレクトリではなく、シンボリックリンクそのものであることに留意してください。

インストール完了後、コマンドが実行できることを確認しましょう。

$ aws-v1 --version
aws-cli/1.18.42 Python/2.7.16 Linux/4.14.173-137.229.amzn2.x86_64 botocore/1.15.42

「v1」と「v2」のインストール先を整理すると、以下のようになります。

バージョン インストール資産のパス 実行コマンドのパス
AWS CLI v2 /usr/local/aws-cli/ /usr/local/bin/aws
/usr/local/bin/aws_completer
AWS CLI v1 /usr/local/aws-cli-v1/ /usr/local/bin/aws-v1

このように、-iオプション (インストール資産の配置先)、-bオプション (実行コマンドのシンボリックリンク) の指定を、いずれも「v1」と「v2」とで異なるパスにすることで、両バージョンを共存させることができるという訳です。

(※ 今回は、「v2」をメインに使い、必要に応じて「v1」も使う、という想定で「v1」の方を別名 (~-v1) としました。「v1」をメインで使うのであれば逆に「v2」の方を別名にすればよいかと思います)

別パターン (ローカルインストールの場合)

各種ツール類をホームディレクトリの~/.local/配下にインストールしている方もいるのではないかと思います。

その場合には、以下のようにすればOKです。

「v2」のインストール

$ cd /tmp
$ curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
$ unzip awscliv2.zip
$ ./aws/install -i ~/.local/aws-cli -b ~/.local/bin

「v1」のインストール

$ cd /tmp
$ curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.zip" -o "awscli-bundle.zip"
$ unzip awscli-bundle.zip
$ ./awscli-bundle/install -i ~/.local/aws-cli-v1 -b ~/.local/bin/aws-v1

ローカルインストールの場合のインストール先は、以下のようになっています。

バージョン インストール資産のパス 実行コマンドのパス
AWS CLI v2 ~/.local/aws-cli/ ~/.local/bin/aws
~/.local/bin/aws_completer
AWS CLI v1 ~/.local/aws-cli-v1/ ~/.local/bin/aws-v1

おわりに

今回の内容は、先日参加した「JAWS-UG CLI専門支部」の オンライン勉強会 で得られた情報を参考にさせて頂きました。

セッション資料では、AWS CLI v2のアップデート内容や便利な使い方などが紹介されていますので、皆さんも是非チェックされることをお勧めします。

AWS Command Line Interface (AWS CLI) version 2 GA記念! 〜今からでも間に合う機能のおさらい~