Come posso creare un livello per la mia funzione Lambda Python?
Ultimo aggiornamento: 07/02/2023
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
Questo articolo è stato utile?
Hai bisogno della fattura o di supporto tecnico?