すべてのプロダクト
Search
ドキュメントセンター

Function Compute:カスタムレイヤーの作成

最終更新日:Sep 10, 2026

レイヤーは、関数に共有の依存関係ライブラリ、ランタイム環境、および関数拡張機能を提供します。関数が依存する共通ライブラリをレイヤーに抽出したり、Function Compute (FC) のパブリックレイヤーを使用したりすることで、関数のデプロイまたは更新時にコードパッケージのサイズを削減できます。このトピックでは、レイヤーの仕組み、各ランタイムがサポートするディレクトリ、レイヤーの ZIP ファイルのビルド方法、およびカスタムレイヤーの作成と削除方法について説明します。

仕組み

レイヤーをビルドする際、そのすべてのコンテンツを 1 つの ZIP ファイルにパッケージ化します。実行時、FC はレイヤーのコンテンツを抽出し、/opt ディレクトリにデプロイします。関数に複数のレイヤーを設定すると、レイヤーのコンテンツは設定した順序とは逆に /opt にマージされます。あるレイヤーのファイルが別のレイヤーのファイルと同じ名前を持つ場合、先に設定したレイヤーのファイルが、後に設定したレイヤーのファイルを上書きします。

たとえば、関数にレイヤー 1 とレイヤー 2 を設定した場合、関数インスタンスは起動時にまずレイヤー 2 をロードし、次にレイヤー 1 をロードして、両方のレイヤーを /opt ディレクトリに抽出します。/opt 内では、レイヤー 2 のコンテンツが先に展開され、次にレイヤー 1 のコンテンツが展開されます。レイヤー 1 とレイヤー 2 に同じ名前のファイルが含まれている場合、レイヤー 1 のファイルがレイヤー 2 のファイルを上書きします。

ビルド要件:

  • レイヤーにバイナリライブラリや実行可能ファイルが含まれる場合、Linux (Debian 9 を推奨) 上でビルドしてください。

  • FC は x86_64 上で実行されます。依存関係が命令セットに依存する場合、互換性を確保するために x86_64 マシンを使用するか、クロスコンパイルしてください。

各ランタイムでサポートされるディレクトリ

ランタイムがレイヤーをサポートしている場合、FC はランタイム言語の依存関係の検索パスに以下のディレクトリを追加します。関数のコードが明示的なパスを指定せずにレイヤーのコンテンツにアクセスできるように、レイヤーの ZIP パッケージをこれらのパスに合わせて作成してください。レイヤー ZIP ファイルのビルド方法の詳細については、「レイヤー ZIP ファイルのビルド」をご参照ください。

ランタイム ディレクトリパス
Python /opt/python
Node.js /opt/nodejs/node_modules
Java /opt/java/lib
PHP /opt/php
その他のランタイム (カスタムランタイムおよびカスタムコンテナランタイムを除く) /opt/bin (PATH)、/opt/lib (LD_LIBRARY_PATH)
カスタムランタイムおよびカスタムコンテナランタイム なし

代わりにカスタムディレクトリ構造を使用する場合は、関数のコード内で依存関係の検索パスを明示的に追加してください。詳細については、「カスタムランタイムでレイヤー内の依存関係を参照する方法」をご参照ください。

レイヤー ZIP ファイルの構造

以下の例は、各ランタイムに必要な ZIP ファイルの構造と、対応する展開先パスを示しています。

Python — requests 依存関係をパッケージ化する場合:

my-layer-code.zip
└── python
    └── requests

抽出先:
/opt/python/requests

Node.js — uuid 依存関係をパッケージ化する場合:

my-layer-code.zip
└── nodejs
    ├── node_modules
    │   └── uuid
    ├── package-lock.json
    └── package.json

抽出先:
/opt/nodejs/node_modules/uuid

Java — commons-lang3 依存関係をパッケージ化する場合:

my-layer-code.zip
└── java
    └── lib
        └── commons-lang3-3.12.0.jar

抽出先:
/opt/java/lib/commons-lang3-3.12.0.jar

PHP — Composer 依存関係をパッケージ化する場合:

my-layer-code.zip
└── php
    ├── composer.json
    ├── composer.lock
    └── vendor

抽出先:
/opt/php/vendor

レイヤー ZIP ファイルのビルド

レイヤー ZIP ファイルのビルドは、コードパッケージのビルドと似ています。FC が実行時にレイヤーに含まれるライブラリを正しくロードするためには、ライブラリコードのディレクトリ構造が各言語の標準的なディレクトリ規約に従っている必要があります。詳細については、「各ランタイムでサポートされるディレクトリ」をご参照ください。指定どおりにレイヤーの依存関係をパッケージ化すると、FC は各言語の依存関係の検索パスを自動的に追加するため、フルパスを指定する必要はありません。

各ランタイム用のレイヤー ZIP ファイルをビルドするには、次の手順に従います。

説明
  • ローカルでレイヤーをビルドする際は、FC で選択したランタイムバージョンと同じプログラミング言語バージョンを使用してください。

  • my-layer-code 作業ディレクトリは一例です。必要に応じてディレクトリ名を変更できます。

