Criar e compartilhar camadas do Lambda - AWS Lambda

Criar e compartilhar camadas do Lambda

Uma camada do Lambda é um arquivo.zip arquivo que pode conter código ou dados adicionais. Uma camada pode conter bibliotecas, um tempo de execução personalizado, dados ou arquivos de configuração. As camadas promovem o compartilhamento de código e a separação de responsabilidades para que você possa iterar mais rapidamente na escrita da lógica de negócios.

Você pode usar camadas somente com funções do Lambda implantadas como um arquivo.zip. Para funções definidas como uma imagem de contêiner, você empacota seu tempo de execução preferido e todas as dependências de código ao criar a imagem de contêiner. Para obter mais informações, consulte a publicação Working with Lambda layers and extensions in container images no Blog de computação da AWS.

É possível criar camadas usando o console do Lambda, a API do LambdaAWS CloudFormation, ou oAWS Serverless Application Model(AWS SAM). Para obter mais informações sobre como criar camadas comAWS SAM, consulteTrabalhar com camadasnoAWS Serverless Application ModelGuia do desenvolvedor.

Criar conteúdo de camada

Ao criar uma camada, agrupe todo o conteúdo em um arquivo .zip. Você carrega o arquivo .zip para sua camada a partir do Amazon Simple Storage Service (Amazon S3) ou da sua máquina local. O Lambda extrai o conteúdo da camada para o/optAo configurar o ambiente de execução para a função.

Compilar o arquivo .zip para sua camada

Você cria seu código de camada em um arquivo .zip usando o mesmo procedimento que você usaria para um pacote de implantação da função. Se sua camada incluir bibliotecas de código nativo, você deve compilar e criar essas bibliotecas usando uma máquina de desenvolvimento Linux para que os binários sejam compatíveis com o Amazon Linux.

Ao criar uma camada, você pode especificar se a camada é compatível com uma ou ambas as arquiteturas do conjunto de instruções. Talvez seja necessário definir sinalizadores de compilação específicos para criar uma camada compatível com a arquitetura arm64.

Uma maneira de garantir que você empacote bibliotecas corretamente para o Lambda é usar o AWS Cloud9. Para obter mais informações, consulte Using Lambda layers to simplify your development process no Blog de computação da AWS.

Incluir dependências da biblioteca em uma camada

Para cada tempo de execução do Lambda, a variável PATH inclui pastas específicas no diretório /opt. Se você definir a mesma estrutura de pastas em seu arquivo .zip de camada, o código da função poderá acessar o conteúdo da camada sem a necessidade de especificar o caminho.

A tabela a seguir lista os caminhos de pasta compatíveis com cada tempo de execução.

Caminhos de camada para cada tempo de execução do Lambda
Tempo de execução Caminho

Node.js

nodejs/node_modules

nodejs/node14/node_modules (NODE_PATH)

Python

python

python/lib/python3.9/site-packages(diretórios do site)

Java

java/lib (CLASSPATH)

Ruby

ruby/gems/2.7.0 (GEM_PATH)

ruby/lib (RUBYLIB)

Todos os tempos de execução

bin (PATH)

lib (LD_LIBRARY_PATH)

Os exemplos a seguir mostram como você pode estruturar as pastas no seu arquivo .zip da camada.

Node.js

exemplo estrutura de arquivos do AWS X-Ray SDK for Node.js

xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
Python

exemplo estrutura de arquivos para a biblioteca Pillow

pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info
Ruby

exemplo estrutura de arquivos da gem JSON

json.zip └ ruby/gems/2.5.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
Java

exemplo estrutura de arquivos do arquivo JAR do Jackson

jackson.zip └ java/lib/jackson-core-2.2.3.jar
All

exemplo estrutura de arquivos da biblioteca jq

jq.zip └ bin/jq

Para obter mais informações sobre as configurações de caminhos no ambiente de execução do Lambda, consulte Variáveis de ambiente com tempo de execução definido.

Instruções específicas de linguagem

Para obter instruções específicas de linguagem sobre como criar um arquivo .zip, consulte os tópicos a seguir.

Node.js

Implantar funções do Lambda em Node.js com arquivos .zip

Python

Implantar funções do Lambda em Python com arquivos .zip

Ruby

Implantar funções do Lambda em Ruby com arquivos .zip

Java

Implantar funções do Lambda em Java com arquivos .zip ou JAR

Go

Implantar funções do Lambda em Go com arquivos .zip

C#

Implantar funções do Lambda em C# com arquivos .zip

PowerShell

Implantar funções do Lambda para PowerShell com arquivos .zip

Criar uma camada

Você pode criar camadas usando o console do Lambda ou a API do Lambda.

As camadas podem ter uma ou mais versões. Quando você cria uma camada, o Lambda define a versão da camada para a versão 1. Você pode configurar permissões em uma versão de camada existente, mas para atualizar o código ou fazer outras alterações de configuração, você deve criar uma nova versão da camada.

