Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.
Introduzione ai test con sam local invoke
Utilizzate il AWS Serverless Application Model sam local invoke
sottocomando Command Line Interface (AWS SAMCLI) per avviare una chiamata una tantum di una funzione localmente. AWS Lambda
-
Per un'introduzione a, vedere. AWS SAMCLI Che cos'è il? AWS SAMCLI
-
Per un elenco delle opzioni di
sam local invoke
comando, vederesam local invoke. -
Per un esempio di utilizzo
sam local invoke
durante un tipico flusso di lavoro di sviluppo, vediPassaggio 7: (Facoltativo) Testa l'applicazione localmente.
Per utilizzarlosam local invoke
, AWS SAMCLI installate il completando quanto segue:
Prima dell'usosam local invoke
, si consiglia una conoscenza di base di quanto segue:
Richiama una funzione Lambda localmente
Quando si eseguesam local invoke
, si AWS SAMCLI presuppone che la directory di lavoro corrente sia la directory principale del progetto. AWS SAMCLICercheranno innanzitutto un template.[yaml|yml]
file all'interno di una .aws-sam
sottocartella. Se non viene trovato, AWS SAMCLI cercherà un template.[yaml|yml]
file all'interno della directory di lavoro corrente.
Per richiamare una funzione Lambda localmente
-
Dalla directory principale del progetto, esegui quanto segue:
$
sam local invoke
<options>
-
Se l'applicazione contiene più di una funzione, fornite l'ID logico della funzione. Di seguito è riportato un esempio:
$
sam local invoke
HelloWorldFunction
-
AWS SAMCLICostruisce la tua funzione in un contenitore locale utilizzandoDocker. Quindi richiama la tua funzione e restituisce la risposta della tua funzione.
Di seguito è riportato un esempio:
$
sam local invoke
Invoking app.lambda_handler (python3.9) Local image is out of date and will be updated to the latest runtime. To skip this, pass in the parameter --skip-pull-image Building image.................................................................................................................... Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Version: $LATEST END RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df REPORT RequestId: 64bf7e54-5509-4762-a97c-3d740498d3df Init Duration: 1.09 ms Duration: 608.42 ms Billed Duration: 609 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"hello world\"}"}%
Gestione dei log
Quando si utilizzasam local invoke
, l'output del runtime della funzione Lambda (ad esempio, i log) viene emesso su e il risultato della funzione Lambda viene emesso su. stderr
stdout
Di seguito è riportato un esempio di una funzione Lambda di base:
def handler(event, context): print("some log") # this goes to stderr return "hello world" # this goes to stdout
È possibile salvare queste uscite standard. Di seguito è riportato un esempio:
$
sam local invoke 1> stdout.log
...$
cat stdout.log
"hello world"$
sam local invoke 2> stderr.log
...$
cat stderr.log
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/.../sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Version: $LATEST some log END RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 REPORT RequestId: 0b46e646-3bdf-4b58-8beb-242d00912c46 Init Duration: 0.91 ms Duration: 589.19 ms Billed Duration: 590 ms Memory Size: 128 MB Max Memory Used: 128 MB
È possibile utilizzare questi output standard per automatizzare ulteriormente i processi di sviluppo locale.
Opzioni
Passa eventi personalizzati per richiamare la funzione Lambda
Per passare un evento alla funzione Lambda, utilizzate l'--event
opzione. Di seguito è riportato un esempio:
$
sam local invoke --event
events/s3.json S3JsonLoggerFunction
È possibile creare eventi con il sam local generate-event
sottocomando. Per ulteriori informazioni, consulta Introduzione ai test con sam local generate-event.
Passa le variabili di ambiente quando richiami la funzione Lambda
Se la tua funzione Lambda utilizza variabili di ambiente, puoi passarle durante i test locali con l'--env-vars
opzione. Questo è un ottimo modo per testare una funzione Lambda localmente con i servizi dell'applicazione che sono già distribuiti nel cloud. Di seguito è riportato un esempio:
$
sam local invoke --env-vars
locals.json
Specificate un modello o una funzione
Per specificare un modello AWS SAMCLI a cui fare riferimento, utilizzate l'--template
opzione. AWS SAMCLICaricherà solo quel AWS SAM modello e le risorse a cui punta.
Per richiamare una funzione di un'applicazione o di uno stack annidato, fornisci l'ID logico dell'applicazione o dello stack insieme all'ID logico della funzione. Di seguito è riportato un esempio:
$
sam local invoke
StackLogicalId/FunctionLogicalId
Prova una funzione Lambda dal tuo progetto Terraform
Usa l'--hook-name
opzione per testare localmente le funzioni Lambda dei tuoi Terraform progetti. Per ulteriori informazioni, consulta Utilizzo di AWS SAMCLI with Terraform per il debug e il test locali.
Di seguito è riportato un esempio:
$
sam local invoke --hook-name terraform --beta-features
Best practice
Se la tua applicazione ha una .aws-sam
directory in esecuzionesam build
, assicurati di eseguirla sam build
ogni volta che aggiorni il codice della funzione. Quindi, sam local invoke
esegui per testare localmente il codice funzionale aggiornato.
I test locali sono un'ottima soluzione per lo sviluppo e il test rapidi prima della distribuzione nel cloud. Tuttavia, i test locali non convalidano tutto, come le autorizzazioni tra le risorse nel cloud. Per quanto possibile, testa le tue applicazioni nel cloud. Ti consigliamo di sam syncutilizzarlo per velocizzare i flussi di lavoro di test sul cloud.
Esempi
Genera un evento di esempio Amazon API Gateway e utilizzalo per richiamare una funzione Lambda localmente
Innanzitutto, generiamo un payload di eventi API Gateway HTTP API Gateway e lo salviamo events
nella nostra cartella.
$
sam local generate-event
apigateway http-api-proxy > events/apigateway_event.json
Successivamente, modifichiamo la nostra funzione Lambda per restituire un valore di parametro dall'evento.
def lambda_handler(event, context): print("HelloWorldFunction invoked") return { "statusCode": 200, "body": json.dumps({ "message": event['queryStringParameters']['parameter2'], }), }
Successivamente, invochiamo localmente la nostra funzione Lambda e forniamo il nostro evento personalizzato.
$
sam local invoke --event
Invoking app.lambda_handler (python3.9) Local image is up-to-date Using local image: public.ecr.aws/lambda/python:3.9-rapid-x86_64. Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode": 200, "body": "{\"message\": \"value\"}"}%events/apigateway_event.json
Passa le variabili di ambiente quando richiami una funzione Lambda localmente
Questa applicazione dispone di una funzione Lambda che utilizza una variabile di ambiente per il nome di una tabella Amazon DynamoDB. Di seguito è riportato un esempio della funzione definita nel modello: AWS SAM
AWSTemplateFormatVersion: 2010-09-09 Transform: AWS::Serverless-2016-10-31 ... Resources: getAllItemsFunction: Type: AWS::Serverless::Function Properties: Handler: src/get-all-items.getAllItemsHandler Description: get all items Policies: - DynamoDBReadPolicy: TableName: !Ref SampleTable Environment: Variables: SAMPLE_TABLE: !Ref SampleTable ...
Vogliamo testare localmente la nostra funzione Lambda facendola interagire con la nostra tabella DynamoDB nel cloud. Per fare ciò, creiamo il nostro file delle variabili di ambiente e lo salviamo nella directory principale del nostro progetto come. locals.json
Il valore fornito qui per SAMPLE_TABLE
fa riferimento alla nostra tabella DynamoDB nel cloud.
{ "getAllItemsFunction": { "SAMPLE_TABLE": "dev-demo-SampleTable-1U991234LD5UM98" } }
Successivamente, eseguiamo sam local invoke
e passiamo le nostre variabili di ambiente con l'--env-vars
opzione.
$
sam local invoke
Mounting /Users/...sam-app/.aws-sam/build/HelloWorldFunction as /var/task:ro,delegated, inside runtime container START RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Version: $LATEST some log END RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 REPORT RequestId: 59535d0d-3d9e-493d-8c98-6264e8e961b8 Init Duration: 1.63 ms Duration: 564.07 ms Billed Duration: 565 ms Memory Size: 128 MB Max Memory Used: 128 MB {"statusCode":200,"body":"{}"}getAllItemsFunction
--env-varslocals.json
Ulteriori informazioni
Per un elenco di tutte le sam local invoke
opzioni, consultasam local invoke.
Per una dimostrazione dell'utilizzosam local
, vedi AWS SAM per lo sviluppo locale. Test Cloud AWS delle risorse provenienti da ambienti di sviluppo locali