Tutorial: creazione di una funzione Lambda di streaming delle risposte con un URL della funzione
In questo tutorial viene creata una funzione Lambda definita come archivio file .zip con un endpoint funzione URL che restituisce un flusso di risposte. Per ulteriori informazioni sulla configurazione degli URL della funzione, consulta URL della funzione.
Prerequisiti
Questo tutorial presuppone una certa conoscenza delle operazioni di base di Lambda e della console relativa. Se non lo si è già fatto, seguire le istruzioni riportate in Creare una funzione Lambda con la console per creare la prima funzione Lambda.
Per completare i passaggi seguenti, è necessaria la 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 di un ruolo di esecuzione
Creare il ruolo di esecuzione che offre l'autorizzazione alla funzione Lambda per accedere alle risorse AWS.
Creazione di un ruolo di esecuzione
-
Aprire la pagina Roles (Ruoli)
della console IAM AWS Identity and Access Management. -
Scegliere Create role (Crea ruolo).
-
Creare un ruolo con le seguenti proprietà:
-
Tipo di entità affidabile: servizio di AWS
-
Caso d'uso: Lambda
-
Autorizzazioni: AWSLambdaBasicExecutionRole
-
Nome ruolo –
response-streaming-role
-
La policy AWSLambdaBasicExecutionRole include le autorizzazioni necessarie alla funzione per scrivere i log in Amazon CloudWatch Logs. Una volta creato il ruolo, prendi nota del relativo nome della risorsa Amazon (ARN). Questo valore servirà nella fase successiva.
Creazione di una funzione di streaming delle risposte (AWS CLI)
Crea una funzione Lambda di streaming delle risposte con un endpoint URL della funzione utilizzando l'AWS Command Line Interface (AWS CLI).
Creazione di una funzione in grado di trasmettere le risposte
-
Copiare il codice di esempio seguente in un file denominato
index.js. Questa funzione trasmette tre risposte, separate da 1 secondo.exports.handler = awslambda.streamifyResponse( async (event, responseStream, _context) => { // Metadata is a JSON serializable JS object. Its shape is not defined here. const metadata = { statusCode: 200, headers: { "Content-Type": "application/json", "CustomHeader": "outerspace" } }; // Assign to the responseStream parameter to prevent accidental reuse of the non-wrapped stream. responseStream = awslambda.HttpResponseStream.from(responseStream, metadata); responseStream.write("Streaming with Helper \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("Hello 0 \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("Hello 1 \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.write("Hello 2 \n"); await new Promise(r => setTimeout(r, 1000)); responseStream.end(); await responseStream.finished(); } ); -
Crea un pacchetto di implementazione.
zip function.zip index.js -
Creare una funzione Lambda con il comando
create-function. Sostituisci il valore di--rolecon l'ARN del ruolo del passaggio precedente. Questo comando imposta il timeout della funzione su 10 secondi, il che consente alla funzione di trasmettere tre risposte.aws lambda create-function \ --function-namemy-streaming-function\ --runtime nodejs22.x \ --zip-file fileb://function.zip \ --handler index.handler \ --timeout 10 \ --rolearn:aws:iam::123456789012:role/response-streaming-role
Creazione di un URL della funzione
-
Aggiungi una policy basata sulle risorse alla funzione che concede
lambda:InvokeFunctionUrlle autorizzazioni.lambda:InvokeFunctionOgni istruzione deve essere aggiunta in un comando separato. Sostituisci il valore di--principalcon l'ID Account AWS.aws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunctionUrl \ --statement-id UrlPolicyInvokeURL \ --principal123456789012\ --function-url-auth-type AWS_IAMaws lambda add-permission \ --function-name my-streaming-function \ --action lambda:InvokeFunction \ --statement-id UrlPolicyInvokeFunction \ --principal123456789012 -
Crea un endpoint URL per la funzione con il comando
create-function-url-config.aws lambda create-function-url-config \ --function-name my-streaming-function \ --auth-type AWS_IAM \ --invoke-mode RESPONSE_STREAMNota
Se viene visualizzato un errore in merito
--invoke-mode, potrebbe essere necessario eseguire l'aggiornamento a una versione più recente di AWS CLI.
Verifica l'endpoint URL della funzione
Testa l'integrazione richiamando la tua funzione. Puoi aprire l'URL della funzione in un browser oppure puoi usare curl.
curl --request GET "https://abcdefghijklm7nop7qrs740abcd.lambda-url.us-east-1.on.aws/" --user "AKIAIOSFODNN7EXAMPLE" --aws-sigv4 "aws:amz:us-east-1:lambda" --no-buffer
La nostra funzione URL utilizza il tipo di autenticazione IAM_AUTH. Ciò implica che devi firmare le richieste sia con la chiave di accesso che con la chiave segreta AWS. Nel comando precedente, sostituisci AKIAIOSFODNN7EXAMPLE con l'ID della chiave di accesso AWS. Inserisci la chiave segreta AWS quando viene chiesta. Se non disponi di una chiave segreta AWS, puoi utilizzare credenziali AWS temporanee.
Dovresti ottenere una risposta simile a questa:
Streaming with Helper Hello 0 Hello 1 Hello 2
Pulizia delle risorse
Ora è possibile eliminare le risorse create per questo tutorial, a meno che non si voglia conservarle. Eliminando le risorse AWS che non si utilizzano più, è possibile evitare addebiti superflui sul proprio account Account AWS.
Come eliminare il ruolo di esecuzione
-
Aprire la pagina Ruoli
della console IAM. -
Selezionare il ruolo di esecuzione creato.
-
Scegliere Elimina.
-
Inserisci il nome del ruolo nel campo di immissione testo e seleziona Delete (Elimina).
Per eliminare la funzione Lambda
-
Aprire la pagina Functions (Funzioni)
della console Lambda. -
Selezionare la funzione creata.
-
Scegliere Operazioni, Elimina.
-
Digita
confirmnel campo di immissione testo e scegli Delete (Elimina).