ネイティブランタイムでは、Function Compute が自動的にレイヤーディレクトリを依存関係の検索パスに追加します。一方、カスタムランタイムでは Python、Node.js、Java、PHP など複数の言語およびバージョンがサポートされていますが、関数構成内の環境変数またはエントリファイル内のコードを通じて、手動でレイヤーディレクトリを検索パスに追加する必要があります。
このトピックでは、Python、Node.js、Java、PHP を取り上げます。
デフォルトのレイヤーディレクトリ
カスタムレイヤーの作成で説明されている構造に従ってレイヤーの ZIP ファイルをビルドすると、Function Compute はレイヤーの内容を以下のデフォルトディレクトリに展開します。
| 言語 | デフォルトディレクトリ | 環境変数 |
|---|---|---|
| Python | /opt/python | PYTHONPATH |
| Node.js | /opt/nodejs/node_modules | NODE_PATH |
| Java | /opt/java/lib/* | CLASSPATH |
| PHP | /opt/php | — |
ZIP ファイルの最上位ディレクトリにカスタム名を使用した場合、レイヤーは /opt/<your-directory-name> に展開されます。たとえば、最上位ディレクトリが my-layer-code の場合、レイヤーは /opt/my-layer-code に展開されます。以下の例で示すデフォルトパスは、実際のディレクトリに置き換えてください。
Python
以下のいずれかの方法を選択してください。
方法 1:環境変数を設定する(推奨)
関数構成で、PYTHONPATH 環境変数を設定します。
PYTHONPATH=/opt/python方法 2:コード内でパスを追加する
レイヤーからのインポートより前に、エントリファイルに以下の行を追加します。
import sys
sys.path.append('/opt/python')
# import {PackageFromLayer}動作する完全なサンプルについては、「python-demo-with-lib-in-layer」をご参照ください。
Node.js
関数構成で、NODE_PATH 環境変数を設定します。
NODE_PATH=/opt/nodejs/node_modules動作する完全なサンプルについては、「nodejs-demo-with-lib-in-layer」をご参照ください。
Java
以下のいずれかの方法を選択してください。
方法 1:起動コマンドで -classpath を指定する(推奨)
-classpath パラメーターに /opt/java/lib/* を追加します。
java -Dserver.port=9000 -classpath /code/:/opt/java/lib/* com.example.demo.DemoApplication方法 2:環境変数を設定する
関数構成で、CLASSPATH 環境変数を設定します。
CLASSPATH=/code/:/opt/java/lib/*CLASSPATH 環境変数を使用する場合、-jar フラグは使用しないでください。-jar を指定すると、Java 仮想マシン (JVM) は JAR ファイル内の MANIFEST.MF からクラスパスを読み取り、すべての環境変数およびコマンドラインでのクラスパス設定を無視します。そのため、CLASSPATH は効果がありません。たとえば、java -classpath ${CLASSPATH} -jar yourJarExe.jar は期待通りに動作しません。
PHP
レイヤーからのインポートより前に、エントリファイルに以下の行を追加します。
<?php
$path = '/opt/php';
set_include_path(get_include_path() . PATH_SEPARATOR . $path);