As camadas empacotam dependências compartilhadas, runtimes e extensões de função para reutilização em várias funções. Extraia bibliotecas comuns para camadas ou use as camadas comuns do Function Compute para reduzir o tamanho do pacote de código.
Observações de uso
Empacote todo o conteúdo da camada em um arquivo ZIP. Os runtimes do Function Compute extraem as camadas para o diretório /opt.
Quando uma função possui múltiplas camadas, os conteúdos são mesclados no diretório /opt em ordem inversa. Arquivos em camadas superiores sobrescrevem arquivos com o mesmo nome em camadas inferiores.
Se a camada incluir bibliotecas binárias ou executáveis, compile-os em um sistema Linux. Recomenda-se o Debian 9.
Caso uma dependência da camada exija conjuntos de instruções específicos, utilize uma máquina AMD64 ou faça a compilação cruzada para garantir compatibilidade com os runtimes do Function Compute.
Diretórios de camada por runtime
Para runtimes que suportam camadas, o Function Compute adiciona diretórios específicos do runtime ao caminho de busca de dependências. Se o ZIP da sua camada seguir a estrutura de pastas abaixo, o código da função carrega as dependências da camada sem precisar especificar o caminho completo.
Directories that can be added in each runtime
|
Runtime |
Diretório |
|
Python |
/opt/python |
|
Node.js |
/opt/nodejs/node_modules |
|
Java |
/opt/java/lib |
|
PHP |
/opt/php |
|
Outros runtimes (exceto runtimes personalizados e runtimes Custom Container) |
/opt/bin (PATH) |
|
/opt/lib (LD_LIBRARY_PATH) |
File structures of the ZIP packages in each runtime
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
Criar um pacote ZIP para uma camada
Empacote o conteúdo da camada em um arquivo ZIP. Os runtimes do Function Compute o extraem para o diretório /opt.
A criação de um ZIP de camada segue a mesma abordagem da criação de um pacote de código. Os diretórios de biblioteca da camada devem obedecer às regras padrão de empacotamento de cada linguagem. Para mais informações, consulte Diretórios de camada por runtime. Ao seguir essas regras, os runtimes do Function Compute adicionam automaticamente os caminhos de busca de bibliotecas. Para personalizar a estrutura de diretórios da camada, adicione explicitamente os caminhos de busca de dependências no seu código. Para mais informações, consulte Como referenciar dependências de uma camada em um Custom Runtime
As abas a seguir mostram como criar o pacote ZIP da camada para cada runtime.
A linguagem de programação na sua máquina local deve corresponder ao runtime do Function Compute.
O diretório my-layer-code é apenas um exemplo. Substitua-o pelo seu diretório real.
Runtimes Python runtime
A versão do Python na sua máquina local deve corresponder à versão do runtime do Function Compute.
-
Crie um diretório de trabalho:
mkdir my-layer-code -
Acesse o diretório de trabalho.
cd my-layer-code -
Instale a biblioteca de dependências em my-layer-code/python:
pip install --target ./python ${PackageName}Substitua ${PackageName} pelo nome da biblioteca de dependências. As opções do comando
pip installestão documentadas na referência pip install.Código de exemplo:
pip install --target ./python numpyVerifique a estrutura de diretórios resultante:
my-layer-code └── python ├── bin ├── numpy ├── numpy-1.22.4.dist-info └── numpy.libs -
Empacote as dependências a partir do diretório my-layer-code:
zip -r my-layer-code.zip python
Runtimes Node.js runtime
A versão do Node.js na sua máquina local deve corresponder à versão do runtime do Function Compute.
-
Crie um diretório de trabalho:
mkdir my-layer-code -
Acesse o diretório de trabalho.
cd my-layer-code -
Instale a biblioteca de dependências em my-layer-code/nodejs:
npm install --prefix ./nodejs --save ${PackageName}Substitua
${PackageName}pelo nome da biblioteca de dependências. As opções do comandonpm installestão documentadas na referência npm-install.Código de exemplo:
npm install --prefix ./nodejs --save uuidVerifique a estrutura de diretórios resultante:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json -
Empacote a dependência a partir de my-layer-code:
zip -r my-layer-code.zip nodejs
Runtimes Java runtime
-
Crie um diretório de trabalho:
mkdir my-layer-code/java -
Acesse o diretório de trabalho.
cd my-layer-code/java -
Instale as dependências usando o Maven.
-
Crie o arquivo pom.xml no diretório my-layer-code/java.
Exemplo:
<?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>Descrição
O pacote de dependência a ser instalado é
org.apache.commons.lang3.Utilize o
maven-dependency-pluginpara copiar o pacote de dependências para o diretório /java/lib.
-
Instale as dependências no diretório my-layer-code/java:
mvn dependency:copy-dependencies
Verifique a estrutura de diretórios resultante:
my-layer-code └── java └── lib └── commons-lang3-3.12.0.jar -
-
Empacote as dependências a partir do diretório my-layer-code:
zip -r my-layer-code.zip java
Runtimes PHP runtime
-
Crie um diretório de trabalho:
mkdir -p my-layer-code/php -
Acesse o diretório de trabalho.
cd my-layer-code/php -
(Recomendado) Use o Composer para instalar as dependências.
-
Crie o arquivo composer.json no diretório my-layer-code/php.
Exemplo:
{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } } -
Instale as dependências.
composer install
Verifique a estrutura de diretórios resultante:
my-layer-code └─php ├──composer.json ├──composer.lock └──vendor -
-
Empacote as dependências a partir do diretório my-layer-code:
zip -r my-layer-code.zip php
Criar uma camada personalizada
Criar uma camada personalizada no console do Function Compute
Pré-requisitos
Uma função já criada. Para mais informações, consulte Criar uma função.
Procedimento
Para mais informações sobre como criar um pacote ZIP de camada, consulte Criar um pacote ZIP para uma camada.
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região. Na página Layers, clique em Create Layer.
-
Na página Create Layer, especifique os parâmetros relevantes e clique em Create.
Parâmetro
Descrição
Name
Insira um nome para a camada que deseja criar.
Description
Insira uma descrição para identificar a camada.
Compatible Runtime
Selecione os runtimes compatíveis.
Layer Upload Method
Escolha um método de upload:
-
Upload Layer in ZIP Package: Selecione o arquivo ZIP da camada.
-
Upload Layer in Folder: Selecione a pasta que contém o arquivo ZIP da camada.
-
Upload Layer Using OSS: Especifique o Bucket Name e o Object Name do arquivo ZIP da camada no OSS.
-
Build Dependency Layer Online: Selecione um Build Environment e envie o
package.jsonourequirements.txt.NotaApenas os runtimes Python e Node.js suportam builds online. Limite de upload: 500 MB, tempo limite de 15 minutos.
O sistema gera a versão 1 da camada após a criação.
-
-
Crie uma nova versão.
NotaNão é possível modificar uma camada criada ou as versões de uma camada existente. Para atualizar as configurações de uma camada, crie uma nova camada ou uma nova versão. Se uma versão de camada referenciada for excluída, remova a referência antes de atualizar as configurações da camada.
Na página Layers, clique em no nome da camada ou clique em Versions na coluna Actions.
Na seção Versions, clique em Create Version.
Selecione um runtime, envie o novo código da camada e clique em Create.
Criar uma camada personalizada usando o Serverless Devs
Pré-requisitos
Procedimento
Para mais informações sobre como criar um pacote ZIP de camada, consulte Criar um pacote ZIP para uma camada.
-
Crie uma camada:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,Java11,custom --region cn-hangzhou --layer-name my-layerDescrição:
--code: o caminho do pacote de código.--compatible-runtime: runtimes compatíveis para a camada.--layer-name: o nome da camada.
Uma mensagem de sucesso retorna o ARN da camada, composto por três partes separadas por
#: ID da conta, nome da camada e versão da camada. Faça login no console do Function Compute para visualizar os detalhes da camada.
-
Crie uma nova versão para a camada:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerNotaNão é possível modificar uma camada criada ou as versões de uma camada existente. Para atualizar as configurações de uma camada, crie uma nova camada ou uma nova versão. Se uma versão de camada referenciada for excluída, remova a referência antes de atualizar as configurações da camada.
Excluir camadas e versões de camada
Exclua camadas ou versões de camada não utilizadas. Camadas excluídas não podem ser visualizadas ou referenciadas nas configurações de funções, mas as funções que já as referenciam continuam em execução.
Faça login no console do Function Compute.
No painel de navegação à esquerda, escolha .
Na barra de navegação superior, selecione uma região.
-
Na página Layers, exclua uma camada ou uma versão de camada conforme suas necessidades de negócio.
-
Excluir uma camada
Localize a camada e clique em Delete na coluna Actions. Marque a opção I want to delete all of the N versions at the layer e clique em Delete.
-
Excluir uma versão de camada
Clique em no nome da camada. Na seção Versions, localize a versão e clique em Delete na coluna Actions. Na mensagem Confirm, clique em Delete.
-
Referências
Utilize o parâmetro
layerspara configurar camadas ao criar ou atualizar funções. Para mais informações, consulte CreateFunction e UpdateFunction.Para mais informações sobre como usar uma camada personalizada em uma função, consulte Gerenciar camadas e Configurar uma camada pública para uma função.