Como trabalhar com camadas para funções do Lambda em Python
Use camadas do Lambda para empacotar o código e as dependências que você quiser reutilizar em várias funções. As camadas geralmente contêm dependências de biblioteca, um runtime personalizado ou arquivos de configuração. A criação de uma camada envolve três etapas gerais:
-
Empacotar o conteúdo da sua camada. Isso significa criar um arquivo .zip contendo as dependências que você deseja usar em suas funções.
-
Criar a camada no Lambda.
-
Adicionar a camada às suas funções.
Este tópico explica como criar uma camada de Python e anexá-la a uma função do Lambda.
Tópicos
Empacotar o conteúdo da sua camada
Para criar uma camada, reúna os pacotes em um arquivo .zip que atenda aos seguintes requisitos:
-
Crie a camada usando a mesma versão do Python que você planeja usar para a função do Lambda. Por exemplo, se você compilar a camada usando o Python 3.13, use o runtime do Python 3.13 para a função.
-
O arquivo .zip deve incluir um diretório de
python
no nível-raiz. -
Os pacotes da camada devem ser compatíveis com o Linux. As funções do Lambda são executadas no Amazon Linux.
Você pode criar camadas contendo bibliotecas de Python de terceiros instaladas com pip
(como requests
ou pandas
) ou seus próprios módulos e pacotes de Python.
Para criar uma camada usando pacotes pip
-
Escolha um dos métodos a seguir para instalar os pacotes
pip
no diretório superior exigido (python/
): -
Compacte o conteúdo do diretório
python
.zip -r layer.zip python/
A estrutura de diretórios do arquivo zip deve ser assim:
python/
# Required top-level directory └── requests/ └── boto3/ └── numpy/ └── (dependencies of the other packages)nota
Se você usar um ambiente virtual do Python (venv) para instalar pacotes, a estrutura de diretórios será diferente (por exemplo,
python/lib/python3.
). O Lambda pode localizar e importar os pacotes desde que seu arquivo .zip inclua o diretóriox
/site-packagespython
no nível-raiz.
Para criar uma camada usando seu próprio código
-
Crie o diretório superior necessário para a camada:
mkdir python
-
Crie os módulos de Python no diretório
python
. O exemplo de módulo a seguir valida os pedidos confirmando que eles contêm as informações necessárias.exemplo módulo personalizado: validator.py
import json def validate_order(order_data): """Validates an order and returns formatted data.""" required_fields = ['product_id', 'quantity'] # Check required fields missing_fields = [field for field in required_fields if field not in order_data] if missing_fields: raise ValueError(f"Missing required fields: {', '.join(missing_fields)}") # Validate quantity quantity = order_data['quantity'] if not isinstance(quantity, int) or quantity < 1: raise ValueError("Quantity must be a positive integer") # Format and return the validated data return { 'product_id': str(order_data['product_id']), 'quantity': quantity, 'shipping_priority': order_data.get('priority', 'standard') } def format_response(status_code, body): """Formats the API response.""" return { 'statusCode': status_code, 'body': json.dumps(body) }
-
Compacte o conteúdo do diretório
python
.zip -r layer.zip python/
A estrutura de diretórios do arquivo zip deve ser assim:
python/
# Required top-level directory └── validator.py -
Na função, importe e use os módulos como você faria com qualquer pacote de Python. Exemplo:
from validator import validate_order, format_response
import json def lambda_handler(event, context): try: # Parse the order data from the event body order_data = json.loads(event.get('body', '{}')) # Validate and format the order validated_order = validate_order(order_data) return format_response(200, { 'message': 'Order validated successfully', 'order': validated_order }) except ValueError as e: return format_response(400, { 'error': str(e) }) except Exception as e: return format_response(500, { 'error': 'Internal server error' })Você pode usar os seguinte evento de testepara invocar a função:
{ "body": "{\"product_id\": \"ABC123\", \"quantity\": 2, \"priority\": \"express\"}" }
Resposta esperada:
{ "statusCode": 200, "body": "{\"message\": \"Order validated successfully\", \"order\": {\"product_id\": \"ABC123\", \"quantity\": 2, \"shipping_priority\": \"express\"}}" }
Criar a camada no Lambda
Você pode publicar a camada usando a AWS CLI ou o console do Lambda.
Adicionar a camada à função
Aplicação de amostra
Para obter mais exemplos de como usar camadas do Lambda, consulte a aplicação de amostra layer-python