Como posso criar uma camada para minha função Lambda Python?
Quero criar uma camada para minha função AWS Lambda Python.
Resolução
As instruções a seguir implantam uma aplicação para criar uma camada que invoque uma função Lambda Python.
- Abra o console do AWS Serverless Application Repository.
- No painel de navegação, escolha Available applications (Aplicações disponíveis).
- Selecione Show apps that create custom IAM roles or resource policies (Mostrar aplicações que criam perfis do IAM personalizados ou políticas de recursos).
- No painel de pesquisa, digite python-lambda-layer-creation.
- Escolha a função python-lambda-layer-creation.
- Em python-lambda-layer-creation Applications settings, selecione I acknowledge that this app creates custom IAM roles (Reconheço que esta aplicação cria perfis do IAM pesonalizados) e escolha Deploy (Implantar).
Você pode criar uma camada para invocar a função do Lambda e passar uma lista de dependências incluídas nos metadados da camada.
O exemplo a seguir cria camadas Lambda de Python que contêm requests (versão mais recente), numpy (versão 1.20.1) e bibliotecas de keyring (versão >= 4.1.1). Você pode invocar a função do Lambda com uma carga semelhante à seguinte:
{ "dependencies": { "requests": "latest", "numpy": "== 1.20.1", "keyring": ">= 4.1.1" }, "layer": { "name": "a-sample-python-lambda-layer", "description": "this layer contains requests, numpy and keyring libraries", "compatible-runtimes": ["python3.6","python3.7","python3.8"], "license-info": "MIT" } }
Para testar a camada de função Python do Lambda, observe o ARN. Em seguida, crie uma pilha do AWS CloudFormation usando um modelo YAML semelhante ao seguinte:
AWSTemplateFormatVersion: '2010-09-09' Parameters: Layer: Type: String Description: The ARN of the lambda function layer Resources: LambdaFunction: Type: AWS::Lambda::Function Properties: Code: ZipFile: | import json import requests import numpy as np def handler(event, context): try: ip = requests.get("http://checkip.amazonaws.com/") x = np.array([2,3,1,0]) except requests.RequestException as e: raise e return { "statusCode": 200, "body": json.dumps({ "array[0]": ("%s" % str(x[0])), "location": ip.text.replace("\n", "") }), } Handler: index.handler Runtime: python3.7 MemorySize: 128 Timeout: 30 Layers: - !Ref Layer Role: Fn::GetAtt: - LambdaExecutionRole - Arn LambdaExecutionRole: Description: Allow Lambda to connect function to publish Lambda layers Type: AWS::IAM::Role Properties: AssumeRolePolicyDocument: Statement: - Effect: Allow Principal: Service: - lambda.amazonaws.com Action: sts:AssumeRole Path: / ManagedPolicyArns: - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole # Policies: # - PolicyName: AllowPublishLambdaLayer # PolicyDocument: # Version: '2012-10-17' # Statement: # - Effect: Allow # Action: lambda:PublishLayerVersion # Resource: '*'
Execute a função Python do Lambda. Exemplo de resposta:
{ "statusCode": 200, "body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}" }
Nota: essa função do Lambda usa pip para gerenciar dependências para que as bibliotecas incluídas na camada do Lambda existam no repositório de índice de pacotes do Python.
Para exemplos de bibliotecas Python incluídas na camada definida para as dependências e atributos da camada, consulte pip install no site do pip.
Para obter mais informações, consulte Creating and sharing Lambda layers (Criar e compartilhar camadas do Lambda).
Informações relacionadas
Criar funções do Lambda com Python
Usar camadas com a função do Lambda
Como criar uma camada do Lambda usando um ambiente do Lambda simulado com o Docker?
Conteúdo relevante
- AWS OFICIALAtualizada há 2 anos
- AWS OFICIALAtualizada há 3 anos
- AWS OFICIALAtualizada há 9 meses
- AWS OFICIALAtualizada há um ano