Come posso creare un livello per la mia funzione Lambda Python?

3 minuti di lettura
0

Voglio creare un livello per la mia funzione AWS Lambda Python.

Risoluzione

Le seguenti istruzioni distribuiscono un'applicazione per creare un livello per richiamare una funzione Python Lambda.

  1. Apri la console Repository dell'applicazione serverless AWS.
  2. Nel riquadro di navigazione, scegli Applicazioni disponibili.
  3. Seleziona Mostra app che creano ruoli IAM o politiche di risorse personalizzate.
  4. Nel riquadro di ricerca, inserisci python-lambda-layer-creation.
  5. Scegli la funzione python-lambda-layer-creation.
  6. Dalle impostazioni delle applicazioni python-lambda-layer-creation, seleziona Riconosco che questa app crea ruoli IAM personalizzati, quindi scegli Distribuisci.

Puoi creare un livello per richiamare la tua funzione Lambda e passare un elenco di dipendenze incluse nei metadati del livello.

L'esempio seguente crea livelli Python Lambda contenenti le librerie request (ultima versione), numpy (versione 1.20.1) e keyring (versione >= 4.1.1). Puoi richiamare la funzione Lambda con un payload simile al seguente:

{
  "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" 
  } 
}

Per testare il livello funzionale di Lambda Python, annota l'ARN. Quindi, crea uno stack AWS CloudFormation utilizzando un modello YAML simile al seguente:

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: '*'

Esegui la funzione Lambda Python. Risposta di esempio:

{
  "statusCode": 200,
  "body": "{\"array[0]\": \"2\", \"location\": \"[your-outbound-ip-address]\"}"
}

Nota: questa funzione Lambda utilizza pip per gestire le dipendenze in modo che le librerie incluse nel livello Lambda esistano nel repository degli indici dei pacchetti Python.

Per esempi di librerie Python incluse nel livello definito per le dipendenze e gli attributi del livello, consulta pip install sul sito web pip.

Per ulteriori informazioni, consulta Creazione e condivisione di livelli Lambda.


Informazioni correlate

Sviluppa le funzioni Lambda con Python

Utilizzo dei livelli con la funzione Lambda

Come faccio a creare un livello Lambda usando un ambiente Lambda simulato con Docker?

Come faccio a integrare la versione più recente di AWS SDK per JavaScript nella mia funzione Lambda Node.js usando i livelli?

AWS UFFICIALE
AWS UFFICIALEAggiornata un anno fa