🐳
[AWS Lambda]DockerのPython環境で外部モジュールインポート用のファイルを作成する
なぜDockerを利用しようと思ったのか
- 先日、AWS公式のハンズオンお役立ち Twitter Bot を作りながら学ぶ AWS ドリルでLambdaにトライしました。
- ハンズオンでは必要なPythonの外部ライブラリのインストールをAWS CloudShellを利用していた。
- Cloudshellだと毎回必要なライブラリのインストールをコマンド打つ必要がある。
- dockerを利用するれば、Dockerfileに汎用的なライブラリを溜めていけるかなと思った。
- dockerを触りたかったから。
1.Pythonのコンテナを起動する
1-1.事前準備Dockerfile etc.
docker-python
├── Dockerfile //コンテナイメージを定義
├── docker-compose.yml //コンテナの起動条件を定義
└── opt //コンテナのボリュームと同期するディレクトリとして用意
1-2.コンテナを起動する
$ docker compose up -d --build
:
:
:
=> exporting to image 0.1s
=> => exporting layers 0.1s
=> => writing image sha256:d0302a769966fc8d378864ebe60832b325ff5da5a649de0b41a95b5528c52392 0.0s => => naming to docker.io/library/docker-python_python3 0.0s
Use 'docker scan' to run Snyk tests against images to find vulnerabilities and learn how to fix them
[+] Running 2/2
⠿ Network docker-python_default Created 0.0s
⠿ Container python3 Started //これが表示されたらOK
2.コンテナのシェルを起動して必要なライブラリをインストールする
2-1.シェルを起動する
$ docker compose exec [container_name] bash
$ docker compose exec python3 bash
root@6e9ee9529331:~# //このように表示が変わればシェルが起動されている状態
//lsコマンドを実行して同期するディレクトリ名が表示されていればOK
root@6e9ee9529331:~# ls
opt
2-2. 必要なライブラリをインストールする
pip install [ライブラリ名] -t [ディレクトリ]
-t : インストール先のディレクトリを[ディレクトリ]で指定する
root@6e9ee9529331:~# cd opt/
root@6e9ee9529331:~/opt# pip install requests -t .
Collecting requests
Downloading requests-2.28.0-py3-none-any.whl (62 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 62.8/62.8 kB 1.1 MB/s eta 0:00:00
Collecting certifi>=2017.4.17
Downloading certifi-2022.5.18.1-py3-none-any.whl (155 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 155.2/155.2 kB 2.1 MB/s eta 0:00:00
Collecting idna<4,>=2.5
Downloading idna-3.3-py3-none-any.whl (61 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 61.2/61.2 kB 3.6 MB/s eta 0:00:00
Collecting charset-normalizer~=2.0.0
Downloading charset_normalizer-2.0.12-py3-none-any.whl (39 kB)
Collecting urllib3<1.27,>=1.21.1
Downloading urllib3-1.26.9-py2.py3-none-any.whl (138 kB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 139.0/139.0 kB 4.7 MB/s eta 0:00:00
Installing collected packages: urllib3, idna, charset-normalizer, certifi, requests
Successfully installed certifi-2022.5.18.1 charset-normalizer-2.0.12 idna-3.3 requests-2.28.0 urllib3-1.26.9
WARNING: Running pip as the 'root' user can result in broken permissions and conflicting behaviour with the system package manager. It is recommended to use a virtual environment instead: https://pip.pypa.io/warnings/venv
root@6e9ee9529331:~/opt# ls
bin charset_normalizer idna-3.3.dist-info urllib3
certifi charset_normalizer-2.0.12.dist-info requests urllib3-1.26.9.dist-info
certifi-2022.5.18.1.dist-info idna requests-2.28.0.dist-info
root@6e9ee9529331:~/opt#
3.インストールしたライブラリをzipファイルに圧縮する
zip -r [格納先] [圧縮対象]
-r : 再帰的な処理をする(指定したディレクトリの下層全てを圧縮対象にする)
root@6e9ee9529331:~/opt# zip -r ./modules.zip .
adding: bin/ (stored 0%)
adding: bin/normalizer (deflated 28%)
:
:
:
adding: urllib3-1.26.9.dist-info/WHEEL (deflated 14%)
adding: urllib3-1.26.9.dist-info/top_level.txt (stored 0%)
root@6e9ee9529331:~/opt# ls modules.zip
modules.zip
コンテナのシェル操作は終了。exitで離脱する。
root@6e9ee9529331:~/opt# exit
exit
4.コンテナと同期しているディレクトリにzipがあるか確認
$ pwd
/***/***/***/docker/docker-python/opt
$ ls modules.zip
-rw-r--r-- 1 fuji staff 800306 6 11 15:32 modules.zip
Discussion