忙しい方へ
インストール先はrootユーザのディレクトリなので、そうじゃないディレクトリに置いてパスを通すことができるよ、というだけです。
これで何をやってるかわかるのであれば以後は読まなくていいかもw
※追記
brewでawscliをインストールするとv2が入るようになってました。
https://formulae.brew.sh/formula/awscli
v1は明示的にv1を指定すれば多分入れられます
https://formulae.brew.sh/formula/awscli@1
後述の通りv1とv2は一部互換性がないそうなので、これからbrewでインストールする場合は注意しましょう。
本題
今週、AWS CLIのV2がGAになりました。
AWSのブログ
クラスメソッドさんのブログ
個人的にはまだ全然試せてないのでこれからなんですが、使うにはまずはインストールしなければいけないですよね。
インストールの方法は公式に載っています。
自分の環境は仕事でも個人でもMacなのですが、もともとcliはbrewでインストールしてました。
何かしらのパッケージマネージャによって管理される状態にしておきたかったからですね。
なのでできたらbrewで行きたかったんですが、これを書いている時点ではまだbrewではインストールできません。
(なので、brewでインストールできるようになったらこの内容は不要かもしれません。)
インストールの手順を抜粋すると下記です。
Macでのインストール手順ですが、対象のファイルが変わるだけでLinuxでの手順もほぼ同様です。
curl "https://d1vvhvl2y92vvt.cloudfront.net/awscli-exe-macos.zip" -o "awscliv2.zip"
unzip awscliv2.zip
sudo ./aws/install
問題なのはsudo ./aws/install
で、仕事用のPCのユーザでは管理者権限を制限されていてsudoできない、なんてことがあるかと思います。
そうしたらせっかく試そうと思ったのに試せないじゃん、となっちゃいますが、回避する方法がきちんとドキュメントに書いてあるのでここに残しておきます。
インストールスクリプトの中身
./aws/install
の中身は全部抜粋すると長くなるので割愛しますが、ざっくりいうと/usr/local/aws-cli
というディレクトリを作ってその中に動作させるプログラムを配置し、/usr/local/bin/aws2
というシンボリックリンクを作成する、という動作をするようです。
sudoさせられるのは、通常/usr
以下に書き込むにはroot権限が必要な状態になっているからかと思います。
/usr/loca/bin
にシンボリックリンクを置くのはPATHが通っているディレクトリにシンボリックリンクを置いてどこからでも使えるようにするためでしょう。
(記憶が曖昧なんですが、そもそもデフォルトでPATH通ってましたっけ…?)
※そもそもこのディレクトリなんなのみたいな話は話が逸れるので参考サイトを置いておきます
https://linuc.org/study/knowledge/544/
ただ、インストール先のディレクトリとシンボリックリンクを置くディレクトリは変更することができる、と書いてあります。
以下ドキュメントから抜粋
--install-dir または -i
このオプションは、すべてのファイルをコピーするフォルダを指定します。次の例では、/usr/local/aws-cli という名前のフォルダにファイルをインストールします。このフォルダを作成するには、/usr/local への書き込み権限が必要です。
デフォルト値は /usr/local/aws-cli です。
--bin-dir または -b
このオプションは、インストールフォルダ内のメイン aws プログラムが、指定されたパス内のファイル aws2 にシンボリックリンクされるように指定します。この例では、シンボリックリンク /usr/local/bin/aws2 を作成します。指定したフォルダへの書き込み権限が必要です。パスにすでに存在するフォルダへのシンボリックリンクを作成すると、インストールディレクトリをユーザーの $PATH 変数に追加する必要がなくなります。
デフォルト値は /usr/local/bin です。
つまり、適当なディレクトリにファイルを置いて、自分でPATHを通した任意のディレクトリにシンボリックリンクを配置することでsudoを使わないでインストールすることができます。
インストール先ディレクトリを変える
自分の場合は使っているユーザのホームディレクトリ配下に下記のようなディレクトリを作りました。
ディレクトリを作成し、PATHを通す
mkdir $HOME/awscli2
mkdir $HOME/local/bin
もちろん$HOME/local/bin
にはPATHを通してあります。
Bashの場合は~/.bash_profile
に
export PATH=$PATH:$HOME/local/bin
を追記して.bash_profile
を読み込み直しましょう。
source ~/.bash_profile
を実行するか、ターミナルを立ち上げ直せばOKです。
自分はfishを使っているのでユニバーサル変数に追加しています。
fishの環境変数の設定の仕方はbashとはちょっと違ってやや混乱するので注意。
.fish/config/config.fish
に環境変数を設定するコマンドを追記するのでもいいと思います(お好みで)
ただ、下記は永続的な設定なので.fish/config/config.fish
のではなくターミナルで一回実行するだけにしましょう。
$fish_user_pathsの中身が間違って空になったりすると後で面倒なことになります(1敗)
参考
https://qiita.com/ledsun/items/8ca1a450b21c8ebc9670
set -U fish_user_paths $HOME/local/bin $fish_user_paths
オプション指定してインストールする
その上で、インストール時にこんな感じでオプション指定しました。
※環境変数でホームディレクトリ指定してますが、実際にはフルパス指定しています。
./aws/install -i $HOME/awscli2/ -b $HOME/local/bin/
これで実行できるようになります、なお、現在はv1との併用のためaws2
という名前でシンボリックリンクが作られます。
aws2 --version
aws-cli/2.0.0dev4 Python/3.7.4 Darwin/18.7.0 botocore/2.0.0dev3
ドキュメントより
AWS CLI バージョン 2 のプレビューリリースでは、AWS CLI バージョン 1 とバージョン 2 がサイドバイサイドで共存できるよう、シンボリックリンクに aws2 という名前が付けられます。AWS CLI バージョン 2 の今後のリリースでは、このコマンド名が変更される可能性があります。
ともあれ、これでV2になったaws cliを試すことができるようになりました。
気になるポイント
- あくまでも手動インストールなのでアップデートがあったら自分でやらなきゃいけないこと
- 一部下位互換性のない変更がある
関連
venvを使ってAWS CLI(v1)とAWS CLI v2を使い分ける(Mac, Linux編)
AWS CLI v2をソースコードからインストールする