AWS Lambda
Guia do desenvolvedor

Camadas do AWS Lambda

Você pode configurar sua função do Lambda para extrair código adicional e o conteúdo na forma de camadas. Camada é um arquivo ZIP que contém bibliotecas, um tempo de execução personalizado ou outras dependências. Com camadas, você pode usar as bibliotecas na sua função sem a necessidade de incluí-las em seu pacote de implantação.

As camadas permitem que você mantenha seu pacote de implantação pequeno, o que torna o desenvolvimento mais fácil. Você pode evitar erros que podem ocorrer ao instalar e empacotar as dependências com o código da função. Para funções de Node.js, Python e Ruby, você pode desenvolver seu código de função no console do Lambda desde que você mantenha seu pacote de implantação em 3 MB.

nota

Uma função pode usar até 5 layers por vez. O tamanho total descompactado da função e de todas as camadas não pode exceder o limite de tamanho do pacote de implantação descompactado de 250 MB. Para obter mais informações, consulte Limites do AWS Lambda.

Você pode criar camadas ou usar camadas publicadas pela AWS e outros clientes da AWS. As camadas oferecem suporte a políticas baseadas em recursos para conceder à camada permissão de uso de contas específicas da AWS do AWS Organizations ou de todas as contas.

As camadas são extraídas para o diretório /opt no ambiente de execução da função. Cada tempo de execução procura bibliotecas em um local diferente em /opt, dependendo da linguagem. Estruture a camada para que seu código de função possa acessar bibliotecas sem configuração adicional.

Você também pode usar o Modelo de aplicativo sem servidor da AWS (AWS SAM) para gerenciar camadas e a configuração de camadas de sua função. Para obter instruções, consulte Declarando recursos sem servidor no Guia do desenvolvedor do Modelo de aplicativo sem servidor da AWS.

Configurando uma função para usar camadas

Você pode especificar até 5 layers na configuração da sua função, durante ou após a criação da função. Escolha uma versão específica de uma camada a ser usada. Se quiser usar uma versão diferente mais tarde, atualize a configuração da sua função.

Para adicionar camadas à sua função, use o comando update-function-configuration. O exemplo a seguir adiciona duas camadas: um na mesma conta como a função e uma de outra conta.

