Utilizzo di Lambda con AWS CLI - AWS Lambda

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. I comandi della CLI di esempio in questa guida utilizzano la formattazione Linux. Se si utilizza la CLI di Windows, i comandi che includono documenti JSON in linea dovranno essere riformattati.

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
  1. Copiare il codice di esempio in un file denominato index.js.

  2. Crea un pacchetto di implementazione.

    zip function.zip index.js
  3. 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-ex

    Verrà 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 Windows. Per macOS, il comando è base64 -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-configurationcomando per configurare le funzioni. L'esempio seguente imposta la memoria delle funzioni su 256 MB.

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.