全部產品
Search
文件中心

Function Compute:建立自訂層

更新時間:Sep 10, 2026

層可以為您提供公用依賴庫、運行時環境及函數擴充等發布與部署能力。您可以將函數依賴的公用庫提煉到層或者使用Function Compute官方公用層,以減少部署或更新函數時的程式碼封裝體積。本文介紹層的功能原理、各運行時使用層說明、如何構建層的ZIP包以及如何建立、刪除自訂層。

功能原理

  • 構建層時,需要將所有內容打包到ZIP檔案中。Function Compute運行時會將層的內容解壓並部署在/opt目錄下。

  • 當函數配置多個層時,這些層的內容將被合并至/opt目錄,多個層按照層配置的逆序合并。如果某一檔案與其他層中的檔案同名,則先配置層中的該檔案會覆蓋後配置層中的該同名檔案。

    例如,為某函數配置了第1層和第2層,函數執行個體啟動時,會先載入第2層,後載入第1層,並將其解壓至/opt目錄。在/opt目錄中,第1層的內容在前,第2層的內容在後,如果第1層和第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 (PATH)
/opt/lib (LD_LIBRARY_PATH)
自訂運行時和自訂鏡像無

各運行時的層ZIP包檔案結構

關於各運行時打包上傳的檔案結構與解壓部署後的路徑的對應關係,分別舉例說明如下。

Python

使用requests依賴打包後的檔案結構 my-layer-code.zip └── python └── requests ZIP包解壓部署後的路徑 / └── opt └── python └── requests

Node.js

使用uuid依賴打包後的檔案結構 my-layer-code.zip └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json ZIP包解壓部署後的路徑 / └── opt └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json

Java

使用jackson-core依賴打包後的檔案結構 my-layer-code.zip └── java └── lib └── commons-lang3-3.12.0.jar ZIP包解壓部署後的路徑 / └── opt └── java └── lib └── commons-lang3-3.12.0.jar

PHP

使用composer依賴打包後的檔案結構 my-layer-code.zip └── php ├──composer.json ├──composer.lock └──vendor ZIP包解壓部署後的路徑 / └── opt └── php ├──composer.json ├──composer.lock └──vendor

構建層的ZIP包

建立層時,需要將所有內容打包到ZIP檔案中。Function Compute運行時會將層的內容解壓並部署在/opt目錄下。

構建層的ZIP包的方式和構建程式碼封裝的方式類似,為使函數在運行時能正確載入使用層發布的庫,庫的代碼目錄結構需遵從各個語言標準的目錄規範,具體資訊,請參見各運行時使用層說明。對於部署於層的函數依賴庫,如果按照規範的方式打包,Function Compute運行時會為您自動添加各語言的依賴庫搜尋路徑,您無需指定全路徑。如您想自訂層的目錄結構,需要在代碼中顯式添加依賴庫搜尋地址。具體操作,請參見如何在自訂運行時中引用層中的依賴。

各運行時構建層ZIP包的操作步驟如下所示:

說明
  • 在本地構建層時,使用的程式設計語言版本需要和在Function Compute選擇的運行時的程式設計語言版本保持一致。

  • 下面建立的工作目錄my-layer-code僅為樣本,您在實際操作過程中可以按需替換目錄名稱。

Python Runtime

說明