Python ランタイム

説明

ローカルでレイヤーをビルドする際は、FC で選択した Python ランタイムバージョンと同じ Python バージョンを使用してください。

  1. 作業ディレクトリを作成します。

    mkdir my-layer-code
    cd my-layer-code
  2. 依存関係を python サブディレクトリにインストールします。

    pip install --target ./python ${PackageName}

    pip install コマンドの詳細については、「pip install」をご参照ください。

    numpy を使用した例:

    pip install --target ./python numpy

    インストール後、ディレクトリ構造は次のようになります。

    my-layer-code
    └── python
        ├── bin
        ├── numpy
        ├── numpy-1.22.4.dist-info
        └── numpy.libs
  3. my-layer-code ディレクトリで依存関係をパッケージ化します。

    zip -r my-layer-code.zip python

Node.js ランタイム

説明

ローカルでレイヤーをビルドする際は、FC で選択した Node.js ランタイムバージョンと同じ Node.js バージョンを使用してください。

  1. 作業ディレクトリを作成します。

    mkdir my-layer-code
    cd my-layer-code
  2. 依存関係を nodejs サブディレクトリにインストールします。

    npm install --prefix ./nodejs --save ${PackageName}

    ${PackageName} は、インストールする依存関係パッケージの名前です。npm install コマンドの詳細については、「npm-install」をご参照ください。

    uuid を使用した例:

    npm install --prefix ./nodejs --save uuid

    インストール後、ディレクトリ構造は次のようになります。

    my-layer-code
    └── nodejs
        ├── node_modules
        │   └── uuid
        ├── package-lock.json
        └── package.json
  3. my-layer-code ディレクトリで依存関係をパッケージ化します。

    zip -r my-layer-code.zip nodejs

Java ランタイム

  1. 作業ディレクトリを作成します。

    mkdir my-layer-code/java
    cd my-layer-code/java
  2. pom.xml ファイルを作成し、依存関係を宣言します。次の例では、commons-lang3 をインストールし、maven-dependency-plugin を使用して ./lib にコピーします。

    <?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>
        <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>
                <plugin>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <configuration>
                        <!-- 推移的な依存関係を含める -->
                        <excludeTransitive>false</excludeTransitive>
                        <!-- JAR ファイル名にバージョンのサフィックスを保持する -->
                        <stripVersion>false</stripVersion>
                        <!-- ダウンロードした JAR の出力ディレクトリ -->
                        <outputDirectory>./lib</outputDirectory>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
  3. 依存関係をインストールします。

    mvn dependency:copy-dependencies

    インストール後、ディレクトリ構造は次のようになります。

    my-layer-code
    └── java
        └── lib
            └── commons-lang3-3.12.0.jar
  4. my-layer-code ディレクトリで依存関係をパッケージ化します。

    zip -r my-layer-code.zip java

PHP ランタイム

  1. 作業ディレクトリを作成します。

    mkdir -p my-layer-code/php
    cd my-layer-code/php
  2. composer.json ファイルを作成し、依存関係を宣言します。例:

    {
      "require": {
        "aliyunfc/fc-php-sdk": "~1.2",
        "alibabacloud/fnf": "^1.7"
      }
    }
  3. 依存関係をインストールします。

    composer install

    インストール後、ディレクトリ構造は次のようになります。

    my-layer-code
    └── php
        ├── composer.json
        ├── composer.lock
        └── vendor
  4. my-layer-code ディレクトリで依存関係をパッケージ化します。

    zip -r my-layer-code.zip php

カスタムレイヤーの作成

コンソールの使用

前提条件

開始する前に、以下を確認してください。

  • FC 関数が作成されていること。詳細については、「関数の作成」をご参照ください。

