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à.
Utilizzo di Lambda con AWS CLI
È possibile utilizzare AWS Command Line Interface per gestire le funzioni e altre risorse AWS Lambda. 'AWS CLI usa AWS SDK for Python (Boto) per l'interazione con le API Lambda. È possibile utilizzarla per ulteriori informazioni sull'API e applicare tali conoscenze nella creazione di applicazioni che utilizzano Lambda con SDK AWS.
In questo tutorial, è possibile gestire e invocare le funzioni Lambda con AWS CLI. Per ulteriori informazioni, consulta Cos'è AWS CLI? nella Guida per l'utente di AWS Command Line Interface.
Prerequisiti
Questo tutorial presuppone una certa conoscenza delle operazioni di base di Lambda e della console relativa. Se non lo hai già fatto, segui le istruzioni in Creare una funzione Lambda con la console.
Per completare i passaggi seguenti, è necessaria l'AWS Command Line Interface (AWS CLI) versione 2. I comandi e l'output previsto sono elencati in blocchi separati:
aws --version
Verrà visualizzato l'output seguente:
aws-cli/2.13.27 Python/3.11.6 Linux/4.14.328-248.540.amzn2.x86_64 exe/x86_64.amzn.2
Per i comandi lunghi viene utilizzato un carattere di escape (\
) per dividere un comando su più righe.
In Linux e macOS utilizzare la propria shell e il proprio programma di gestione dei pacchetti preferiti.
Nota
Su Windows, alcuni comandi della CLI Bash utilizzati comunemente con Lambda (ad esempio, zip
) non sono supportati dai terminali integrati del sistema operativo. Per ottenere una versione integrata su Windows di Ubuntu e Bash, installa il sottosistema Windows per Linux
Creazione del ruolo di esecuzione
Creare il ruolo di esecuzione che offre l'autorizzazione della funzione per accedere alle risorse AWS. Per creare un ruolo di esecuzione con AWS CLI, utilizzare il comando create-role
.
Nell'esempio seguente occorre specificare la policy di affidabilità in riga. I requisiti per l'escape delle virgolette nella stringa JSON variano in base alla shell.
aws iam create-role --role-name lambda-ex --assume-role-policy-document '{"Version": "2012-10-17","Statement": [{ "Effect": "Allow", "Principal": {"Service": "lambda.amazonaws.com"}, "Action": "sts:AssumeRole"}]}'
È inoltre possibile definire la policy di affidabilità per il ruolo utilizzando un file JSON. Nell'esempio seguente, trust-policy.json
è un file che si trova nella directory attuale. Questa policy di attendibilità consente a Lambda di utilizzare le autorizzazioni del ruolo assegnando al principal del servizio l'autorizzazione lambda.amazonaws.com
per chiamare l'operazione AWS Security Token Service (AWS STS) AssumeRole
.
Esempio trust-policy.json
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }
aws iam create-role --role-name lambda-ex --assume-role-policy-document file://trust-policy.json
Verrà visualizzato l'output seguente:
{ "Role": { "Path": "/", "RoleName": "lambda-ex", "RoleId": "AROAQFOXMPL6TZ6ITKWND", "Arn": "arn:aws:iam::123456789012:role/lambda-ex", "CreateDate": "2020-01-17T23:19:12Z", "AssumeRolePolicyDocument": { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": "lambda.amazonaws.com" }, "Action": "sts:AssumeRole" } ] } } }
Utilizza il comando attach-policy-to-role per aggiungere le autorizzazioni al ruolo. Iniziare aggiungendo la policy gestita AWSLambdaBasicExecutionRole
.
aws iam attach-role-policy --role-name lambda-ex --policy-arn arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
La AWSLambdaBasicExecutionRolepolicy dispone delle autorizzazioni necessarie alla funzione per scrivere i log in Logs. CloudWatch
Creazione della funzione
L'esempio seguente registra i valori delle variabili di ambiente e l'oggetto evento.
Esempio index.js
exports.handler = async function(event, context) { console.log("ENVIRONMENT VARIABLES\n" + JSON.stringify(process.env, null, 2)) console.log("EVENT\n" + JSON.stringify(event, null, 2)) return context.logStreamName }
Per creare la funzione
-
Copiare il codice di esempio in un file denominato
index.js
. -
Crea un pacchetto di implementazione.
zip function.zip index.js
-
Creare una funzione Lambda con il comando
create-function
. Sostituire il testo evidenziato nel ruolo ARN con l'ID dell'account.aws lambda create-function --function-name my-function \ --zip-file fileb://function.zip --handler index.handler --runtime nodejs20.x \ --role arn:aws:iam::
123456789012
:role/lambda-exVerrà visualizzato l'output seguente:
{ "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }
Per ottenere i log per una chiamata dalla riga di comando, utilizza l'opzione --log-type
. La risposta include un campo LogResult
che contiene fino a 4 KB di log con codifica base64 della chiamata.
aws lambda invoke --function-name my-function out --log-type Tail
Verrà visualizzato l'output seguente:
{ "StatusCode": 200, "LogResult": "U1RBUlQgUmVxdWVzdElkOiA4N2QwNDRiOC1mMTU0LTExZTgtOGNkYS0yOTc0YzVlNGZiMjEgVmVyc2lvb...", "ExecutedVersion": "$LATEST" }
Puoi usare l'utilità base64
per decodificare i log.
aws lambda invoke --function-name my-function out --log-type Tail \ --query 'LogResult' --output text | base64 -d
Verrà visualizzato l'output seguente:
START RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Version: $LATEST "AWS_SESSION_TOKEN": "AgoJb3JpZ2luX2VjELj...", "_X_AMZN_TRACE_ID": "Root=1-5d02e5ca-f5792818b6fe8368e5b51d50;Parent=191db58857df8395;Sampled=0"",ask/lib:/opt/lib", END RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 REPORT RequestId: 57f231fb-1730-4395-85cb-4f71bd2b87b8 Duration: 79.67 ms Billed Duration: 80 ms Memory Size: 128 MB Max Memory Used: 73 MB
L'utility base64
è disponibile su Linux, macOS e Ubuntu su Windowsbase64 -D
.
Per ottenere eventi di log completi dalla riga di comando, puoi includere il nome del flusso di log nell'output della funzione, come mostrato nell'esempio precedente. Lo script di esempio seguente richiama una funzione denominata my-function
e scarica gli ultimi 5 eventi di log.
Esempio Script get-logs.sh
Questo esempio richiede che my-function
restituisca un ID del flusso di log.
#!/bin/bash aws lambda invoke --function-name my-function --cli-binary-format raw-in-base64-out --payload '{"key": "value"}' out sed -i'' -e 's/"//g' out sleep 15 aws logs get-log-events --log-group-name /aws/lambda/my-function --log-stream-name $(cat out) --limit 5
Lo script utilizza sed
per rimuovere le virgolette dal file di output e rimane in sospensione per 15 secondi in attesa che i log diventino disponibili. L'output include la risposta di Lambda e l'output del comando get-log-events
.
./get-logs.sh
Verrà visualizzato l'output seguente:
{ "StatusCode": 200, "ExecutedVersion": "$LATEST" } { "events": [ { "timestamp": 1559763003171, "message": "START RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf Version: $LATEST\n", "ingestionTime": 1559763003309 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tENVIRONMENT VARIABLES\r{\r \"AWS_LAMBDA_FUNCTION_VERSION\": \"$LATEST\",\r ...", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003173, "message": "2019-06-05T19:30:03.173Z\t4ce9340a-b765-490f-ad8a-02ab3415e2bf\tINFO\tEVENT\r{\r \"key\": \"value\"\r}\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "END RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\n", "ingestionTime": 1559763018353 }, { "timestamp": 1559763003218, "message": "REPORT RequestId: 4ce9340a-b765-490f-ad8a-02ab3415e2bf\tDuration: 26.73 ms\tBilled Duration: 27 ms \tMemory Size: 128 MB\tMax Memory Used: 75 MB\t\n", "ingestionTime": 1559763018353 } ], "nextForwardToken": "f/34783877304859518393868359594929986069206639495374241795", "nextBackwardToken": "b/34783877303811383369537420289090800615709599058929582080" }
Aggiorna la funzione
Dopo aver creato una funzione, è possibile configurare funzionalità aggiuntive per la funzione, quali trigger, accesso alla rete e accesso al file system. È inoltre possibile modificare le risorse associate alla funzione, ad esempio la memoria e la concorrenza. Queste configurazioni si applicano a funzioni definite come archivi di file .zip e a funzioni definite come immagini di container.
Utilizzate il update-function-configuration
Esempio update-function-configuration comando
aws lambda update-function-configuration \ --function-name my-function \ --memory-size 256
Elenco delle funzioni Lambda nell'account
Esegui il seguente comando list-functions
AWS CLI per recuperare un elenco delle funzioni create.
aws lambda list-functions --max-items 10
Verrà visualizzato l'output seguente:
{ "Functions": [ { "FunctionName": "cli", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "Handler": "index.handler", ... }, { "FunctionName": "random-error", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:random-error", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-role", "Handler": "index.handler", ... }, ... ], "NextToken": "eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=" }
Nella risposta, Lambda restituisce un elenco con un massimo di 10 funzioni. Se sono presenti altre funzioni da recuperare, NextToken
fornisce un contrassegno che è possibile utilizzare nella richiesta list-functions
successiva. Il seguente comando list-functions
AWS CLI è un esempio che mostra il l'utilizzo del parametro --starting-token
.
aws lambda list-functions --max-items 10 --starting-token
eyJNYXJrZXIiOiBudWxsLCAiYm90b190cnVuY2F0ZV9hbW91bnQiOiAxMH0=
Recupera una funzione Lambda
Il comando get-function
della CLI Lambda restituisce i metadati della funzione Lambda e un URL prefirmato da utilizzare per scaricare il pacchetto di implementazione della funzione.
aws lambda get-function --function-name my-function
Verrà visualizzato l'output seguente:
{ "Configuration": { "FunctionName": "my-function", "FunctionArn": "arn:aws:lambda:us-east-2:123456789012:function:my-function", "Runtime": "nodejs20.x", "Role": "arn:aws:iam::123456789012:role/lambda-ex", "CodeSha256": "FpFMvUhayLkOoVBpNuNiIVML/tuGv2iJQ7t0yWVTU8c=", "Version": "$LATEST", "TracingConfig": { "Mode": "PassThrough" }, "RevisionId": "88ebe1e1-bfdf-4dc3-84de-3017268fa1ff", ... }, "Code": { "RepositoryType": "S3", "Location": "https://awslambda-us-east-2-tasks.s3.us-east-2.amazonaws.com/snapshots/123456789012/my-function-4203078a-b7c9-4f35-..." } }
Per ulteriori informazioni, vedere GetFunction.
Eliminazione
Per eliminare la funzione delete-function
, eseguire il comando my-function
riportato di seguito.
aws lambda delete-function --function-name my-function
Eliminare il ruolo IAM creato nella console IAM. Per informazioni sull'eliminazione di un ruolo, consultare la sezione Eliminazione di ruoli o profili delle istanze nella Guida per l'utente di IAM.