在本地構建層時,使用的Python版本需要和在Function Compute選擇的Python運行時版本保持一致。

  1. 執行以下命令建立工作目錄。

    mkdir my-layer-code
  2. 進入已建立的工作目錄。

    cd my-layer-code
  3. 執行以下命令安裝依賴庫到my-layer-code/python。

    pip install --target ./python ${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 Runtime

說明

在本地構建層時,使用的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 Runtime

  1. 執行以下命令建立工作目錄。

    mkdir my-layer-code/java
  2. 進入已建立的工作目錄。

    cd my-layer-code/java
  3. 通過Maven安裝依賴。

    1. 在my-layer-code/java目錄下建立一個pom.xml檔案。

      樣本如下:

      <?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依賴 --> <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相關下載外掛程式 --> <plugin> <artifactId>maven-dependency-plugin</artifactId> <configuration> <!-- 是否排除間接依賴。預設false,不排除 --> <excludeTransitive>false</excludeTransitive> <!-- 是否消除依賴jar包尾碼的版本資訊。預設是false,不取消版本資訊 --> <stripVersion>false</stripVersion> <!-- 輸出檔案路徑 --> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project>

      • 要安裝的依賴包為org.apache.commons.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 Runtime

  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

建立自訂層

通過控制台建立自訂層

前提條件

已完成函數的建立,具體操作請參見建立函數。

操作步驟

  1. 登入Function Compute控制台,在左側導覽列,選擇函數管理>層管理。

  2. 在頂部功能表列,選擇地區,然後在層管理頁面,單擊建立層。

  3. 在建立層頁面,設定相關參數,然後單擊建立。

    參數描述
    名稱設定層的名稱,支援自訂。
    描述設定層的描述資訊,便於區分各層。
    相容運行時選擇與該層相容的運行時環境。
    層上傳方式按需選擇上傳層依賴的方式。包含以下幾種上傳方式:
    - 通過 ZIP 包上傳層
    選擇或直接上傳已構建的層的ZIP檔案。上傳的ZIP檔案不能超過500 MB。
    - 通過檔案夾上傳層
    選擇或上傳已構建層的ZIP檔案所在的檔案夾。上傳的檔案夾壓縮後不能超過500 MB。
    - 通過 OSS 上傳層
    選擇上傳構建層的ZIP檔案的Bucket 名稱和檔案名稱。選擇的OSS中的檔案不能超過500 MB。

    說明
    如果 OSS 中的檔案開啟了 KMS 加密,Function Compute預設服務角色(AliyunServiceRoleForFC)可能沒有該 KMS 密鑰的存取權限,導致上傳層時出現無許可權訪問 OSS 檔案的報錯,如下圖所示。
    要解決此問題,請在 KMS 控制台中為該 KMS 密鑰調整密鑰策略,授予 AliyunServiceRoleForFC 服務角色的存取權限。具體操作,請參見修改密鑰策略。
    配置完成後,重新嘗試上傳層檔案以確認許可權已生效。
    -



    線上構建依賴層**
    如果您的函數應用是基於Python和Node.js語言開發,或需要安裝部分輕量級系統庫,可以選擇線上構建依賴層,並在下方輸入框輸入構建層的依賴檔案package.json或requirements.txt的內容,提交建立層後系統會自動安裝這些語言層級的依賴包和系統庫,簡化層依賴管理過程。







    構建環境當您選擇線上構建依賴層時,需設定此參數選擇構建依賴層所使用的運行環境。

    說明**
    目前僅Python和Node.js運行時支援線上構建依賴層。

    apt 命令當您選擇線上構建依賴層,且需要安裝部分軟體包到層中,可以在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:用於指定建立層的名稱。

    建立完成後提示成功並返回層的ARN,ARN通過#號分為三個部分,第一部分為帳號ID的標識符,第二部分為層的名稱,第三部分為層的版本,如下圖所示。您也可以登入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. 在層管理頁面,按需選擇刪除層或層版本。

    • 刪除層

      單擊目標層操作列的刪除,在彈出的對話方塊中選中確認刪除層中的複選框,然後單擊刪除。

    • 刪除層版本

      單擊目標層名稱,在層詳情頁面的版本管理地區,單擊目標層版本操作列的刪除,在彈出的確認對話方塊中單擊刪除。

相關文檔

  • 您還可以在通過OpenAPI/SDK建立函數或更新函數時,配置參數layers來管理層和配置層。更多資訊,請參見建立函數和更新函數。

  • 如果要安裝的層依賴中包含動態連結程式庫,或者本地環境與Function Compute的運行時環境不相容時,不支援通過控制台或本地構建的方式構建層,只能基於Dockerfile構建層。具體操作,請參見如何基於Dockerfile構建層。

  • 自訂層建立完成後,您可以通過Function Compute控制台或Serverless Devs將其綁定到函數,以便函數訪問層中提供的資源。具體操作,請參見配置自訂層。