$ aws lambda update-function-configuration --function-name my-function \ --layers arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3 \ arn:aws:lambda:us-east-2:210987654321:layer:their-layer:2 { "FunctionName": "test-layers", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs8.10", "Role": "arn:aws:iam::123456789012:role/service-role/lambda-role", "Handler": "index.handler", "CodeSize": 402, "Description": "", "Timeout": 5, "MemorySize": 128, "LastModified": "2018-11-14T22:47:04.542+0000", "CodeSha256": "kDHAEY62Ni3OovMwVO8tNvgbRoRa6IOOKqShm7bSWF4=", "Version": "$LATEST", "TracingConfig": { "Mode": "Active" }, "RevisionId": "81cc64f5-5772-449a-b63e-12330476bcc4", "Layers": [ { "Arn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:3", "CodeSize": 169 }, { "Arn": "arn:aws:lambda:us-east-2:210987654321:layer:their-layer:2", "CodeSize": 169 } ] }

Você deve especificar a versão de cada camada a ser usada fornecendo o ARN completo da versão da camada. Quando você adicionar camadas a uma função que já tem camadas, a lista anterior será substituída pela nova. Inclua todas as camadas sempre que atualizar a configuração da camada. Para remover todas as camadas, especifique uma lista vazia.

$ aws lambda update-function-configuration --function-name my-function --layers []

Sua função pode acessar o conteúdo da camada durante a execução no diretório /opt. As camadas são aplicadas na ordem especificada, mesclando todas as pastas com o mesmo nome. Se o mesmo arquivo aparecer em várias camadas, a versão da última camada aplicada será usada.

O criador de uma camada pode excluir a versão da camada que você está usando. Nesse caso, sua função continuará a ser executada como se a versão da camada ainda existisse. No entanto, quando você atualizar a configuração da camada, precisará remover a referência à versão excluída.

Gerenciar camadas

Para criar uma camada, use o comando publish-layer-version com um nome, descrição, arquivo ZIP e uma lista de tempos de execução que sejam compatíveis com a camada. A lista de tempos de execução é opcional, mas facilita a descoberta da camada.

$ 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 { "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, "LicenseInfo": "MIT", "CompatibleRuntimes": [ "python3.6", "python3.7" ] }

Cada vez que você chama publish-layer-version, uma nova versão é criada. Funções que usam a camada se referem diretamente a uma versão de camada. Você pode configurar permissões em uma versão de camada existente, mas para fazer outras alterações, você deve criar uma nova versão.

Para encontrar camadas compatíveis com o tempo de execução de sua função, use o comando list-layers.

$ aws lambda list-layers --compatible-runtime python3.7 { "Layers": [ { "LayerName": "my-layer", "LayerArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer", "LatestMatchingVersion": { "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2", "Version": 2, "Description": "My layer", "CreatedDate": "2018-11-15T00:37:46.592+0000", "CompatibleRuntimes": [ "python3.6", "python3.7" ] } } ] }

Você pode omitir a opção de tempo de execução para listar todas as camadas. Os detalhes na resposta refletem a versão mais recente da camada. Consulte todas as versões de uma camada com list-layer-versions. Para obter mais informações sobre uma versão, use get-layer-version.

$ aws lambda get-layer-version --layer-name my-layer --version-number 2 { "Content": { "Location": "https://awslambda-us-east-2-layers.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-layer-91e9ea6e-492d-4100-97d5-a4388d442f3f?versionId=GmvPV.309OEpkfN...", "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:2", "Description": "My layer", "CreatedDate": "2018-11-15T00:37:46.592+0000", "Version": 2, "CompatibleRuntimes": [ "python3.6", "python3.7" ] }

O link na resposta permite que você faça download do arquivo de camada e é válido por 10 minutos. 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 funções 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.

Incluindo dependências da biblioteca em uma camada

Você pode mover as dependências de tempo de execução do seu código de função, colocando-as em uma camada. Os tempos de execução do Lambda incluem caminhos no diretório /opt para garantir que seu código de função tenha acesso a bibliotecas que estejam incluídas em camadas.

Para incluir bibliotecas em uma camada, coloque-as em uma das pastas compatíveis com o seu tempo de execução.

  • Node.jsnodejs/node_modules, nodejs/node8/node_modules (NODE_PATH)

    exemplo AWS X-Ray SDK para Node.js

    xray-sdk.zip └ nodejs/node_modules/aws-xray-sdk
  • Pythonpython, python/lib/python3.7/site-packages (diretórios de site)

    exemplo Pillow

    pillow.zip │ python/PIL └ python/Pillow-5.3.0.dist-info
  • Javajava/lib (caminho de classe)

    exemplo Jackson

    jackson.zip └ java/lib/jackson-core-2.2.3.jar
  • Rubyruby/gems/2.5.0 (GEM_PATH), ruby/lib (RUBY_LIB)

    exemplo JSON

    json.zip └ ruby/gems/2.5.0/ | build_info | cache | doc | extensions | gems | └ json-2.1.0 └ specifications └ json-2.1.0.gemspec
  • Todosbin (PATH), lib (LD_LIBRARY_PATH)

    exemplo JQ

    jq.zip └ bin/jq

Para obter mais informações sobre as configurações de caminho no ambiente de execução do Lambda, consulte Variáveis de ambiente disponíveis para funções de Lambda.

Permissões de camada

As permissões de uso de camadas são gerenciadas no recurso. Para configurar uma função com uma camada, você precisa de permissão para chamar GetLayerVersion na versão da camada. Para funções em sua conta, você pode obter essa permissão da política do usuário ou da política baseada em recurso da função. Para usar uma camada em outra conta, você precisa de permissão em sua política de usuário, e o proprietário da outra conta deve conceder permissão à sua conta com uma política baseada em recursos.

Para obter mais exemplos, consulte Concessão do acesso de camada a outras contas.