AWS CloudShellで最新AWS CLI v2と既存のAWS CLI v2の両方を使えるようにするスクリプト作ってみた
こんにちは、臼田です。
みなさん、AWS CloudShell使ってますか?(挨拶
今回はタイトルの通りちょっとしたスクリプトを作ったので共有します。
最新のAWS CLI v2を使いたい
AWS CloudShellを利用している時、デフォルトのAWS CLIが最新のAWS CLI v2ではないときがあります。そこで最新バージョンにしたくなるわけですが、そのままアップデートすると上書きすることになります。
基本的に新しいバージョンを使いたいのですが、新機能の検証をする時には、新旧動作を比較したくなるケースもあります。
というわけで今回は、以下の要件で最新のAWS CLI v2を使えるようにしていきます。
- 最新のAWS CLI v2が使える
- 既存のAWS CLI v2も使える(どちらも同時に使える)
- 一時的なインストールとし、AWS CloudShellの環境が終了したら消える(無駄に残り続けない)
- 必要なときにだけ自分でセットアップを呼び出せる(常に自動でセットアップしない)
いろんなコンセプトが考えられますが、私がやりたいのはこんな感じのです。
やってみた
AWS CloudShellを立ち上げたら下記のようにセットアップスクリプトを作成します。
cat << 'EOF' > ~/setup-latest-awscliv2.sh
#!/bin/bash
# --- 1. source チェック ---
# スクリプトが直接実行(./ や sh)されているか確認
if [[ "${BASH_SOURCE[0]}" == "${0}" ]]; then
echo "Error: このスクリプトは 'source' コマンドで実行する必要があります。"
echo ""
echo "使い方:"
echo " source ~/setup-latest-awscliv2.sh"
echo ""
exit 1
fi
# --- 2. クリーンアップと準備 ---
rm -rf /tmp/awscli_install /tmp/aws-cli /tmp/bin/aws
mkdir -p /tmp/awscli_install && cd /tmp/awscli_install
# --- 3. ダウンロードとインストール ---
echo "Downloading latest AWS CLI..."
curl -s "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
unzip -q awscliv2.zip
echo "Installing to /tmp (Ephemeral)..."
# /tmp 内に隔離してインストール(sudo不要)
./aws/install -i /tmp/aws-cli -b /tmp/bin > /dev/null
# --- 4. エイリアスの設定 ---
alias awsdef='/usr/local/bin/aws'
alias aws='/tmp/bin/aws'
# --- 5. 後片付けと完了表示 ---
cd ~
rm -rf /tmp/awscli_install
echo "------------------------------------------"
echo "AWS CLI v2 Setup Complete (Ephemeral)"
echo "------------------------------------------"
echo "エイリアスを設定しました:"
echo " - aws : $(/tmp/bin/aws --version | head -n 1) ※最新版"
echo " - awsdef : $(/usr/local/bin/aws --version | head -n 1) ※標準版"
echo ""
echo "※この設定はセッションが終了すると自動的に消去されます。"
echo "------------------------------------------"
EOF
一度作ったら、次からは実行するだけです。実行は以下のようにsourceで呼び出します。
source ~/setup-latest-awscliv2.sh
sourceで実行するはエイリアスの設定を行っているためです。bashで実行しようとすると以下のようにエラーになるので(私に対して)親切設計です。
[cloudshell-user@ip-10-135-1-63 ~]$ bash setup-latest-awscliv2.sh
Error: このスクリプトは 'source' コマンドで実行する必要があります。
使い方:
source ~/setup-latest-awscliv2.sh
実行すると以下のようになります。
[cloudshell-user@ip-10-135-1-63 ~]$ source setup-latest-awscliv2.sh
Downloading latest AWS CLI...
Installing to /tmp (Ephemeral)...
------------------------------------------
AWS CLI v2 Setup Complete (Ephemeral)
------------------------------------------
エイリアスを設定しました:
- aws : aws-cli/2.34.37 Python/3.14.4 Linux/6.1.166-197.305.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023 ※最新版
- awsdef : aws-cli/2.34.34 Python/3.14.4 Linux/6.1.166-197.305.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023 ※標準版
※この設定はセッションが終了すると自動的に消去されます。
------------------------------------------
最新のAWS CLI v2が/tmp配下にインストールされ、awsエイリアスが置き換えられました。デフォルトで入っていたバージョンはawsdefから呼び出せるようにしています。
実際に両方とも実行できることを確認します。
[cloudshell-user@ip-10-135-1-63 ~]$ aws --version
aws-cli/2.34.37 Python/3.14.4 Linux/6.1.166-197.305.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
[cloudshell-user@ip-10-135-1-63 ~]$ awsdef --version
aws-cli/2.34.34 Python/3.14.4 Linux/6.1.166-197.305.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
自分で実行しても問題なく動きますね。これで心置きなく検証ができます。
環境を再起動して、セットアップしたものが消えるのを確認します。右上のアクションから「再起動」します。

確認が出るので「再起動」。

これで環境がリセットされました。awsとawsdefをそれぞれ実行してみます。
[cloudshell-user@ip-10-133-91-25 ~]$ aws --version
aws-cli/2.34.34 Python/3.14.4 Linux/6.1.166-197.305.amzn2023.x86_64 exec-env/CloudShell exe/x86_64.amzn.2023
[cloudshell-user@ip-10-133-91-25 ~]$ awsdef --version
bash: awsdef: command not found
ちゃんと消えましたね。
まとめ
AWS CloudShell上で最新のAWS CLI v2をセットアップしつつ、既存も使えるように残すスクリプトを作りました。
自分の目的にあったセットアップの仕組みを検討してみてはいかがでしょうか?





