[アップデート] AWS CLI に aws update コマンドが追加されました
しばたです。
いつも通りAWS CLIの更新履歴をチェックしていたところ、少し前にリリースされたVer.2.36.0で新しくaws updateというコマンドが追加されていることに気が付きました。
- feature:
update: Adds theupdatecommand, which downloads and installs the latest AWS CLI version.
- CHANGELOG より
本記事ではこのコマンドを調べた結果を共有します。
このコマンドは何?
このコマンドは名前の通りAWS CLIを最新バージョンに更新するコマンドです。
詳細なパラメーターは無く、全プラットフォーム共通でaws updateと打つだけで最新バージョンのAWS CLIに更新されます。
# 最新バージョンのAWS CLIにアップデート
aws update
実装を調べてみた
GitHubにあるソースから実装を確認したところ、仕組みは単純でインターネット上にある更新スクリプトをダウンロードして実行する形になっていました。
更新スクリプトはWindows環境向けのinstall.ps1と非Windows環境向けのinstall.shがあり、現在のAWS CLI v2ではそれぞれ
となっています。
どちらのスクリプトも処理内容としては同等で、
- ローカル環境のプラットフォームとインストール方法、インストール済みバージョンを確認
- インストール方法に応じて最新バージョンのインストーラーをダウンロードしてインストール実行
という形になっていました。
ちなみに最新バージョンの情報は
から取得しています。
試してみた
今回は私の開発PC(Windows 11)にインストール済みのAWS CLIで動作確認してみました。
事前にAWS CLIのバージョンをVer.2.36.0にしています。
また、私の環境ではシステムワイドのインストールにしているためPowerShellコンソールを「管理者として実行」しています。

最初に私が常用するPowerShell 7 (7.6.4)から試したのですが、残念ながらこちらでは期待した動作をしませんでした。
aws updateコマンドを実行すると別窓でインストールスクリプトが実行されるのですが、最新のMSIインストーラーが意図したディレクトリにダウンロードされていない様でインストール処理が直ちに終了してしまいます。


見かけ上aws updateコマンドが正常終了した様に見えるのですが、実際にはバージョンアップされていませんでした。

代わりにWindows PowerShellからaws updateコマンドを実行したところ別窓でインストールスクリプトが実行され、さらに意図通りにMSIインストーラーのインストール処理が実行されます。

別窓が閉じた時点でインストール完了となり、本日時点で最新のVer.2.36.8に更新されました。

いい感じです。
PowerShell 7で期待した動作をしなかった点については後でフィードバックしておこうと思います。
補足1: PowerShell 7向け代替コマンド
Windows環境でやっている事は最新のMSIインストーラーの実行なので、最低限以下のコマンドでaws updateの内容を代替できます。
# システムインストールの場合の代替策
msiexec /i https://awscli.amazonaws.com/AWSCLIV2.msi /qn /norestart
MSIインストーラーの場合新規インストールと更新処理の分岐は内部でよしなにやってくれるので、新規インストール用のコマンドがそのまま使えます。
補足2: Windows環境だと localhost (127.0.0.1) へのPingが実行される
Windows環境ではプロセスが実行中だと実行ファイルを更新できない制約があります。
AWS CLIではこれを回避するためにlocalhost (127.0.0.1)へ3回Pingすることで時間稼ぎをしています。
# Windows acquires a lock when running an exe process, preventing
# an update in-place. The workaround is to launch a detached CMD
# subprocess and exit the parent early. Use ping to wait before
# running the installation to ensure the parent isn't holding onto
# the lock.
f.write('@echo off\n')
f.write('set AWS_CLI_DISTRIBUTION_SOURCE_OVERRIDE=update-exe\n')
if self._no_color:
f.write('set NO_COLOR=1\n')
f.write('ping -n 3 127.0.0.1 >nul 2>&1\n')
f.write(f'"{ps_exe}" {ps_args}\n')
個人的には「なぜPing?Sleepじゃいかんのか?」というお気持ちですが、現状この様な実装なので突然Pingが打たれても焦らないでOKです。
補足3: Linux環境 (WSL2)の場合
せっかくなのでWSL2上のUbuntu環境でも試してみます。
Windowsの時と同様に最初にVer.2.36.0にしています。

この環境でもシステムインストールにしているのでsudo付きでaws updateコマンドを実行します。
こちらはすんなりインストールスクリプトが実行されVer2.36.8に更新されました。


簡単でいいですね。
最後に
以上となります。
Windows環境での不具合を見つけてしまいましたがとても便利なコマンドだと思います。
皆さんもぜひ活用してください。







