レイヤーを使用すると、一般的な依存関係、ランタイム、関数拡張などのカスタムリソースをパブリッシュおよびデプロイできます。 関数が依存するパブリックライブラリをレイヤーに抽象化するか、Function Computeの共通レイヤーを使用して、関数のデプロイまたは更新時にコードパッケージのサイズを縮小できます。 このトピックでは、さまざまなランタイムでのレイヤーの使用状況、レイヤーの機能、レイヤーのZIPパッケージの作成方法、およびカスタムレイヤーの作成方法と削除方法について説明します。
使用上の注意
レイヤーをビルドするときは、コンテンツをZIPファイルにパッケージ化する必要があります。 Function Computeのランタイムは、レイヤーのコンテンツを解凍し、/optディレクトリにデプロイします。
関数に対して複数のレイヤーが設定されている場合、これらのレイヤーのコンテンツはマージされ、/optディレクトリに逆の順序で格納されます。 複数のレイヤーに同じ名前のファイルが含まれている場合、上位レイヤーのファイルは下位レイヤーの同じ名前のファイルを上書きします。
レイヤーのコードがバイナリライブラリまたは実行可能ファイルに依存している場合は、Linuxシステムを使用してレイヤーをコンパイルおよびビルドする必要があります。 Debian 9が推奨されます。
レイヤーの依存関係ライブラリが命令セットに依存している場合は、AMD 64アーキテクチャのマシンを使用するか、またはクロスコンパイルを実行して、依存関係ライブラリがFunction Computeのランタイムと互換性があることを確認する必要があります。
異なるランタイムでのレイヤーの使用状況ノート
レイヤーをサポートするランタイムの場合、Function Computeはランタイムの依存関係の検索ディレクトリに特定のディレクトリを追加します。 ディレクトリを次の表に示します。 レイヤZIPパッケージに同じフォルダ構造が定義されている場合、関数コードはパスを指定せずにレイヤにアクセスできます。
各ランタイムに追加できるディレクトリ
ランタイム | ディレクトリ |
Python | /opt/python |
Node.js | /opt/nodejs/node_modules |
Java | /opt/java/lib |
PHP | /opt/php |
その他のランタイム (カスタムランタイムとカスタムコンテナーランタイムを除く) | /opt/bin (パス) |
/opt/lib (LD_LIBRARY_PATH) |
各ランタイムのZIPパッケージのファイル構造
File structure after the requests dependency is used for packaging
my-layer-code.zip
└── python
└── requests
Path after the ZIP package is decompressed and deployed
/
└── opt
└── python
└── requests
File structure after the uuid dependency is used for packaging
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Path after the ZIP package is decompressed and deployed
/
└── opt
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
File structure after the jackson-core dependency is used for packaging
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Path after the ZIP package is decompressed and deployed
/
└── opt
└── java
└── lib
└── commons-lang3-3.12.0.jar
File structure after the composer dependency is used for packaging
my-layer-code.zip
└── php
├──composer.json
├──composer.lock
└──vendor
Path after the ZIP file is decompressed and deployed
/
└── opt
└── php
├──composer.json
├──composer.lock
└──vendor
レイヤーのZIPパッケージを作成する
レイヤーを作成するときは、コンテンツをZIPファイルにパッケージ化する必要があります。 Function Computeのランタイムは、レイヤーのコンテンツを解凍し、/optディレクトリにデプロイします。
をビルドするメソッド。The method to build the. レイヤーのzipファイルは、コードパッケージをビルドする方法と似ています。 関数ランタイムがレイヤライブラリを期待どおりにロードできるようにするには、レイヤライブラリのコードディレクトリが各言語の標準パッケージ規則に準拠している必要があります。 詳細については、「異なるランタイムのレイヤーの使用状況に関する注意事項」をご参照ください。 レイヤー上の関数の依存関係ライブラリの場合、標準のパッケージルールに基づいてライブラリをパッケージ化すると、function Computeのランタイムは異なる言語の関数ライブラリの検索パスを自動的に追加します。フルパスを指定する必要はありません。 レイヤーのディレクトリ構造をカスタマイズする場合は、依存関係ライブラリの検索パスをコードに明示的に追加する必要があります。 詳細については、「カスタムランタイムでレイヤーの依存関係を参照する方法」をご参照ください。
このセクションでは、各ランタイムでレイヤーのZIPパッケージを構築する方法について説明します。
オンプレミスのマシンでレイヤーをビルドする場合、使用するプログラミング言語はFunction Computeのランタイムのプログラミング言語と同じである必要があります。
このセクションで作成した作業ディレクトリmy-layer-codeは一例です。 実際のディレクトリに置き換えます。
Pythonランタイム
オンプレミスのマシンでレイヤーをビルドする場合、使用するPythonのバージョンは、Function ComputeのPythonランタイムのバージョンと同じである必要があります。
次のコマンドを実行して、作業ディレクトリを作成します。
mkdir my-layer-code
作成した作業ディレクトリに移動します。
cd my-layer-code
次のコマンドを実行して、依存関係ライブラリをmy-layer-code/pythonにインストールします。
pip install --target ./python ${PackageName}
${PackageName} は、インストールする依存関係ライブラリの名前を示します。
pip install
コマンドの詳細については、「pip install」をご参照ください。サンプルコード:
pip install --target ./python numpy
依存関係をインストールしたら、ディレクトリ構造が次の構造に準拠しているかどうかを確認します。
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs
my-layer-codeディレクトリで次のコマンドを実行し、依存関係をパッケージ化します。
zip -r my-layer-code.zip python
Node.jsランタイム
オンプレミスマシンでレイヤーを構築する場合、使用するNode.jsのバージョンは、Function ComputeのNode.jsランタイムのバージョンと同じである必要があります。
次のコマンドを実行して、作業ディレクトリを作成します。
mkdir my-layer-code
作成した作業ディレクトリに移動します。
cd my-layer-code
次のコマンドを実行して、依存関係ライブラリをmy-layer-code/nodejsにインストールします。
npm install --prefix ./nodejs --save ${PackageName}
${PackageName}
は、インストールする依存関係ライブラリの名前を示します。npm install
コマンドの詳細については、「npm-install」をご参照ください。サンプルコード:
npm install --prefix ./nodejs --save uuid
依存関係をインストールしたら、ディレクトリ構造が次の構造に準拠しているかどうかを確認します。
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json
my-layer-codeで次のコマンドを実行して、依存関係をパッケージ化します。
zip -r my-layer-code.zip nodejs
Javaランタイム
次のコマンドを実行して、作業ディレクトリを作成します。
mkdir my-layer-code/java
作成した作業ディレクトリに移動します。
cd my-layer-code/java
Mavenを使用して依存関係をインストールします。
作成します。Create thepom.xmlファイル内のmy-layer-code/javaディレクトリに移動します。
例:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>maven.util</groupId> <artifactId>install-layer</artifactId> <version>1.0</version> <!-- The Maven dependencies to download --> <dependencies> <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> </dependencies> <build> <plugins> <!-- Maven-related download plug-ins --> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <!-- Specify whether to exclude indirect dependencies. Default value: false. --> <excludeTransitive>false</excludeTransitive> <!-- Specify whether to remove the version information in the suffix of the dependency JAR package. Default value: false. --> <stripVersion>false</stripVersion> <!-- The path of the output file--> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project>
説明
インストールする依存関係パッケージは
org.apache.com mons.lang3
です。maven-dependency-plugin
を使用して、依存パッケージを /java/libディレクトリにコピーします。
my-layer-code/javaディレクトリで次のコマンドを実行し、依存関係をインストールします。
mvn dependency:copy-dependencies
依存関係をインストールしたら、ディレクトリ構造が次の構造に準拠しているかどうかを確認します。
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jar
my-layer-codeディレクトリで次のコマンドを実行して、依存関係をパッケージ化します。
zip -r my-layer-code.zip java
PHPランタイム
次のコマンドを実行して、作業ディレクトリを作成します。
mkdir -p my-layer-code/php
作成した作業ディレクトリに移動します。
cd my-layer-code/php
(推奨) Composerを使用して依存関係をインストールします。
では、my-layer-code/phpディレクトリを作成し、composer.jsonファイルを作成します。
例:
{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } }
依存関係をインストールします。
composer install
依存関係をインストールしたら、ディレクトリ構造が次の構造に準拠しているかどうかを確認します。
my-layer-code └─php ├──composer.json ├──composer.lock └──vendor
my-layer-codeディレクトリで次のコマンドを実行して、依存関係をパッケージ化します。
zip -r my-layer-code.zip php
カスタムレイヤーの作成
Function Computeコンソールでカスタムレイヤーを作成する
前提条件
関数が作成されます。 詳細については、「関数の作成」をご参照ください。
手順
レイヤーのZIPパッケージを作成する方法の詳細については、「レイヤーのZIPパッケージを作成する」をご参照ください。
Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーで、リージョンを選択します。 [レイヤー] ページで、[レイヤーの作成] をクリックします。
レイヤーの作成ページで、関連パラメーターを指定し、作成 をクリックします。
パラメーター
説明
名前
作成するレイヤーの名前を入力します。
説明
レイヤーの説明を入力します。 レイヤ記述は、レイヤを区別するために使用され得る。
互換性のあるランタイム
互換性のあるランタイムを選択します。
レイヤーのアップロード方法
レイヤーの依存関係をアップロードする方法を選択します。 次のいずれかの方法を使用して、レイヤーの依存関係をアップロードできます。
ZIPパッケージでレイヤーをアップロード: レイヤーのZIPファイルを選択します。
フォルダーにレイヤーをアップロード: レイヤーのZIPファイルがあるフォルダーを選択します。
OSSを使用したレイヤーのアップロード: [バケット名] と [オブジェクト名] パラメーターを指定して、レイヤーのZIPファイルを選択します。
[オンラインでの依存関係レイヤーの構築]: [ビルド環境] を指定し、レイヤーの依存関係ファイル
package.json
またはrequirements.txt
をアップロードします。説明PythonとNode.jsのランタイムのみが、依存関係レイヤーのオンライン構築をサポートします。 依存関係パッケージのアップロード時間は15分、依存関係パッケージのサイズは500 MBです。
レイヤーが作成されると、システムはレイヤーバージョンを生成します。 バージョン番号は1から始まります。
新しいバージョンを作成します。
説明作成したレイヤーまたは作成したレイヤーのバージョンを変更することはできません。 レイヤーの構成を更新する場合は、新しいレイヤーまたは新しいバージョンを作成できます。 参照されているレイヤバージョンが削除されている場合は、レイヤ設定を更新する前に参照を削除する必要があります。
レイヤーページで、管理するレイヤーを見つけて、レイヤーの名前をクリックするか、バージョンで、アクション列を作成します。
では、バージョン表示されるページのセクションをクリックします。バージョンの作成 をクリックします。
レイヤーバージョンを作成するページで、ランタイムを選択し、新しいレイヤーコードをアップロードして、作成 をクリックします。
Serverless Devsを使用してカスタムレイヤーを作成する
前提条件
手順
レイヤーのZIPパッケージを作成する方法の詳細については、「レイヤーのZIPパッケージを作成する」をご参照ください。
次のコマンドを実行してレイヤーを作成します。
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,Java11,custom --region cn-hangzhou --layer-name my-layer
説明:
-- code
: コードパッケージのパスを指定します。-- compatible-runtime
: レイヤーの互換ランタイムを指定します。-- layer-name
: レイヤーの名前を指定します。
レイヤーが作成されると、成功メッセージが表示され、レイヤーのARNが返されます。 ARNは、
#
で区切られた3つの部分を含む。 最初の部分はアカウントIDの識別子であり、2番目の部分はレイヤーの名前であり、3番目の部分はレイヤーのバージョンです。 以下の図は一例です。 Function Computeコンソールにログインして、作成したレイヤーに関する情報を表示できます。次のコマンドを繰り返して、作成したレイヤーの新しいバージョンを作成します。
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layer
説明作成したレイヤーまたは作成したレイヤーのバージョンを変更することはできません。 レイヤーの構成を更新する場合は、新しいレイヤーまたは新しいバージョンを作成できます。 参照されているレイヤバージョンが削除されている場合は、レイヤ設定を更新する前に参照を削除する必要があります。
レイヤーとレイヤーバージョンを削除する
ビジネス要件に基づいて、使用されなくなったレイヤーまたはそのバージョンを削除できます。 削除されたレイヤーは、関数設定によって表示または参照できなくなりました。 ただし、レイヤーを参照するように構成された関数の実行は影響を受けません。
Function Computeコンソールにログインします。
左側のナビゲーションウィンドウで、 を選択します。
上部のナビゲーションバーで、リージョンを選択します。
レイヤーページで、ビジネス要件に基づいてレイヤーまたはレイヤーバージョンを削除します。
レイヤーの削除
削除するレイヤーを見つけて、[操作] 列の [削除] をクリックします。 表示されるダイアログボックスで、[レイヤーのNバージョンをすべて削除する] を選択し、[削除] をクリックします。
レイヤーバージョンの削除
バージョンを削除するレイヤーの名前をクリックします。 レイヤーの詳細ページの [バージョン] セクションで、削除するレイヤーバージョンを見つけ、[操作] 列の [削除] をクリックします。 表示される [確認] メッセージで、[削除] をクリックします。
関連ドキュメント
layers
パラメーターを使用して、関数を作成および更新するときにレイヤーを設定できます。 詳細については、「CreateFunction」および「UpdateFunction」をご参照ください。関数でカスタムレイヤーを使用する方法の詳細については、「レイヤーの管理」および「関数のパブリックレイヤーの設定」をご参照ください。