As camadas fornecem bibliotecas de dependências compartilhadas, ambientes de execução e extensões para suas funções. Extraia as bibliotecas comuns das quais suas funções dependem para uma camada ou use camadas públicas do Function Compute para reduzir o tamanho do pacote de código durante a implantação ou atualização de uma função. Este tópico descreve o funcionamento das camadas, os diretórios compatíveis com cada runtime, como criar um arquivo ZIP de camada e como criar e excluir uma camada personalizada.
Como funciona
Ao criar uma camada, empacote todo o conteúdo em um arquivo ZIP. Durante a execução, o Function Compute extrai o conteúdo da camada e o implanta no diretório /opt. Ao configurar várias camadas para uma função, o sistema mescla o conteúdo em /opt na ordem inversa à configuração. Se um arquivo em uma camada tiver o mesmo nome que um arquivo em outra, o arquivo da camada configurada primeiro sobrescreverá o da camada configurada posteriormente.
Por exemplo, se você configurar a Camada 1 e a Camada 2 para uma função, a instância da função carregará primeiro a Camada 2 e depois a Camada 1 ao iniciar, e extrairá ambas para o diretório /opt. Em /opt, o conteúdo da Camada 1 vem primeiro e o da Camada 2 vem em seguida. Caso a Camada 1 e a Camada 2 contenham arquivos com o mesmo nome, os arquivos da Camada 1 substituirão os da Camada 2.
Requisitos de compilação:
Se uma camada contiver bibliotecas binárias ou executáveis, compile-a em Linux (recomenda-se Debian 9).
O Function Compute opera em x86_64. Para dependências vinculadas ao conjunto de instruções, use uma máquina x86_64 ou faça a compilação cruzada para garantir a compatibilidade.
Diretórios compatíveis por runtime
Caso um runtime seja compatível com camadas, o Function Compute adiciona os seguintes diretórios ao caminho de busca de dependências da linguagem do runtime. Estruture seu pacote ZIP de camada para corresponder a esses caminhos, permitindo que o código da sua função acesse o conteúdo da camada sem especificar caminhos explícitos. Para obter detalhes sobre como criar um arquivo ZIP de camada, consulte Build a layer ZIP file.
|
Runtime |
Caminho do diretório |
|
Python |
|
|
Node.js |
|
|
Java |
|
|
PHP |
|
|
Outros runtimes (excluindo custom runtime e custom container runtime) |
|
|
Custom runtime e custom container runtime |
Nenhum |
Se preferir usar uma estrutura de diretórios personalizada, adicione explicitamente o caminho de busca de dependências no código da sua função. Para mais informações, consulte How do I reference dependencies in a layer in a custom runtime.
Estrutura do arquivo ZIP da camada
Os exemplos a seguir mostram a estrutura necessária do arquivo ZIP e os caminhos de implantação correspondentes para cada runtime.
Python — empacotamento com a dependência requests:
my-layer-code.zip
└── python
└── requests
Extracted to:
/opt/python/requests
Node.js — empacotamento com a dependência uuid:
my-layer-code.zip
└── nodejs
├── node_modules
│ └── uuid
├── package-lock.json
└── package.json
Extracted to:
/opt/nodejs/node_modules/uuid
Java — empacotamento com a dependência commons-lang3:
my-layer-code.zip
└── java
└── lib
└── commons-lang3-3.12.0.jar
Extracted to:
/opt/java/lib/commons-lang3-3.12.0.jar
PHP — empacotamento com dependências do Composer:
my-layer-code.zip
└── php
├── composer.json
├── composer.lock
└── vendor
Extracted to:
/opt/php/vendor
Criar um arquivo ZIP de camada
A criação de um arquivo ZIP de camada é semelhante à criação de um pacote de código. Para que o Function Compute carregue corretamente as bibliotecas publicadas em uma camada durante a execução, a estrutura de diretórios do código da biblioteca deve seguir as convenções padrão de cada linguagem. Para obter detalhes, consulte Supported directories by runtime. Se você empacotar as dependências da camada conforme especificado, o Function Compute adicionará automaticamente o caminho de busca de dependências para cada linguagem, eliminando a necessidade de especificar o caminho completo.
Para criar um arquivo ZIP de camada para cada runtime, execute as etapas a seguir:
Ao compilar uma camada localmente, utilize a mesma versão da linguagem de programação que a versão do runtime selecionada no Function Compute.
O diretório de trabalho
my-layer-codecriado nas etapas seguintes é apenas um exemplo. Substitua o nome do diretório conforme necessário.
Runtime Python
Ao compilar uma camada localmente, utilize a mesma versão do Python que a versão do runtime Python selecionada no Function Compute.
-
Crie um diretório de trabalho:
mkdir my-layer-code cd my-layer-code -
Instale as dependências no subdiretório
python:pip install --target ./python ${PackageName}Para obter detalhes sobre o comando
pip install, consulte pip install.Exemplo com
numpy:pip install --target ./python numpyApós a instalação, a estrutura de diretórios ficará assim:
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
Runtime Node.js
Ao compilar uma camada localmente, utilize a mesma versão do Node.js que a versão do runtime Node.js selecionada no Function Compute.
-
Crie um diretório de trabalho:
mkdir my-layer-code cd my-layer-code -
Instale as dependências no subdiretório
nodejs:npm install --prefix ./nodejs --save ${PackageName}${PackageName}é o nome do pacote de dependência que você deseja instalar. Para obter detalhes sobre o comandonpm install, consulte npm-install.Exemplo com
uuid:npm install --prefix ./nodejs --save uuidApós a instalação, a estrutura de diretórios ficará assim:
my-layer-code └── nodejs ├── node_modules │ └── uuid ├── package-lock.json └── package.json -
Empacote as dependências a partir do diretório
my-layer-code:zip -r my-layer-code.zip nodejs
Runtime Java
-
Crie um diretório de trabalho:
mkdir my-layer-code/java cd my-layer-code/java -
Crie um arquivo
pom.xmlque declare suas dependências. O exemplo a seguir instala ocommons-lang3e o copia para./libusando omaven-dependency-plugin:<?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> <!-- Include transitive dependencies --> <excludeTransitive>false</excludeTransitive> <!-- Keep version suffixes in JAR file names --> <stripVersion>false</stripVersion> <!-- Output directory for downloaded JARs --> <outputDirectory>./lib</outputDirectory> </configuration> </plugin> </plugins> </build> </project> -
Instale as dependências:
mvn dependency:copy-dependenciesApós a instalação, a estrutura de diretórios ficará assim:
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
Runtime PHP
-
Crie um diretório de trabalho:
mkdir -p my-layer-code/php cd my-layer-code/php -
Crie um arquivo
composer.jsonque declare suas dependências. Exemplo:{ "require": { "aliyunfc/fc-php-sdk": "~1.2", "alibabacloud/fnf": "^1.7" } } -
Instale as dependências:
composer installApós a instalação, a estrutura de diretórios ficará assim:
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
Usando o console
Pré-requisitos
Antes de começar, certifique-se de que:
Você criou uma função do Function Compute. Para obter detalhes, consulte Create a function.
Etapas
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Advanced Features > Layers.
Na barra de navegação superior, selecione uma região. Na página Layers, clique em Create Layer.
-
Configure os parâmetros a seguir e clique em Create.
Parâmetro
Descrição
Name
Insira um nome para a camada.
Description
Insira uma descrição para a camada a fim de ajudar a distinguir entre as camadas.
Compatible Runtime
Selecione os runtimes compatíveis com esta camada.
Layer Upload Method
Escolha como enviar as dependências da camada: Upload Layer in ZIP Package — envie um arquivo .zip (máximo de 500 MB); Upload Layer in Folder — selecione uma pasta que o Function Compute compactará em um arquivo .zip (máximo de 500 MB); Upload Layer Using OSS — especifique o Bucket Name e o Object Name do arquivo .zip no Object Storage Service (OSS) (máximo de 500 MB); Build Dependency Layer Online — se sua função for desenvolvida em Python ou Node.js, ou se você precisar instalar bibliotecas de sistema leves, poderá compilar a camada online. Insira o conteúdo do arquivo de dependência (
requirements.txtpara Python oupackage.jsonpara Node.js) na caixa de entrada abaixo. Após enviar a solicitação, o Function Compute instala automaticamente os pacotes de dependência de nível de linguagem e as bibliotecas de sistema, simplificando o gerenciamento de dependências da camada.Build Environment
Aparece quando Build Dependency Layer Online está selecionado. Escolha o runtime para compilar a camada. Atualmente, há suporte apenas para os runtimes Python e Node.js.
apt command
Aparece quando Build Dependency Layer Online está selecionado. Insira nomes de pacotes após
apt installpara instalar pacotes de sistema na camada.Depois que a camada é criada, uma versão da camada é gerada automaticamente. O número da versão começa em 1 e incrementa a cada nova versão.
NotaSe o bucket do OSS for criptografado pelo Key Management Service (KMS), a função vinculada ao serviço Function Compute (
AliyunServiceRoleForFC) pode não ter permissão para acessar os objetos criptografados, resultando em um erroAccessDenied. Para resolver isso, atualize a política de chave no console do KMS para conceder acesso à funçãoAliyunServiceRoleForFC. Para obter detalhes, consulte Modify a key policy. Após atualizar a política de chave, tente novamente o upload da camada para verificar se a alteração de permissão entrou em vigor. -
Para adicionar uma nova versão a uma camada existente:
NotaNão é possível modificar uma camada existente ou qualquer uma de suas versões. Para atualizar uma camada, crie uma nova camada ou uma nova versão de camada. Se uma versão de camada referenciada for excluída, remova a referência antes de atualizar a configuração da camada.
Na página Layers, clique no nome da camada de destino.
Na seção Version Management, clique em Create Version.
Selecione um runtime, envie o novo código da camada e clique em Create.
Usando Serverless Devs
Pré-requisitos
Antes de começar, certifique-se de que:
Etapas
-
Execute o seguinte comando para criar uma camada:
s cli fc layer publish --code ./my-layer-code --compatible-runtime java8,java11,custom --region cn-hangzhou --layer-name my-layerA tabela a seguir descreve os parâmetros do comando.
Parâmetro
Descrição
--codeCaminho para o pacote de código da camada.
--compatible-runtimeLista separada por vírgulas dos runtimes compatíveis.
--layer-nameNome da camada.
Após a criação da camada, o comando retorna o Alibaba Cloud Resource Name (ARN) da camada. O ARN consiste em três partes separadas por sinais de cerquilha (
#): o identificador do ID da conta, o nome da camada e a versão da camada. Você também pode fazer login no console do Function Compute para visualizar as informações sobre a camada criada. -
Para adicionar uma nova versão a uma camada existente, execute o mesmo comando com o mesmo nome de 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 existente ou qualquer uma de suas versões. Para atualizar uma camada, crie uma nova camada ou uma nova versão de camada. Se uma versão de camada referenciada for excluída, remova a referência antes de atualizar a configuração da camada.
Excluir uma camada ou versão de camada
É possível excluir camadas ou versões de camada que não são mais necessárias. Uma camada excluída não pode mais ser visualizada ou referenciada nas configurações de função. No entanto, a execução de funções que já referenciam a camada excluída não é afetada.
Faça login no console do Function Compute. No painel de navegação à esquerda, escolha Advanced Features > Layers.
Na barra de navegação superior, selecione uma região.
-
Na página Layers, exclua uma camada ou uma versão de camada:
Excluir uma camada: Localize a camada de destino, clique em Delete na coluna Actions, marque a caixa de confirmação e clique em Delete.
Excluir uma versão de camada: Clique no nome da camada de destino. Na seção Version Management da página de detalhes da camada, localize a versão de destino, clique em Delete na coluna Actions e clique em Delete na caixa de diálogo Confirm.
Próximos passos
Após criar uma camada personalizada, vincule-a a uma função através do console do Function Compute ou do Serverless Devs para que a função possa acessar os recursos fornecidos pela camada. Para obter detalhes, consulte Configure a custom layer.
Também é possível gerenciar e configurar camadas definindo o parâmetro
layersao criar ou atualizar uma função chamando a API ou usando o SDK. Para obter detalhes, consulte CreateFunction e UpdateFunction.Caso as dependências da sua camada incluam bibliotecas compartilhadas ou seu ambiente local seja incompatível com o runtime do Function Compute, não será possível compilar a camada no console ou localmente. Em vez disso, compile a camada a partir de um Dockerfile. Para obter detalhes, consulte Use a Dockerfile to build a layer.