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

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

最終更新日:Sep 04, 2024

レイヤーを使用すると、一般的な依存関係、ランタイム、関数拡張などのカスタムリソースをパブリッシュおよびデプロイできます。 関数が依存するパブリックライブラリをレイヤーに抽象化するか、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ランタイムのバージョンと同じである必要があります。

  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>
          <!-- 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ディレクトリにコピーします。

    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. レイヤーのZIPパッケージを作成する方法の詳細については、「レイヤーのZIPパッケージを作成する」をご参照ください。

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

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

  4. レイヤーの作成ページで、関連パラメーターを指定し、作成 をクリックします。

    パラメーター

    説明

    名前

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

    説明

    レイヤーの説明を入力します。 レイヤ記述は、レイヤを区別するために使用され得る。

    互換性のあるランタイム

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

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

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

    • ZIPパッケージでレイヤーをアップロード: レイヤーのZIPファイルを選択します。

    • フォルダーにレイヤーをアップロード: レイヤーのZIPファイルがあるフォルダーを選択します。

    • OSSを使用したレイヤーのアップロード: [バケット名][オブジェクト名] パラメーターを指定して、レイヤーのZIPファイルを選択します。

    • [オンラインでの依存関係レイヤーの構築]: [ビルド環境] を指定し、レイヤーの依存関係ファイルpackage.jsonまたはrequirements.txtをアップロードします。

      説明

      PythonとNode.jsのランタイムのみが、依存関係レイヤーのオンライン構築をサポートします。 依存関係パッケージのアップロード時間は15分、依存関係パッケージのサイズは500 MBです。

    レイヤーが作成されると、システムはレイヤーバージョンを生成します。 バージョン番号は1から始まります。

  5. 新しいバージョンを作成します。

    説明

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

    1. レイヤーページで、管理するレイヤーを見つけて、レイヤーの名前をクリックするか、バージョンで、アクション列を作成します。

    2. では、バージョン表示されるページのセクションをクリックします。バージョンの作成 をクリックします。

    3. レイヤーバージョンを作成するページで、ランタイムを選択し、新しいレイヤーコードをアップロードして、作成 をクリックします。

Serverless Devsを使用してカスタムレイヤーを作成する

前提条件

手順

  1. レイヤーのZIPパッケージを作成する方法の詳細については、「レイヤーのZIPパッケージを作成する」をご参照ください。

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

    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コンソールにログインして、作成したレイヤーに関する情報を表示できます。dg-createlayer-success

  3. 次のコマンドを繰り返して、作成したレイヤーの新しいバージョンを作成します。

    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. 上部のナビゲーションバーで、リージョンを選択します。

  4. レイヤーページで、ビジネス要件に基づいてレイヤーまたはレイヤーバージョンを削除します。

    • レイヤーの削除

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

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

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

関連ドキュメント