インターネットに接続できない環境で、Wheelファイルを使用することでPythonのパッケージのインストールが可能です。
今回は、IGWがアタッチされていない環境でEC2に、boto3をインストールします。
まとめ
- pipを使わずに、whlファイルを使ってインストールします。
概要
Wheelファイルとは?
PEP427を参照すると、以下のように書かれています。
wheel は、特別な形式のファイル名と .whl 拡張子を持つ ZIP 形式のアーカイブです。特定のインストールスキームで PEP 376 に従ってインストールされるのとほぼ同じ単一のディストリビューションが含まれています。専用のインストーラーが推奨されますが、標準の「unzip」ツールを使用してサイト パッケージに展開するだけでホイール ファイルをインストールできます。
- Wheelは、ZIP形式のアーカイブのこと。拡張子は、「.whl」。
実践
インターネットが繋がるPC上で、whlファイルをダウンロードし一旦S3に配置後、EC2からダウンロードしインストールします。
whlファイルのダウンロード
インターネットが繋がるPCで、boto3と関連するファイルをダウンロードし、S3にアップロードします。
curl https://files.pythonhosted.org/packages/23/d8/3b41ce8c96dedbb449f24de21eee0742786f414fea176f984b1101154f30/boto3-1.24.84-py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/36/32/6ddb12143e32535550263514875db6d1a3ad50daf1377fbb1aac03a000aa/botocore-1.27.84-py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/31/b4/b9b800c45527aadd64d5b442f9b932b00648617eb5d63d2c7a6587b7cafc/jmespath-1.0.1-py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/d9/5a/e7c31adbe875f2abbb91bd84cf2dc52d792b5a01506781dbcf25c91daf11/six-1.16.0-py2.py3-none-any.whl -O
curl https://files.pythonhosted.org/packages/6f/de/5be2e3eed8426f871b170663333a0f627fc2924cc386cd41be065e7ea870/urllib3-1.26.12-py2.py3-none-any.whl -O
aws s3 cp boto3-1.24.84-py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp botocore-1.27.84-py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp jmespath-1.0.1-py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp python_dateutil-2.8.2-py2.py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp six-1.16.0-py2.py3-none-any.whl s3://${バケット名}/ec2/
aws s3 cp urllib3-1.26.12-py2.py3-none-any.whl s3://${バケット名}/ec2/
インストール
EC2にログインし、先程、アップロードしたファイルをS3からダウンロード後、インストールします。
aws s3 cp s3://${バケット名}/ec2/boto3-1.24.84-py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/botocore-1.27.84-py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/mespath-1.0.1-py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/python_dateutil-2.8.2-py2.py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/six-1.16.0-py2.py3-none-any.whl /home/ssm-user/
aws s3 cp s3://${バケット名}/ec2/urllib3-1.26.12-py2.py3-none-any.whl /home/ssm-user/
sh-4.2$ pwd
/home/ssm-user
sh-4.2$ ls -l
total 9528
-rw-r--r-- 1 ssm-user ssm-user 132500 Oct 1 15:13 boto3-1.24.84-py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user 9189276 Oct 1 15:46 botocore-1.27.84-py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user 20256 Oct 1 15:53 jmespath-1.0.1-py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user 247702 Oct 1 15:58 python_dateutil-2.8.2-py2.py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user 11053 Oct 1 16:05 six-1.16.0-py2.py3-none-any.whl
-rw-r--r-- 1 ssm-user ssm-user 140381 Oct 1 16:09 urllib3-1.26.12-py2.py3-none-any.whl
sh-4.2$
pip3 install --no-deps ./boto3-1.24.84-py3-none-any.whl
pip3 install --no-deps ./botocore-1.27.84-py3-none-any.whl
pip3 install --no-deps ./mespath-1.0.1-py3-none-any.whl
pip3 install --no-deps ./python_dateutil-2.8.2-py2.py3-none-any.whl
pip3 install --no-deps ./six-1.16.0-py2.py3-none-any.whl
pip3 install --no-deps ./urllib3-1.26.12-py2.py3-none-any.whl
sh-4.2$ pip3 list
Package Version
----------------- -------
aws-cfn-bootstrap 2.0
boto3 1.24.84
botocore 1.27.84
docutils 0.14
jmespath 1.0.1
lockfile 0.11.0
pip 20.2.2
pystache 0.5.4
python-daemon 2.2.3
python-dateutil 2.8.2
setuptools 49.1.3
simplejson 3.2.0
six 1.16.0
urllib3 1.26.12
sh-4.2$
考察
インターネットに繋がらない環境で、環境を構築することはたまにあります。
忘れないようにメモとして残しておきます。