Como posso criar uma camada para minha função Lambda Python?

3 minuto de leitura
0

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.

  1. Abra o console do AWS Serverless Application Repository.
  2. No painel de navegação, escolha Available applications (Aplicações disponíveis).
  3. 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).
  4. No painel de pesquisa, digite python-lambda-layer-creation.
  5. Escolha a função python-lambda-layer-creation.
  6. 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?

Como integrar a versão mais recente do AWS SDK para JavaScript em minha função do Lambda Node.js usando camadas?

AWS OFICIAL
AWS OFICIALAtualizada há um ano