Applicazione di esempio di funzione vuota per AWS Lambda - 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à.

Applicazione di esempio di funzione vuota per AWS Lambda

L'applicazione di esempio di una funzione vuota dimostra le operazioni comuni di Lambda con una funzione che invoca l'API Lambda. Mostra l'uso della registrazione, delle variabili di ambiente, del AWS X-Ray tracciamento, dei livelli, dei test unitari e dell' AWS SDK. Esplora questa applicazione per imparare a creare funzioni Lambda nel tuo linguaggio di programmazione o usala come punto di partenza per i tuoi progetti.

Le varianti di questa applicazione di esempio sono disponibili per i seguenti linguaggi:

Varianti

Gli esempi in questo argomento evidenziano il codice della versione Node.js, ma i dettagli sono generalmente applicabili a tutte le varianti.

È possibile distribuire il campione in pochi minuti con and. AWS CLI AWS CloudFormation Segui le istruzioni contenute nel file README per scaricarlo, configurarlo e distribuirlo nel tuo account.

Architettura e codice del gestore

L'applicazione di esempio è composta da codice di funzione, un AWS CloudFormation modello e risorse di supporto. Quando si distribuisce l'esempio, si utilizzano i seguenti AWS servizi:

  • AWS Lambda — Esegue il codice della funzione, invia i log ai CloudWatch registri e invia i dati di traccia a X-Ray. La funzione richiama anche l'API Lambda per ottenere dettagli sulle quote e sull'utilizzo dell'account nella regione corrente.

  • AWS X-Ray – Raccoglie i dati di tracciamento, indicizza i tracciamenti per la ricerca e genera una mappa del servizio.

  • Amazon CloudWatch: archivia log e metriche.

  • AWS Identity and Access Management (IAM) — Concede l'autorizzazione.

  • Amazon Simple Storage Service (Amazon S3) – Memorizza il pacchetto di implementazione della funzione durante l'implementazione.

  • AWS CloudFormation – Crea le risorse dell'applicazione e distribuisce il codice della funzione.

Per ogni servizio sono previsti costi standard. Per ulteriori informazioni, consulta la sezione Prezzi di AWS.

Il codice della funzione mostra un flusso di lavoro di base per l'elaborazione di un evento. Il gestore accetta un evento Amazon Simple Queue Service (Amazon SQS) come input e itera attraverso i record che contiene, aggiungendo al log il contenuto di ogni messaggio. Aggiunge ai registri il contenuto dell'evento, l'oggetto contesto e le variabili di ambiente. Quindi effettua una chiamata con l' AWS SDK e restituisce la risposta al runtime Lambda.

Esempio blank-nodejs/function/index.js – Codice del gestore
// Handler exports.handler = async function(event, context) { event.Records.forEach(record => { console.log(record.body); }); console.log('## ENVIRONMENT VARIABLES: ' + serialize(process.env)); console.log('## CONTEXT: ' + serialize(context)); console.log('## EVENT: ' + serialize(event)); return getAccountSettings(); }; // Use SDK client var getAccountSettings = function() { return lambda.send(new GetAccountSettingsCommand()); }; var serialize = function(object) { return JSON.stringify(object, null, 2); };

L'applicazione di esempio non include una coda Amazon SQS per l'invio di eventi, ma utilizza un evento da Amazon SQS (event.json) per illustrare come vengono elaborati gli eventi. Per aggiungere una coda Amazon SQS all'applicazione, consulta Utilizzo di Lambda con Amazon SQS.

Automazione della distribuzione con e AWS CloudFormationAWS CLI

Le risorse dell'applicazione di esempio sono definite in un AWS CloudFormation modello e distribuite con. AWS CLI Il progetto include semplici script di shell che automatizzano il processo di configurazione, distribuzione, invocazione e terminazione dell'applicazione.

Il modello di applicazione utilizza un tipo di risorsa AWS Serverless Application Model (AWS SAM) per definire il modello. AWS SAM semplifica la creazione di modelli per applicazioni serverless automatizzando la definizione di ruoli di esecuzione, API e altre risorse.

Il modello definisce le risorse nello stackdell'applicazione. Ciò include la funzione, il suo ruolo di esecuzione e un livello Lambda che fornisce le dipendenze dalle librerie della funzione. Lo stack non include il bucket AWS CLI utilizzato durante la distribuzione o il gruppo di log Logs. CloudWatch

Esempio blank-nodejs/template.yml – Risorse serverless
AWSTemplateFormatVersion: '2010-09-09' Transform: 'AWS::Serverless-2016-10-31' Description: An AWS Lambda application that calls the Lambda API. Resources: function: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: function/. Description: Call the AWS Lambda API Timeout: 10 # Function's execution role Policies: - AWSLambdaBasicExecutionRole - AWSLambda_ReadOnlyAccess - AWSXrayWriteOnlyAccess Tracing: Active Layers: - !Ref libs libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. ContentUri: lib/. CompatibleRuntimes: - nodejs20.x

Quando distribuisci l'applicazione, AWS CloudFormation applica la AWS SAM trasformazione al modello per generare un AWS CloudFormation modello con tipi standard come e. AWS::Lambda::Function AWS::IAM::Role

