Function Computeでは、複数のメソッドでレイヤーを構築できます。 純粋なPythonライブラリなど、動的リンクライブラリを含まない依存関係の場合は、Function Computeコンソールに依存関係を直接インストールするか、オンプレミスマシンにレイヤーを構築できます。 依存関係にダイナミックリンクライブラリが含まれている場合、またはオンプレミス環境がFunction Computeランタイム環境と互換性がない場合、Function Computeコンソールまたはオンプレミスマシンでレイヤーを構築することはできません。 Dockerfileのみに基づいてレイヤーを構築できます。 このトピックでは、Dockerfileに基づいてレイヤーを構築する方法について説明します。 このトピックで使用する例では、Puppeteerの依存関係はNode.jsランタイムにインストールされます。
注意事項
レイヤーをビルドするときは、各言語の依存関係ライブラリをレイヤーZIPファイルの指定されたディレクトリにパッケージ化することをお勧めします。 詳細については、「カスタムレイヤーの作成」をご参照ください。 たとえば、PythonライブラリをレイヤーZIPパッケージの /python
ディレクトリにパッケージ化します。 依存ライブラリにダイナミックリンクライブラリが含まれている場合は、ダイナミックリンクライブラリをZIPファイルの /lib
ディレクトリに配置することをお勧めします。 ライブラリがFunction Computeのランタイムにアップロードされると、ライブラリは自動的に /opt/lib
ディレクトリに解凍されます。 組み込みランタイムを使用する場合、/opt/lib
ディレクトリがLD_LIBRARY_PATHパスに自動的に追加されます。 カスタムランタイムを使用する場合は、ディレクトリを手動で追加する必要があります。
Puppeteerレイヤーを構築する
ステップ1: Dockerfileを準備する
次のサンプルコードは例を示しています。
# Specify the base image. We recommend that you use the build-latest image.
# When you build a layer on an on-premises machine, the runtime version of the base image must be the same as the runtime version of the function.
# For Chinese mainland users, we recommend that you use a base image in the registry.cn-beijing.aliyuncs.com repository.
FROM aliyunfc/runtime-nodejs14:build-latest
# Declare environment variables and specify the working directory as /tmp.
ENV PATH /opt/bin:$PATH
ENV LD_LIBRARY_PATH /opt/lib
ENV NODE_PATH /opt/nodejs/node_modules
WORKDIR /tmp
# Install the Puppeteer library to the /opt/nodejs directory.
COPY ./package.json /opt/nodejs/
RUN cd /opt/nodejs \
&& npm --registry https://registry.npmmirror.com i
# Download the .deb file that needs to be installed in the system dependency library to the /tmp/install/archives directory.
RUN mkdir -p /opt/lib /tmp/install
RUN apt-get update && apt-get install -y -d -o=dir::cache=/tmp/install \
libblas3 fonts-liberation libappindicator3-1 libasound2 libatk-bridge2.0-0 \
libgtk-3-0 libnspr4 libnss3 libpangocairo-1.0-0 libxcb-dri3-0 \
libx11-xcb1 libxcb1 libxss1 libxtst6 lsb-release \
xdg-utils libatspi2.0-0 libatk1.0-0 libxkbcommon0 libepoxy0 \
libglapi-mesa libnspr4 libgbm-dev \
--reinstall --no-install-recommends
RUN for f in $(ls /tmp/install/archives/*.deb); do \
echo "Preparing to unpack ${f##*/}"; \
cd /tmp/install/archives; \
dpkg-deb -x ${f##*/} /tmp/install; \
done;
# Copy the installed .so file to the /opt/lib directory.
RUN cp -r /tmp/install/usr/bin /opt/; \
cp -r /tmp/install/usr/lib/x86_64-linux-gnu/* /opt/lib/
# Package files in the /opt/lib directory into a ZIP file. Note that the -y parameter must be added to retain the symbolic link.
# .[^.]* indicates to include hidden files and exclude the parent directory.
RUN cd /opt \
&& zip -ry layer.zip * .[^.]*
CMD ["bash"]
ステップ2: レイヤーZIPパッケージを構築する
次のコマンドを実行して、Dockerfileファイルを使用してイメージをパッケージ化します。
sudo docker build -t ${layer-image-name} -f Dockerfile .
次のコマンドを実行して、画像からレイヤーZIPファイルをコピーします。
sudo docker run --rm -v $(pwd):/tmp ${layer-image-name} sh -c "cp /opt/layer.zip /tmp/"
ステップ3: カスタムレイヤーを作成する
レイヤーZIPパッケージの作成後、Function ComputeコンソールまたはServerless Devsを使用してレイヤーを作成できます。 レイヤーのアップロード方法をZIPパッケージでレイヤーをアップロードするに設定します。 詳細については、「カスタムレイヤーの作成」をご参照ください。
Function Computeのベースイメージ
次の項目は、Function Computeのさまざまなプログラミング言語のプリセットベースイメージを示しています。 対応するイメージリポジトリパスからベースイメージを直接プルできます。 たとえば、次のプルスクリプトを使用できます。 docker pull aliyunfc/runtime-python3.10:latest
詳細については、GitHubの「fc-docker」をご参照ください。
次に何をすべきか
レイヤーの作成後、function ComputeコンソールまたはServerless Devsを使用してレイヤーを関数にバインドし、レイヤーで提供されているリソースに関数がアクセスできるようにします。 詳細については、「カスタムレイヤーの設定」をご参照ください。