Para criar uma camada (console)

  1. Abra a página Layers (Camadas) do console do Lambda.

  2. Escolha Create layer (Criar camada).

  3. Em Layer configuration (Cofiguração de camada), insira um nome para sua camada em Name (Nome).

  4. (Opcional) Em Description (Descrição), insira uma descrição para a sua camada.

  5. Para fazer upload do código da camada, siga um destes procedimentos:

    • Para carregar um arquivo.zip do seu computador, escolha Upoad a .zip file (Fazer upload de um arquivo .zip). Selecione Upload (Fazer upload) para escolher seu arquivo .zip local.

    • Para fazer upload de um arquivo do Amazon S3, escolhaPara fazer upload de um arquivo do Amazon S3. Então, em Amazon S3 link URL (URL do link do Amazon S3), insira um link para o arquivo.

  6. (Opcional) Em Compatible instruction set architectures (Arquiteturas de conjuntos de instruções compatíveis), escolha um valor ou ambos os valores.

  7. (Opcional) Em Compatible runtimes (Tempos de execução compatíveis), escolha até 15 tempos de execução.

  8. (Opcional) Em License (Licença), insira todas as informações necessárias sobre licença.

  9. Escolha Create (Criar).

Para criar uma camada (API)

Para criar uma camada, use o comando publish-layer-version com um nome, descrição, arquivo .zip e uma lista de runtimes e uma lista de arquiteturas que são compatíveis com a camada. Os runtimes e parâmetros de arquitetura são opcionais.

aws lambda publish-layer-version --layer-name my-layer --description "My layer" \ --license-info "MIT" --content S3Bucket=lambda-layers-us-east-2-123456789012,S3Key=layer.zip \ --compatible-runtimes python3.6 python3.7 python3.8 --compatible-architectures "arm64" "x86_64"

Você deve ver saída semelhante a:

{ "Content": { "Location": "https://awslambda-us-east-2-layers.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-layer-4aaa2fbb-ff77-4b0a-ad92-5b78a716a96a?versionId=27iWyA73cCAYqyH...", "CodeSha256": "tv9jJO+rPbXUUXuRKi7CwHzKtLDkDRJLB3cC3Z/ouXo=", "CodeSize": 169 }, "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1", "Description": "My layer", "CreatedDate": "2018-11-14T23:03:52.894+0000", "Version": 1, "CompatibleArchitectures": [ "arm64", "x86_64" ], "LicenseInfo": "MIT", "CompatibleRuntimes": [ "python3.6", "python3.7", "python3.8" ] }
nota

Cada vez que acionar a publish-layer-version, você cria uma nova versão dessa camada.

Excluir uma versão de camada

Para excluir uma versão de camada, use o comando delete-layer-version.

aws lambda delete-layer-version --layer-name my-layer --version-number 1

Ao excluir uma versão de camada, você não pode mais configurar uma função do Lambda para usá-la. No entanto, todas as funções que já usem a versão continua a ter acesso a ela. Os números de versão nunca são reutilizados para um nome de camada.

Configurar permissões de camada

Por padrão, uma camada que você cria é privada para sua conta da AWS. No entanto, você tem a opção de compartilhar a camada com outras contas ou torná-la pública.

Para conceder permissão de uso de camadas a outra conta, adicione uma instrução à política de permissões da versão da camada usando o comando add-layer-version-permission. Em cada instrução, você pode conceder permissão a uma única conta, a todas as contas ou a uma organização.

aws lambda add-layer-version-permission --layer-name xray-sdk-nodejs --statement-id xaccount \ --action lambda:GetLayerVersion --principal 210987654321 --version-number 1 --output text

Você deve ver saída semelhante a:

e210ffdc-e901-43b0-824b-5fcd0dd26d16 {"Sid":"xaccount","Effect":"Allow","Principal":{"AWS":"arn:aws:iam::210987654321:root"},"Action":"lambda:GetLayerVersion","Resource":"arn:aws:lambda:us-east-2:123456789012:layer:xray-sdk-nodejs:1"}

As permissões se aplicam apenas a uma única versão de camada. Repita o processo sempre que criar uma nova versão da camada.

Para obter mais exemplos, consulte Conceder acesso de camada a outras contas.

Usar o AWS CloudFormation com camadas

Você pode usar o AWS CloudFormation para criar uma camada e associá-la à sua função do Lambda. O modelo de exemplo a seguir cria uma camada chamada blank-nodejs-lib e a anexa à função do Lambda usando a propriedade Layers.

AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: A Lambda application that calls the Lambda API. Resources: function: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: function/. Description: Call the Lambda API Timeout: 10 # Function's execution role Policies: - AWSLambdaBasicExecutionRole - AWSLambda_ReadOnlyAccess - AWSXrayWriteOnlyAccess Tracing: Active Layers: - !Ref libs libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. Content: S3Bucket: my-bucket-region-123456789012 S3Key: layer.zip CompatibleRuntimes: - nodejs12.x