Esempio Modello elaborato
{ "AWSTemplateFormatVersion": "2010-09-09", "Description": "An AWS Lambda application that calls the Lambda API.", "Resources": { "function": { "Type": "AWS::Lambda::Function", "Properties": { "Layers": [ { "Ref": "libs32xmpl61b2" } ], "TracingConfig": { "Mode": "Active" }, "Code": { "S3Bucket": "lambda-artifacts-6b000xmpl1e9bf2a", "S3Key": "3d3axmpl473d249d039d2d7a37512db3" }, "Description": "Call the AWS Lambda API", "Tags": [ { "Value": "SAM", "Key": "lambda:createdBy" } ],

In questo esempio, la proprietà Code specifica un oggetto in un bucket Amazon S3. Questo corrisponde al percorso locale nella proprietà CodeUri nel modello di progetto:

CodeUri: function/.

Per caricare i file di progetto su Amazon S3, lo script di implementazione utilizza i comandi nella AWS CLI. Il comando cloudformation package pre-elabora il modello, carica gli artefatti e sostituisce i percorsi locali con le posizioni degli oggetti su Amazon S3. Il cloudformation deploy comando distribuisce il modello elaborato con un set di AWS CloudFormation modifiche.

Esempio blank-nodejs/3-deploy.sh – Pacchetto e implementazione
#!/bin/bash set -eo pipefail ARTIFACT_BUCKET=$(cat bucket-name.txt) aws cloudformation package --template-file template.yml --s3-bucket $ARTIFACT_BUCKET --output-template-file out.yml aws cloudformation deploy --template-file out.yml --stack-name blank-nodejs --capabilities CAPABILITY_NAMED_IAM

La prima volta che si esegue questo script, viene creato uno AWS CloudFormation stack denominato. blank-nodejs Se si apportano modifiche al codice della funzione o al modello, è possibile eseguirlo di nuovo per aggiornare lo stack.

Lo script di pulizia (blank-nodejs/5-cleanup.sh) elimina lo stack e, facoltativamente, elimina il bucket di distribuzione e i log delle funzioni.

Strumentazione con AWS X-Ray

La funzione di esempio è configurata per il tracciamento AWS X-Ray. Con la modalità di tracciamento impostata su attiva, Lambda registra le informazioni temporali per un sottoinsieme di invocazioni e le invia a X-Ray. X-Ray elabora i dati per generare una mappa servizio che mostra un nodo client e due nodi di servizio.

Il primo nodo di servizio (AWS::Lambda) rappresenta il servizio Lambda, che convalida la richiesta di invocazione e la invia alla funzione. Il secondo nodo, AWS::Lambda::Function, rappresenta la funzione stessa.

Per registrare ulteriori dettagli, la funzione di esempio utilizza l'SDK X-Ray. Con modifiche minime al codice della funzione, l'SDK X-Ray registra i dettagli sulle chiamate effettuate con l' AWS SDK ai servizi. AWS

Esempio blank-nodejs/function/index.js – Strumentazione
const AWSXRay = require('aws-xray-sdk-core'); const { LambdaClient, GetAccountSettingsCommand } = require('@aws-sdk/client-lambda'); // Create client outside of handler to reuse const lambda = AWSXRay.captureAWSv3Client(new LambdaClient());

La strumentazione del client AWS SDK aggiunge un nodo aggiuntivo alla mappa dei servizi e ulteriori dettagli nelle tracce. In questo esempio, la mappa del servizio mostra la funzione di esempio che richiama l'API Lambda per ottenere dettagli sull'archiviazione e sull'utilizzo della concorrenza nella regione corrente.

Il tracciamento mostra i dettagli temporali della chiamata, con sottosegmenti per l'inizializzazione della funzione, l'invocazione e l'overhead. Il sottosegmento di invocazione ha un sottosegmento per la chiamata SDK all' AWS operazione API. GetAccountSettings

Puoi includere l'SDK X-Ray e altre librerie nel pacchetto di implementazione della funzione o distribuirle separatamente in un livello Lambda. Per Node.js, Ruby e Python, il runtime Lambda include l'SDK AWS nell'ambiente di esecuzione.

Gestione delle dipendenze con i livelli

È possibile installare le librerie localmente e includerle nel pacchetto di distribuzione caricato su Lambda, ma ciò ha i suoi svantaggi. Dimensioni dei file maggiori aumentano i tempi di distribuzione e possono impedire di testare le modifiche al codice della funzione nella console di Lambda. Per mantenere il pacchetto di distribuzione di dimensioni ridotte ed evitare di caricare dipendenze non modificate, l'app di esempio crea un ivello Lambda e lo associa alla funzione.

Esempio blank-nodejs/template.yml – Livello delle dipendenze
Resources: function: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs20.x CodeUri: function/. Description: Call the AWS Lambda API Timeout: 10 # Function's execution role Policies: - AWSLambdaBasicExecutionRole - AWSLambda_ReadOnlyAccess - AWSXrayWriteOnlyAccess Tracing: Active Layers: - !Ref libs libs: Type: AWS::Serverless::LayerVersion Properties: LayerName: blank-nodejs-lib Description: Dependencies for the blank sample app. ContentUri: lib/. CompatibleRuntimes: - nodejs20.x

Lo script 2-build-layer.sh installa le dipendenze della funzione con npm e le inserisce in una cartella con la struttura richiesta dal runtime di Lambda.

Esempio 2-build-layer.sh – Preparazione del livello
#!/bin/bash set -eo pipefail mkdir -p lib/nodejs rm -rf node_modules lib/nodejs/node_modules npm install --production mv node_modules lib/nodejs/

La prima volta che si distribuisce l'applicazione di esempio, AWS CLI impacchetta il layer separatamente dal codice della funzione e li distribuisce entrambi. Nelle distribuzioni successive, l'archivio del layer viene caricato solo se i contenuti della cartella lib sono stati modificati.