四苦八苦したので備忘録代わりに。
そもそもなぜdockerを使おうとしたのか?
→lambdaのレイヤーに、moduleをインポートしたかったけど、
windows環境でpip installしたものを圧縮して、lambdaにアップロードしてもうまくいかなかったため。
環境がwindowsで作成したものだとよくないとのことがあり、
aws のcloud9を使って
win11でdocker
→起動できない
HyperVプラットフォーム
の機能をONに
→できない
BIOSのセットアップ画面から以下二つを有効化
・CPU
・virtualizaion
再起動して、タスクマネージャ起動→パフォーマンス→右下に「仮想化:有効」となっていることを確認
→あらためてHyperVプラットフォーム
の機能をONに
# syntax=docker/dockerfile:1
# Install necessary dependencies
FROM amazonlinux:2 as builder
RUN yum update -y && yum install -y tar gzip make gcc openssl-devel bzip2-devel libffi-devel zip
# Install Python
ARG PYTHON_VERSION=3.9.13
RUN curl https://www.python.org/ftp/python/${PYTHON_VERSION}/Python-${PYTHON_VERSION}.tgz | tar xz \
&& cd Python-${PYTHON_VERSION} && ./configure && make && make install
# Build runtime image
FROM amazonlinux:2
COPY --from=builder /usr/local /usr/local
# Install line-bot-sdk
RUN /usr/local/bin/python3.9 -m venv venv && \
source venv/bin/activate && \
pip3 install line-bot-sdk && \
deactivate
# Install zip command
RUN yum install -y zip
# Create a ZIP file with the installed libraries
RUN mkdir -p /python/lib/python3.9/site-packages && \
cp -r /venv/lib/python3.9/site-packages/* /python/lib/python3.9/site-packages/ && \
cd /python && zip -r /aws-layers.zip .
注意1
https://www.python.org/ftp/python/
のFTPにあるバージョンがあるものしかDLできない
注意2
aws-layers.zip
└── python
└── lib
└── python3.9
└── site-packages
└── linebot_sdk
この構造にする必要があるらしく、最後にフォルダを作っている
・docker コンテナから該当ファイルを取り出す
Dockerfileのあるフォルダにいき、
docker runで起動
別のコマンドプロンプトを開き、
docker ps
でコンテナが作成されていることを確認。
docker cp コンテナID:該当フォルダ名 ローカルに保存する先の絶対パス
追記・・うまくいきませんで。
cloud9でつくってうまくいきました。
参考URL
https://qiita.com/ndj/items/bbc96b8aa910b49cce1e
うまくいかなった理由は
・ファイル名がPythonじゃなかった
・line-bot-sdkでインストールしたファイルを、ぜんぶ圧縮できていなかった
(line-bot-sdkという名前のファイルだけを圧縮してアップロードしていた)
を考えてますが、検証できてないです。