Come posso creare un livello per la mia funzione Lambda Python?
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.
- Apri la console Repository dell'applicazione serverless AWS.
- Nel riquadro di navigazione, scegli Applicazioni disponibili.
- Seleziona Mostra app che creano ruoli IAM o politiche di risorse personalizzate.
- Nel riquadro di ricerca, inserisci python-lambda-layer-creation.
- Scegli la funzione python-lambda-layer-creation.
- 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?
Contenuto pertinente
- AWS UFFICIALEAggiornata un anno fa
- AWS UFFICIALEAggiornata 3 anni fa
- Come posso configurare un filtro di sottoscrizione CloudWatch per richiamare la mia funzione Lambda?AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata un anno fa