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

Function Compute:カスタムレイヤーを作成する

最終更新日:Sep 30, 2024

レイヤーは、一般的な依存関係、ランタイム、関数拡張などのリソースをパブリッシュおよびデプロイする機能を提供します。 関数が依存するパブリックライブラリをレイヤーに抽象化するか、Function Computeのパブリックレイヤーを使用して、関数のデプロイまたは更新時にコードパッケージのサイズを縮小できます。 このトピックでは、さまざまなランタイムのレイヤー、レイヤーの機能、レイヤーZIPファイルの作成方法、およびカスタムレイヤーの作成方法と削除方法について説明します。

制御ポリシー機能の動作

  • レイヤーをビルドするときは、レイヤーのコンテンツをZIPファイルにパッケージ化する必要があります。 Function ComputeランタイムはZIPファイルを解凍し、レイヤーのコンテンツを /optディレクトリにデプロイします。

  • 関数に対して複数のレイヤーが設定されている場合、これらのレイヤーのコンテンツはマージされ、/optディレクトリに逆の順序で格納されます。 2つのレイヤーに同じ名前のファイルがある場合、最初に構成されたレイヤーのファイルは、後で構成されたレイヤーのファイルを上書きします。

    たとえば、関数にレイヤー1とレイヤー2を設定した場合、関数インスタンスの起動時にレイヤー2がレイヤー1の前に読み込まれます。 レイヤーのコンテンツは、/optディレクトリに解凍されます。 /optディレクトリでは、レイヤー1のコンテンツがレイヤー2のコンテンツの前に配置されます。 同じ名前のファイルが2つのレイヤーに存在する場合、レイヤー1のファイルはレイヤー2のファイルを上書きします。

  • レイヤー内のコードがバイナリライブラリまたは実行可能ファイルに依存している場合は、Linuxシステムを使用してレイヤーをコンパイルおよびビルドする必要があります。 Debian 9が推奨されます。

  • Function Computeのランタイムはx86_64アーキテクチャに基づいています。 レイヤー内の依存関係ライブラリに特定の命令セット要件がある場合は、x86_64マシンを使用するか、またはクロスコンパイルを実行して、依存関係ライブラリがFunction Computeランタイムと互換性があることを確認する必要があります。

異なるランタイムでのレイヤーの使用状況ノート

ランタイムがレイヤーをサポートしている場合、Function Computeは依存関係パッケージの検索パスに特定のディレクトリを追加します。 各プログラミング言語のディレクトリを次の表に示します。 関数コードがパスを指定せずにレイヤーにアクセスできるように、テーブルにリストされているディレクトリと同じフォルダー構造をレイヤーZIPファイルに定義することをお勧めします。 レイヤーZIPファイルの作成方法の詳細については、「レイヤー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ファイルのファイル構造

各ランタイムでアップロードされたZIPファイルのファイル構造と、解凍およびデプロイ後のパスについて説明します。

File structure after the requests dependency is used for packaging
my-layer-code.zip
└── python
    └── requests

Path after the .zip file 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 file 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 file 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ランタイムはZIPファイルを解凍し、レイヤーのコンテンツを /optディレクトリにデプロイします。

レイヤーZIPファイルを作成する方法は、コードパッケージを作成する方法と似ています。 関数がレイヤーによって公開されたライブラリをロードして使用できるようにするには、ライブラリのコードディレクトリ構造が各言語のディレクトリ要件に準拠している必要があります。 詳細については、「異なるランタイムのレイヤーの使用状況に関する注意事項」をご参照ください。 レイヤー内の関数依存関係ライブラリの場合、Function Computeランタイムは異なるプログラミング言語の関数ライブラリの検索パスを自動的に追加するため、標準のパッケージルールに従ってライブラリをパッケージ化する場合、完全なパスを指定する必要はありません。 レイヤーのカスタムディレクトリ構造を指定する場合は、依存関係ライブラリの検索パスをコードに明示的に追加する必要があります。 詳細については、「カスタムランタイムでレイヤーの依存関係を参照するにはどうすればよいですか? 」をご参照ください。

次のセクションでは、をビルドする手順について説明します。異なるランタイムのzipレイヤー。

説明
  • オンプレミスのマシンでレイヤーをビルドする場合、使用するプログラミング言語は、Function Computeの目的のランタイムと同じである必要があります。

  • 次のセクションでは、作業ディレクトリmy-layer-codeを例として使用します。 実際のビジネスシナリオでは、ディレクトリを実際のディレクトリに置き換えます。

Pythonランタイム

説明

オンプレミスのマシンでレイヤーを構築する場合、使用するPythonのバージョンは、Function Computeで使用するPythonランタイムのバージョンと同じである必要があります。

  1. 次のコマンドを実行して、作業ディレクトリを作成します。

    mkdir my-layer-code
  2. 作業ディレクトリに移動します。

    cd my-layer-code
  3. 次のコマンドを実行して、依存関係ライブラリを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
  4. my-layer-codeディレクトリで次のコマンドを実行して、依存関係をパッケージ化します。

    zip -r my-layer-code.zip python

Node.jsランタイム

説明

オンプレミスマシンでレイヤーを構築する場合、使用するNode.jsのバージョンは、Function Computeで使用するNode.jsランタイムのバージョンと同じである必要があります。

  1. 次のコマンドを実行して、作業ディレクトリを作成します。

    mkdir my-layer-code
  2. 作業ディレクトリに移動します。

    cd my-layer-code
  3. 次のコマンドを実行して、依存関係ライブラリを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
  4. my-layer-codeで次のコマンドを実行して、依存関係をパッケージ化します。

    zip -r my-layer-code.zip nodejs

