

# Gerenciar dependências do Lambda com camadas
<a name="chapter-layers"></a>

Uma camada do Lambda é um arquivo .zip que pode conter código ou dados adicionais. As camadas geralmente contêm dependências de biblioteca, um [runtime personalizado](runtimes-custom.md) ou arquivos de configuração. 

Há vários motivos pelos quais você pode considerar o uso de camadas:
+ **Para reduzir o tamanho de seus pacotes de implantação.** Em vez de incluir todas as dependências da função junto com o código da função no pacote de implantação, coloque-as em uma camada. Isso mantém os pacotes de implantação pequenos e organizados.
+ **Para separar a lógica da função central das dependências.** Com camadas, você pode atualizar suas dependências de função independentemente do código da função, e vice-versa. Isso promove a separação de preocupações e ajuda você a se concentrar na lógica da sua função.
+ **Para compartilhar dependências em várias funções.** Depois de criar uma camada, você pode aplicá-la a qualquer número de funções em sua conta. Sem camadas, você precisa incluir as mesmas dependências em cada pacote de implantação individual.
+ **Para usar o editor de código do console do Lambda.** O editor de código é uma ferramenta útil para testar rapidamente pequenas atualizações de código de funções. No entanto, você não pode usar o editor se o tamanho do pacote de implantação for muito grande. O uso de camadas reduz o tamanho do pacote e pode desbloquear o uso do editor de código.
+ **Para bloquear uma versão do SDK incorporado.**Os SDKs incorporados podem ser alterados sem aviso prévio à medida que a AWS lança novos serviços e atributos. Você pode bloquear uma versão do SDK [criando uma camada no Lambda](#chapter-layers) com a versão específica necessária. Dessa forma, a função sempre usará a versão na camada, mesmo que a versão incorporada no serviço mude.

Se você estiver trabalhando com funções do Lambda em Go ou Rust, recomendamos não utilizar camadas. Para funções em Go e Rust, você fornece o código da sua função como um executável, que inclui o código da função compilado junto com todas as respectivas dependências. Colocar suas dependências em uma camada força sua função a carregar assemblies adicionais manualmente durante a fase inicial, o que pode aumentar os tempos de inicialização a frio. Para proporcionar a performance ideal para as funções em Go e Rust, inclua suas dependências junto com seu pacote de implantação.

O diagrama a seguir ilustra as diferenças arquitetônicas de alto nível entre duas funções que compartilham dependências. Uma usa camadas do Lambda e a outra, não.

![\[\]](http://docs.aws.amazon.com/pt_br/lambda/latest/dg/images/lambda-layers-diagram.png)


Quando você adiciona uma camada a uma função, o Lambda extrai o conteúdo da camada para o diretório `/opt` no [ambiente de execução](lambda-runtime-environment.md) da sua função. Todos os runtimes do Lambda com suporte nativo incluem caminhos para diretórios específicos dentro do diretório `/opt`. Isso dá à sua função acesso ao conteúdo da camada. Para obter mais informações sobre esses caminhos específicos e como empacotar adequadamente suas camadas, consulte [Empacotar seu conteúdo de camada](packaging-layers.md).

Você pode incluir até cinco camadas por função. Também é possível usar camadas somente com funções do Lambda [implantadas como um arquivo .zip](configuration-function-zip.md). Para funções [definidas como uma imagem de contêiner](images-create.md), empacote seu runtime preferido e todas as dependências de código ao criar a imagem de contêiner. Para obter mais informações, consulte [ Working with Lambda layers and extensions in container images](https://aws.amazon.com/blogs/compute/working-with-lambda-layers-and-extensions-in-container-images/)  no AWS Compute Blog.

**Topics**
+ [

## Como usar camadas
](#lambda-layers-overview)
+ [

## Camadas e versões da camada
](#lambda-layer-versions)
+ [

# Empacotar seu conteúdo de camada
](packaging-layers.md)
+ [

# Criar e excluir camadas no Lambda
](creating-deleting-layers.md)
+ [

# Adicionar camadas às funções
](adding-layers.md)
+ [

# Usar o AWS CloudFormation com camadas
](layers-cfn.md)
+ [

# Usar o AWS SAM com camadas
](layers-sam.md)

## Como usar camadas
<a name="lambda-layers-overview"></a>

Para criar uma camada, empacote suas dependências em um arquivo .zip, da mesma forma como você [cria um pacote de implantação normal](configuration-function-zip.md). Mais especificamente, o processo geral de criação e o uso de camadas envolve estas três etapas:
+ **Primeiro, empacote o conteúdo da camada.** Isso significa criar um arquivo .zip. Para obter mais informações, consulte [Empacotar seu conteúdo de camada](packaging-layers.md).
+ **Em seguida, crie a camada no Lambda.** Para obter mais informações, consulte [Criar e excluir camadas no Lambda](creating-deleting-layers.md).
+ **Adicione a camada às funções.** Para obter mais informações, consulte [Adicionar camadas às funções](adding-layers.md).

## Camadas e versões da camada
<a name="lambda-layer-versions"></a>

Uma versão da camada é um snapshot imutável de uma versão específica de uma camada. Quando você cria uma nova camada, o Lambda cria uma nova versão da camada com um número de versão de 1. Sempre que você publica uma atualização na camada, o Lambda incrementa o número da versão e cria uma nova versão da camada.

Cada versão da camada é identificada por um nome do recurso da Amazon (ARN) único. Ao adicionar uma camada à função, você deve especificar a versão exata da camada que deseja usar (por exemplo, `arn:aws:lambda:us-east-1:123456789012:layer:my-layer:1`).

# Empacotar seu conteúdo de camada
<a name="packaging-layers"></a>

Uma camada do Lambda é um arquivo .zip que pode conter código ou dados adicionais. As camadas geralmente contêm dependências de biblioteca, um [runtime personalizado](runtimes-custom.md) ou arquivos de configuração. 

Esta seção explica como empacotar adequadamente o conteúdo da camada. Para obter mais informações conceituais sobre camadas e por que você pode considerar usá-las, consulte [Gerenciar dependências do Lambda com camadas](chapter-layers.md).

A primeira etapa para criar uma camada é agrupar todo o conteúdo da camada em um arquivo .zip. Devido às funções do Lambda serem executadas no [Amazon Linux](https://docs.aws.amazon.com/linux/al2023/ug/what-is-amazon-linux.html), seu conteúdo da camada deve ser capaz de compilar e criar em um ambiente Linux.

Para garantir que o conteúdo da camada funcione bem em um ambiente do Linux, recomendamos criar o conteúdo da camada usando uma ferramenta como o [Docker](https://docs.docker.com/get-docker).

**Topics**
+ [

## Caminhos da camada para cada runtime do Lambda
](#packaging-layers-paths)

## Caminhos da camada para cada runtime do Lambda
<a name="packaging-layers-paths"></a>

Quando você adiciona uma camada a uma função, o Lambda carrega o conteúdo da camada no diretório `/opt` desse ambiente de execução. Para cada runtime do Lambda, a variável `PATH` já inclui caminhos de pasta específica no diretório `/opt`. Para garantir que o Lambda colete o conteúdo da camada, o arquivo .zip da camada deve ter suas dependências em um dos seguintes caminhos de pasta:

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/lambda/latest/dg/packaging-layers.html)

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

------
#### [ Node.js ]

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

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

------
#### [ Python ]

**Example**  

```
python/              # Required top-level directory
└── requests/
└── boto3/
└── numpy/
└── (dependencies of the other packages)
```

------
#### [ Ruby ]

**Example estrutura de arquivos da gem JSON**  

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

------
#### [ Java ]

**Example estrutura de arquivos do arquivo JAR do Jackson**  

```
layer_content.zip
└ java
    └ lib
        └ jackson-core-2.17.0.jar
        └ <other potential dependencies>
        └ ...
```

------
#### [ All ]

**Example estrutura de arquivos da biblioteca jq**  

```
jq.zip
└ bin/jq
```

------

Para obter instruções específicas da linguagem sobre como empacotar, criar e adicionar uma camada, consulte as páginas a seguir:
+ **Node.js**: [Trabalho com camadas para funções do Lambda com Node.js](nodejs-layers.md)
+ **Python**: [Como trabalhar com camadas para funções do Lambda em Python](python-layers.md)
+ **Ruby**: [Como trabalhar com camadas em Ruby para funções do Lambda](ruby-layers.md)
+ **Java**: [Como trabalhar com camadas para funções do Lambda em Java](java-layers.md)

Recomendamos **não** usar camadas para gerenciar dependências de funções do Lambda escritas em Go e Rust. Isso ocorre porque as funções do Lambda escritas nessas linguagens são compiladas em um único executável que você fornece ao Lambda ao implantar sua função. Esse executável contém seu código de função compilado, junto com todas as suas dependências. O uso de camadas não apenas complica esse processo, mas também aumenta os tempos de inicialização a frio, pois suas funções precisam carregar manualmente assemblies extras na memória durante a fase inicial.

Para usar dependências externas com funções do Lambda em Go e Rust, inclua-as diretamente em seu pacote de implantação.

# Criar e excluir camadas no Lambda
<a name="creating-deleting-layers"></a>

Uma camada do Lambda é um arquivo .zip que pode conter código ou dados adicionais. As camadas geralmente contêm dependências de biblioteca, um [runtime personalizado](runtimes-custom.md) ou arquivos de configuração. 

Esta seção explica como criar e excluir camadas no Lambda. Para obter mais informações conceituais sobre camadas e por que você pode considerar usá-las, consulte [Gerenciar dependências do Lambda com camadas](chapter-layers.md).

Depois de ter [empacotado seu conteúdo de camada](packaging-layers.md), a próxima etapa é criar a camada no Lambda. Esta seção demonstra como criar e excluir camadas usando somente o console do Lambda ou a API do Lambda. Para criar uma camada usando o AWS CloudFormation, consulte [Usar o AWS CloudFormation com camadas](layers-cfn.md). Para criar uma camada usando o AWS Serverless Application Model (AWS SAM), consulte [Usar o AWS SAM com camadas](layers-sam.md).

**Topics**
+ [

## Criar uma camada
](#layers-create)
+ [

## Excluir uma versão da camada
](#layers-delete)

## Criar uma camada
<a name="layers-create"></a>

Para criar uma camada, você pode fazer o upload do arquivo .zip em sua máquina local ou no Amazon Simple Storage Service (Amazon S3). O Lambda extrai o conteúdo da camada para o diretório `/opt` ao configurar o ambiente de execução para a função.

As camadas podem ter uma ou mais [versões da camada](chapter-layers.md#lambda-layer-versions). Quando você cria uma camada, o Lambda define a versão da camada para a versão 1. Você pode alterar as permissões em uma versão da camada existente a qualquer momento. No entanto, para atualizar o código ou fazer outras alterações na configuração, é preciso criar uma nova versão da camada.

**Para criar uma camada (console)**

1. Abra a [página Layers](https://console.aws.amazon.com/lambda/home#/layers) (Camadas) do console do Lambda.

1. Escolha **Criar camada**.

1. Em **Configuração de camada**, insira um nome para sua camada em **Nome**.

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

1. 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, escolha **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.

1. (Opcional) Em **Arquiteturas compatíveis**, escolha um valor ou ambos os valores. Para obter mais informações, consulte [Selecionar e configurar a arquitetura de um conjunto de instruções para a função do Lambda](foundation-arch.md).

1. (Opcional) Para **Runtimes compatíveis**, escolha os runtimes com os quais sua camada é compatível.

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

1. Escolha **Criar**.

Como alternativa, você pode executar o comando [publish-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/publish-layer-version.html) (CLI) do AWS Command Line Interface. Exemplo:

```
aws lambda publish-layer-version --layer-name my-layer --zip-file fileb://layer.zip --compatible-runtimes python3.14
```

Toda vez que você executa `publish-layer-version`, o Lambda cria uma [nova versão da camada](chapter-layers.md#lambda-layer-versions).

## Excluir uma versão da camada
<a name="layers-delete"></a>

Para excluir uma versão da camada, use a operação de API [DeleteLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_DeleteLayerVersion.html). Por exemplo, execute o comando da AWS CLI [delete-layer-version](https://awscli.amazonaws.com/v2/documentation/api/latest/reference/lambda/delete-layer-version.html) com o nome e a versão da camada especificada.

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

Ao excluir uma versão de camada, não é mais possível 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. Além disso, o Lambda nunca reutiliza números de versão para o nome de uma camada.

Ao calcular as [cotas](gettingstarted-limits.md), a exclusão de uma versão de camada significa que ela não é mais contabilizada como parte da cota padrão de 75 GB para armazenamento de funções e camadas. No entanto, para funções que consomem uma versão de camada excluída, o conteúdo da camada ainda conta para a cota de tamanho do pacote de implantação da função (ou seja, 250 MB para arquivos .zip).

# Adicionar camadas às funções
<a name="adding-layers"></a>

Uma camada do Lambda é um arquivo .zip que pode conter código ou dados adicionais. As camadas geralmente contêm dependências de biblioteca, um [runtime personalizado](runtimes-custom.md) ou arquivos de configuração. 

Esta seção explica como adicionar uma camada a uma função do Lambda. Para obter mais informações conceituais sobre camadas e por que você pode considerar usá-las, consulte [Gerenciar dependências do Lambda com camadas](chapter-layers.md).

Antes de configurar uma função do Lambda para usar uma camada, é necessário:
+ [Empacotar o conteúdo da sua camada](packaging-layers.md)
+ [Criar uma camada no Lambda](creating-deleting-layers.md)
+ Certifique-se de ter permissões para chamar a API [GetLayerVersion](https://docs.aws.amazon.com/lambda/latest/api/API_GetLayerVersion.html) na versão da camada. Para funções em sua Conta da AWS, você deve adicionar essa permissão em sua [política de usuário](access-control-identity-based.md). Para usar uma camada em outra conta, o proprietário dessa conta deve conceder permissão à sua conta em uma [política baseada em recursos](access-control-resource-based.md). Para obter exemplos, consulte [Conceder a outras contas acesso às camadas](permissions-layer-cross-account.md).

É possível adicionar até cinco camadas a uma função do Lambda. O tamanho total descompactado da função e de todas as camadas não pode exceder a cota de tamanho do pacote de implantação descompactado de 250 MB. Para obter mais informações, consulte [Cotas Lambda](gettingstarted-limits.md).

Suas funções podem continuar usando qualquer versão de camada que você já tenha adicionado, mesmo após a exclusão dessa versão ou após a revogação de sua permissão para acessar a camada. No entanto, você não pode criar uma nova função que use uma versão de camada excluída.

**Para adicionar uma camada a uma função**

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda.

1. Escolha a função.

1. Role a tela para baixo até a seção **Camadas** e depois escolha **Adicionar uma camada**.

1. Em **Escolher uma camada**, escolha uma origem da camada:

   1. **Camadas da AWS**: escolha na lista de [extensões gerenciadas pela AWS](extensions-api-partners.md#aws-managed-extensions).

   1. **Camadas personalizadas**: escolha uma camada criada na sua seu Conta da AWS.

   1. **Especificar um ARN**: para usar uma camada [de outra Conta da AWS](permissions-layer-cross-account.md), como uma [extensão de terceiros](extensions-api-partners.md), insira o nome do recurso da Amazon (ARN).

1. Escolha **Adicionar**.

A ordem na qual você adiciona as camadas é a ordem na qual o Lambda mescla posteriormente o conteúdo da camada no ambiente de execução. É possível alterar a ordem de mesclagem das camadas usando o console.

**Para atualizar a ordem de mesclagem das camadas para sua função (console)**

1. Abra a [página Funções](https://console.aws.amazon.com/lambda/home#/functions) do console do Lambda.

1. Escolha a função a ser configurada.

1. Em **Layers** (Camadas), escolha **Edit** (Editar)

1. Escolha uma das camadas.

1. Escolha **Merge earlier** (Mesclar antes) ou **Merge later** (Mesclar depois) para ajustar a ordem das camadas.

1. Escolha **Salvar**.

As camadas contêm versionamento. O conteúdo de cada versão da camada é imutável. O proprietário de uma camada pode liberar novas versões dela para fornecer conteúdo atualizado. É possível usar o console para atualizar a versão da camada anexada às suas funções.

**Para atualizar versões da camada para sua função (console)**

1. Abra a [página Camadas](https://console.aws.amazon.com/lambda/home#/layers) do console do Lambda.

1. Escolha a camada para a qual você deseja atualizar a versão.

1. Escolha a guia **Funções usando esta versão**.

1. Escolha as funções que você deseja modificar e, em seguida, escolha **Editar**.

1. Em **Versão da camada**, escolha a versão da camada a ser alterada.

1. Escolha **Atualizar funções**.

Você não pode atualizar as versões da camada de funções nas contas da AWS.

## Encontrar informações da camada
<a name="finding-layer-information"></a>

Para encontrar camadas em sua conta que sejam compatíveis com o runtime de sua função, use a API [ListLayers](https://docs.aws.amazon.com/lambda/latest/api/API_ListLayers.html). Por exemplo, é possível usar o seguinte comando (CLI) [list-layers](https://docs.aws.amazon.com/cli/latest/reference/lambda/list-layers.html) AWS Command Line Interface:

```
aws lambda list-layers --compatible-runtime python3.14
```

Você deve ver uma saída semelhante a:

```
{
    "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": "2025-04-15T00:37:46.592+0000",
                "CompatibleRuntimes": [
                    "python3.14"
                ]
            }
        }
    ]
}
```

Para listar todas as camadas da sua conta, omitia a opção `--compatible-runtime`. Os detalhes da resposta mostram a versão mais recente de cada camada.

Também é possível obter a versão mais recente de uma camada usando a API [ListLayerVersions](https://docs.aws.amazon.com/lambda/latest/api/API_ListLayerVersions.html). Por exemplo, é possível usar o seguinte comando `list-layer-versions` da CLI:

```
aws lambda list-layer-versions --layer-name my-layer
```

Você deve ver uma saída semelhante a:

```
{
    "LayerVersions": [
        {
            "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:2",
            "Version": 2,
            "Description": "My layer",
            "CreatedDate": "2023-11-15T00:37:46.592+0000",
            "CompatibleRuntimes": [
                "java11"
            ]
        },
        {
            "LayerVersionArn": "arn:aws:lambda:us-east-2:123456789012:layer:my-layer:1",
            "Version": 1,
            "Description": "My layer",
            "CreatedDate": "2023-11-15T00:27:46.592+0000",
            "CompatibleRuntimes": [
                "java11"
            ]
        }
    ]
}
```

# Usar o AWS CloudFormation com camadas
<a name="layers-cfn"></a>

Você pode usar o CloudFormation para criar uma camada e associá-la à sua função do Lambda. O modelo de exemplo a seguir cria uma camada chamada `my-lambda-layer` e a anexa à função do Lambda usando a propriedade **Camadas**.

Neste exemplo, o modelo especifica o nome do recurso da Amazon (ARN) de um [perfil de execução](lambda-intro-execution-role.md) do IAM existente. Você também pode criar um novo perfil de execução no modelo usando o recurso [AWS::IAM::Role](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-iam-role.html) do CloudFormation.

Sua função não precisa de nenhuma permissão especial para usar camadas.

```
---
Description: CloudFormation Template for Lambda Function with Lambda Layer
Resources:
  MyLambdaLayer:
    Type: AWS::Lambda::LayerVersion
    Properties:
      LayerName: my-lambda-layer
      Description: My Lambda Layer
      Content:
        S3Bucket: amzn-s3-demo-bucket
        S3Key: my-layer.zip
      CompatibleRuntimes:
        - python3.9
        - python3.10
        - python3.11

  MyLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: my-lambda-function
      Runtime: python3.9
      Handler: index.handler
      Timeout: 10
      Role: arn:aws:iam::111122223333:role/my_lambda_role
      Layers:
        - !Ref MyLambdaLayer
```

# Usar o AWS SAM com camadas
<a name="layers-sam"></a>

Você pode usar o AWS Serverless Application Model (AWS SAM) para automatizar a criação de camadas em sua aplicação. O tipo de recurso `AWS::Serverless::LayerVersion` cria uma versão da camada à qual você pode fazer referência na configuração da função do Lambda.

```
AWSTemplateFormatVersion: '2010-09-09'
Transform: 'AWS::Serverless-2016-10-31'
Description: AWS SAM Template for Lambda Function with Lambda Layer

Resources:
  MyLambdaLayer:
    Type: AWS::Serverless::LayerVersion
    Properties:
      LayerName: my-lambda-layer
      Description: My Lambda Layer
      ContentUri: s3://amzn-s3-demo-bucket/my-layer.zip
      CompatibleRuntimes:
        - python3.9
        - python3.10
        - python3.11

  MyLambdaFunction:
    Type: AWS::Serverless::Function
    Properties:
      FunctionName: MyLambdaFunction
      Runtime: python3.9
      Handler: app.handler
      CodeUri: s3://amzn-s3-demo-bucket/my-function
      Layers:
        - !Ref MyLambdaLayer
```