操作手順

  1. Function Compute コンソールにログインします。左側のナビゲーションペインで、[高度な機能] > [レイヤー] をクリックします。

  2. 上部メニューで、リージョンを選択します。[レイヤー] ページで、[レイヤーの作成] をクリックします。

  3. 次のパラメーターを設定し、[作成] をクリックします。

    パラメーター 説明
    [名前] レイヤーの名前を入力します。
    説明 レイヤーを区別しやすくするために、レイヤーの説明を入力します。
    [互換ランタイム] このレイヤーと互換性のあるランタイムを選択します。
    [レイヤーのアップロード方法] レイヤーの依存関係をアップロードする方法を選択します。[ZIP パッケージでレイヤーをアップロード] — .zip ファイル (最大 500 MB) をアップロードします。[フォルダーでレイヤーをアップロード] — FC が .zip ファイル (最大 500 MB) に圧縮するフォルダーを選択します。[OSS を使用してレイヤーをアップロード] — Object Storage Service (OSS) 内の .zip ファイル (最大 500 MB) の [バケット名] と [オブジェクト名] を指定します。[依存関係レイヤーをオンラインでビルド] — 関数が Python または Node.js で開発されている場合、または軽量のシステムライブラリをインストールする必要がある場合は、レイヤーをオンラインでビルドできます。依存関係ファイル (Python の場合は requirements.txt、Node.js の場合は package.json) の内容を下の入力ボックスに入力します。リクエストを送信すると、FC は言語レベルの依存関係パッケージとシステムライブラリを自動的にインストールし、レイヤーの依存関係管理を簡素化します。
    [ビルド環境] [依存関係レイヤーをオンラインでビルド] が選択されている場合に表示されます。レイヤーをビルドするためのランタイムを選択します。現在、Python と Node.js ランタイムのみがサポートされています。
    [apt コマンド] [依存関係レイヤーをオンラインでビルド] が選択されている場合に表示されます。apt install の後にパッケージ名を入力して、システムパッケージをレイヤーにインストールします。

    レイヤーが作成されると、レイヤーバージョンが自動的に生成されます。バージョン番号は 1 から始まり、新しいバージョンごとにインクリメントされます。

    説明

    OSS バケットがキー管理サービス (KMS) によって暗号化されている場合、Function Compute のサービスにリンクされたロール (AliyunServiceRoleForFC) には暗号化されたオブジェクトにアクセスする権限がないことがあり、AccessDenied エラーが発生します。 これを解決するには、KMS コンソールでキーポリシーを更新して、AliyunServiceRoleForFC ロールにアクセス権を付与します。 詳細については、「キーポリシーの変更」をご参照ください。 キーポリシーを更新した後、レイヤーのアップロードを再試行して、権限の変更が有効になったことを確認します。

  4. 既存のレイヤーに新しいバージョンを追加するには:

    説明

    既存のレイヤーやそのバージョンを変更することはできません。レイヤーを更新するには、新しいレイヤーまたは新しいレイヤーバージョンを作成します。参照されているレイヤーバージョンが削除された場合は、レイヤー設定を更新する前に参照を削除してください。

    1. [レイヤー] ページで、対象のレイヤーの名前をクリックします。

    2. [バージョン管理] タブで、[バージョンの作成] をクリックします。

    3. ランタイムを選択し、新しいレイヤーコードをアップロードして、[作成] をクリックします。

Serverless Devs の使用

前提条件

開始する前に、以下を確認してください。

操作手順

  1. 次のコマンドを実行してレイヤーを作成します。

    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 レイヤーの名前。

    レイヤーが作成されると、コマンドはレイヤーの Alibaba Cloud リソース名 (ARN) を返します。 ARN は、番号記号 (#) で区切られた、アカウント ID の識別子、レイヤー名、レイヤーバージョンの 3 つの部分で構成されています。 また、Function Compute コンソールにログインして、作成されたレイヤーの情報を表示することもできます。

  2. 既存のレイヤーに新しいバージョンを追加するには、同じレイヤー名で同じコマンドを実行します。

    s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layer
    説明

    既存のレイヤーやそのバージョンを変更することはできません。レイヤーを更新するには、新しいレイヤーまたは新しいレイヤーバージョンを作成します。参照されているレイヤーバージョンが削除された場合は、レイヤー設定を更新する前に参照を削除してください。

レイヤーまたはレイヤーバージョンの削除

不要になったレイヤーやレイヤーバージョンは削除できます。削除されたレイヤーは、関数の設定で表示したり参照したりできなくなります。ただし、削除されたレイヤーを既に参照している関数の実行には影響しません。

  1. Function Compute コンソールにログインします。左側のナビゲーションペインで、[高度な機能] > [レイヤー] をクリックします。

  2. 上部メニューで、リージョンを選択します。

  3. [レイヤー] ページで、レイヤーまたはレイヤーバージョンを削除します。

    • レイヤーの削除:対象のレイヤーを見つけ、[操作] 列の [削除] をクリックし、確認用チェックボックスにチェックを入れ、[削除] をクリックします。

    • レイヤーバージョンの削除:対象のレイヤーの名前をクリックします。 レイヤー詳細ページの [バージョン管理] セクションで対象のバージョンを見つけ、[操作] 列の [削除] をクリックし、[確認] ダイアログボックスで [削除] をクリックします。

次のステップ

  • カスタムレイヤーを作成した後、Function Compute コンソールまたは Serverless Devs を使用して関数に設定し、関数がレイヤーによって提供されるリソースにアクセスできるようにします。詳細については、「カスタムレイヤーの設定」をご参照ください。

  • API の呼び出しや SDK を使用して関数を作成または更新する際に layers パラメーターを設定することで、レイヤーを管理および設定することもできます。詳細については、「CreateFunction」および「UpdateFunction」をご参照ください。

  • レイヤーの依存関係に共有ライブラリが含まれている場合、またはローカル環境が FC ランタイムと互換性がない場合は、コンソールまたはローカルでレイヤーをビルドすることはできません。代わりに Dockerfile からレイヤーをビルドします。詳細については、「Dockerfile を使用したレイヤーのビルド」をご参照ください。