はじめに
Python 仮想環境を利用して AWS CLI をインストールし、システムのパスに追加して使えるようにする手順をまとめてみました。
また、それぞれのコマンドの役割も説明していきます。
今回の環境は Alpine Linux です。
仮想環境の作成
まずは python3 をインストールします。
apk
/app # apk add python3
(1/15) Installing libbz2 (1.0.8-r6)
(2/15) Installing libexpat (2.6.4-r0)
(3/15) Installing libffi (3.4.6-r0)
(4/15) Installing gdbm (1.23-r1)
(5/15) Installing xz-libs (5.6.2-r0)
(6/15) Installing mpdecimal (4.0.0-r0)
(7/15) Installing ncurses-terminfo-base (6.4_p20240420-r2)
(8/15) Installing libncursesw (6.4_p20240420-r2)
(9/15) Installing libpanelw (6.4_p20240420-r2)
(10/15) Installing readline (8.2.10-r0)
(11/15) Installing sqlite-libs (3.45.3-r1)
(12/15) Installing python3 (3.12.7-r0)
(13/15) Installing python3-pycache-pyc0 (3.12.7-r0)
(14/15) Installing pyc (3.12.7-r0)
(15/15) Installing python3-pyc (3.12.7-r0)
Executing busybox-1.36.1-r29.trigger
Executing glibc-bin-2.33-r0.trigger
/usr/glibc-compat/sbin/ldconfig: /usr/glibc-compat/lib/ld-linux-x86-64.so.2 is not a symbolic link
1 error; 76 MiB in 48 packages
それでは、python3 を使って仮想環境を作成します。
ここでの仮想環境の名前は awscli-venv です。
仮想環境作成
/app # python3 -m venv awscli-venv
仮想環境の有効化
/app # source awscli-venv/bin/activate
AWS CLIのインストール
仮想環境内に AWS CLI をインストールします。
pip install
(awscli-venv) /app # pip install awscli
Collecting awscli
Downloading awscli-1.36.8-py3-none-any.whl.metadata (11 kB)
Collecting botocore==1.35.67 (from awscli)
Downloading botocore-1.35.67-py3-none-any.whl.metadata (5.7 kB)
Collecting docutils<0.17,>=0.10 (from awscli)
Downloading docutils-0.16-py2.py3-none-any.whl.metadata (2.7 kB)
Collecting s3transfer<0.11.0,>=0.10.0 (from awscli)
Downloading s3transfer-0.10.4-py3-none-any.whl.metadata (1.7 kB)
Collecting PyYAML<6.1,>=3.10 (from awscli)
Downloading PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl.metadata (2.1 kB)
Collecting colorama<0.4.7,>=0.2.5 (from awscli)
Downloading colorama-0.4.6-py2.py3-none-any.whl.metadata (17 kB)
Collecting rsa<4.8,>=3.1.2 (from awscli)
Downloading rsa-4.7.2-py3-none-any.whl.metadata (3.6 kB)
Collecting jmespath<2.0.0,>=0.7.1 (from botocore==1.35.67->awscli)
Downloading jmespath-1.0.1-py3-none-any.whl.metadata (7.6 kB)
Collecting python-dateutil<3.0.0,>=2.1 (from botocore==1.35.67->awscli)
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl.metadata (8.4 kB)
Collecting urllib3!=2.2.0,<3,>=1.25.4 (from botocore==1.35.67->awscli)
Downloading urllib3-2.2.3-py3-none-any.whl.metadata (6.5 kB)
Collecting pyasn1>=0.1.3 (from rsa<4.8,>=3.1.2->awscli)
Downloading pyasn1-0.6.1-py3-none-any.whl.metadata (8.4 kB)
Collecting six>=1.5 (from python-dateutil<3.0.0,>=2.1->botocore==1.35.67->awscli)
Downloading six-1.16.0-py2.py3-none-any.whl.metadata (1.8 kB)
Downloading awscli-1.36.8-py3-none-any.whl (4.5 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 4.5/4.5 MB 84.8 MB/s eta 0:00:00
Downloading botocore-1.35.67-py3-none-any.whl (13.0 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 13.0/13.0 MB 91.6 MB/s eta 0:00:00
Downloading colorama-0.4.6-py2.py3-none-any.whl (25 kB)
Downloading docutils-0.16-py2.py3-none-any.whl (548 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 548.2/548.2 kB 25.0 MB/s eta 0:00:00
Downloading PyYAML-6.0.2-cp312-cp312-musllinux_1_1_x86_64.whl (756 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 756.6/756.6 kB 34.5 MB/s eta 0:00:00
Downloading rsa-4.7.2-py3-none-any.whl (34 kB)
Downloading s3transfer-0.10.4-py3-none-any.whl (83 kB)
Downloading jmespath-1.0.1-py3-none-any.whl (20 kB)
Downloading pyasn1-0.6.1-py3-none-any.whl (83 kB)
Downloading python_dateutil-2.9.0.post0-py2.py3-none-any.whl (229 kB)
Downloading urllib3-2.2.3-py3-none-any.whl (126 kB)
Downloading six-1.16.0-py2.py3-none-any.whl (11 kB)
Installing collected packages: urllib3, six, PyYAML, pyasn1, jmespath, docutils, colorama, rsa, python-dateutil, botocore, s3transfer, awscli
Successfully installed PyYAML-6.0.2 awscli-1.36.8 botocore-1.35.67 colorama-0.4.6 docutils-0.16 jmespath-1.0.1 pyasn1-0.6.1 python-dateutil-2.9.0.post0 rsa-4.7.2 s3transfer-0.10.4 six-1.16.0 urllib3-2.2.3
[notice] A new release of pip is available: 24.2 -> 24.3.1
[notice] To update, run: pip install --upgrade pip
PATH環境変数に仮想環境のパスを追加
仮想環境の bin ディレクトリを PATH 環境変数に追加します。
これにより、仮想環境内の aws コマンドをシステム全体で使えるようにします。
PATH 環境変数へ追加
(awscli-venv) /app # export PATH=$PATH:/app/awscli-venv/bin
永続的にPATHを設定
上記のPATH設定を ~/.bashrc に追記します。
これにより、シェルを再起動しても仮想環境が認識されます。
PATH設定
(awscli-venv) /app # echo 'export PATH=$PATH:/app/awscli-venv/bin' >> ~/.bashrc
~/.bashrc の変更を反映
新しく追加した PATH 設定を反映します。
PATH設定反映
(awscli-venv) /app # source ~/.bashrc
AWS CLIのバージョン確認
AWS CLI が正常にインストールされたかを確認します。
バージョン番号が出力されれば成功です。
バージョン確認
(awscli-venv) /app # aws --version
おわりに
この方法によって Python の仮想環境を使って AWS CLI をインストールし、仮想環境内で利用できるようにセットアップしています。また、PATH を通して仮想環境を抜けた後でも利用できるようにしています。
この方法によって、AWS CLI のインストールや依存関係の影響をシステム全体から分離することができます。