Javaランタイム

  1. 次のコマンドを実行して、作業ディレクトリを作成します。

    mkdir my-layer-code/java
  2. 作業ディレクトリに移動します。

    cd my-layer-code/java
  3. Mavenを使用して依存関係をインストールします。

    1. 作成します。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>
          <!-- Maven dependency that you want 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>
                          <!-- File output path-->
                          <outputDirectory>./lib</outputDirectory>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
      </project>

      説明

      • インストールする依存関係ファイルは、org.apache.com mons.lang3です。

      • maven-dependency-pluginを使用して、依存ファイルを /java/libディレクトリにコピーします。

    2. my-layer-code/javaディレクトリで次のコマンドを実行し、依存関係をインストールします。

      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
  2. 作業ディレクトリに移動します。

    cd my-layer-code/php
  3. Composerを使用して依存関係をインストールします。

    1. では、my-layer-code/phpディレクトリを作成し、composer.jsonファイルを作成します。

      サンプルコード:

      {
        "require": {
          "aliyunfc/fc-php-sdk": "~1.2",
          "alibabacloud/fnf": "^1.7"
        }
      }
    2. 次のコマンドを実行して依存関係をインストールします。

      composer install

    インストール後、ディレクトリが次の構造に準拠しているかどうかを確認します。

    my-layer-code
     └─php
       ├──composer.json
       ├──composer.lock
       └──vendor
  4. my-layer-codeディレクトリで次のコマンドを実行して、依存関係をパッケージ化します。

    zip -r my-layer-code.zip php

カスタムレイヤーの作成

Function Computeコンソールでカスタムレイヤーを作成する

前提条件

関数が作成されます。 詳細については、「関数の作成」をご参照ください。

手順

  1. Function Computeコンソールにログインします。 左側のナビゲーションウィンドウで、[詳細機能] > [レイヤー] を選択します。

  2. 上部のナビゲーションバーで、リージョンを選択します。 [レイヤー] ページで、[レイヤーの作成] をクリックします。

  3. [レイヤーの作成] ページで、パラメーターを設定し、[作成] をクリックします。 下表にパラメーターを示します。

    パラメーター

    説明

    名前

    作成するレイヤーの名前を入力します。

    説明

    レイヤーを他のレイヤーと区別する説明を入力します。

    互換性のあるランタイム

    互換性のあるランタイムを指定します。

    レイヤーのアップロード方法

    レイヤーの依存関係をアップロードする方法を選択します。 次のいずれかの方法を使用して、レイヤーの依存関係をアップロードできます。

    • ZIPパッケージでレイヤーをアップロード

      レイヤーのZIPファイルを選択してアップロードします。 アップロードするZIPファイルは500 MBを超えることはできません。

    • フォルダーにレイヤーをアップロード

      レイヤーのZIPファイルを含むフォルダーを選択してアップロードします。 フォルダーのサイズは、圧縮後に500 MBを超えることはできません。

    • OSSを使用したレイヤーのアップロード

      [バケット名][オブジェクト名] を指定して、Object Storage Service (OSS) からレイヤーZIPファイルをアップロードします。 OSSで選択したオブジェクトのサイズは500 MBを超えることはできません。

    • 依存層をオンラインで構築する

      アプリケーションがPythonまたはNode.jsに基づいて開発されている場合、または軽量のシステムライブラリをインストールする必要がある場合は、[依存関係レイヤーのオンライン構築] を選択し、依存関係ファイルの内容package.jsonまたはrequirements.txtを以下のエディターに入力します。 設定が送信されると、これらの言語レベルの依存関係パッケージとシステムライブラリが自動的にインストールされ、レイヤーの依存関係管理が簡素化されます。

    ビルド環境

    [依存層オンラインのビルド] を選択した場合、依存層をビルドするランタイムを指定する必要があります。

    説明

    PythonとNode.jsのランタイムのみが、依存関係レイヤーのオンライン構築をサポートします。

    aptコマンド

    [Dependency Layer Onlineの構築] を選択し、そのレイヤーにソフトウェアパッケージをインストールする必要がある場合は、[apt install] 入力ボックスに依存関係の名前を直接入力できます。

    レイヤーが作成された後、システムは昇順で1から始まるレイヤーバージョンを生成します。

  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 Resource Name (ARN) が返されます。 ARNは、# で区切られた3つの部分を含む。 最初の部分はアカウントIDの識別子であり、2番目の部分はレイヤーの名前であり、3番目の部分はレイヤーのバージョンです。 以下の図は一例です。 Function Computeコンソールにログインして、作成したレイヤーに関する情報を表示できます。dg-createlayer-success

  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. [レイヤー] ページで、ビジネス要件に基づいてレイヤーまたはそのバージョンを削除します。

    • レイヤーの削除

      削除するレイヤーを見つけて、[操作] 列の [削除] をクリックします。 表示されるダイアログボックスで、[レイヤーのNバージョンをすべて削除する] を選択し、[削除] をクリックします。

    • レイヤーバージョンの削除

      バージョンを削除するレイヤーの名前をクリックします。 レイヤーの詳細ページの [バージョン] セクションで、削除するレイヤーバージョンを見つけ、[操作] 列の [削除] をクリックします。 表示される [確認] メッセージで、[削除] をクリックします。

関連ドキュメント

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

  • インストールするレイヤーの依存関係にダイナミックリンクライブラリが含まれている場合、またはオンプレミス環境がFunction Computeランタイムと互換性がない場合は、Function Computeコンソールまたはオンプレミスマシンでレイヤーを構築できません。 Dockerfileのみに基づいてレイヤーを構築できます。 詳細については、「Dockerfileを使用したレイヤーの構築」をご参照ください。

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