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à.
Usa le funzioni Lambda come obiettivi di un Application Load Balancer
Puoi registrare le tue funzioni Lambda come destinazioni e configurare una regola del listener per inoltrare le richieste al gruppo di destinazioni della funzione Lambda. Quando inoltra la richiesta a un gruppo di destinazioni con una funzione Lambda come destinazione, il sistema di bilanciamento del carico richiama la funzione Lambda e trasferisce i contenuti della richiesta alla funzione Lambda, nel formato JSON.
Il load balancer richiama direttamente la funzione Lambda invece di utilizzare una connessione di rete. Pertanto, non esistono requisiti per le regole in uscita dei gruppi di sicurezza Network Load Balancer.
Limiti
-
La funzione Lambda e il gruppo di destinazioni devono trovarsi nello stesso account e nella stessa regione.
-
Le dimensioni massime del corpo della richiesta che puoi inviare a una funzione Lambda sono di 1 MB. Per i limiti correlati delle dimensioni, consulta HTTP header limits.
-
Le dimensioni massime dell'oggetto JSON di risposta che può inviare la funzione Lambda sono di 1 MB.
-
WebSockets non sono supportati. Le richieste di aggiornamento vengono rifiutate con un codice HTTP 400.
-
Le zone locali non sono supportate.
-
Automatic Target Weights (ATW) non è supportato.
Per una demo, consulta Lambda target on Application Load Balancer
Preparazione della funzione Lambda
Le seguenti raccomandazioni si applicano se utilizzi la funzione Lambda con un Application Load Balancer.
Autorizzazioni a richiamare la funzione Lambda
Se crei il gruppo di destinazioni e registri la funzione Lambda tramite la AWS Management Console, questa aggiunge automaticamente le autorizzazioni richieste alla tua policy delle funzioni Lambda. Altrimenti, dopo aver creato il gruppo target e registrato la funzione utilizzando AWS CLI, è necessario utilizzare il comando add-permission per concedere a Elastic Load Balancing l'autorizzazione a richiamare la funzione Lambda. Consigliamo di includere le chiavi di condizione aws:SourceAccount
e aws:SourceArn
per limitare l'invocazione della funzione al gruppo di destinazioni specificato. Per ulteriori informazioni, consulta Problema del "confused deputy" nella Guida per l'utente IAM.
aws lambda add-permission \ --function-name
lambda-function-arn-with-alias-name
\ --statement-idelb1
\ --principal elasticloadbalancing.amazonaws.com \ --action lambda:InvokeFunction \ --source-arntarget-group-arn
\ --source-accounttarget-group-account-id
Controllo delle versioni della funzione Lambda
Puoi registrare una funzione Lambda per gruppo di destinazioni. Per accertarti di poter cambiare la funzione Lambda e che il sistema di bilanciamento del carico richiami sempre la versione corrente della funzione Lambda, crea un alias della funzione e includilo nell'ARN della funzione al momento della registrazione della funzione con il sistema di bilanciamento del carico. Per ulteriori informazioni, consulta gli alias delle AWS Lambda funzioni nella Guida per gli sviluppatori.AWS Lambda
Timeout della funzione.
Il sistema di bilanciamento del carico attende finché la funzione Lambda non risponde o scade. Ti consigliamo di configurare il timeout della funzione Lambda in base al runtime previsto. Per informazioni sul valore di timeout predefinito e su come modificarlo, consulta Configurare il timeout della funzione Lambda. Per informazioni sul valore di timeout massimo che puoi configurare, vedi quote.AWS Lambda
Creazione di un gruppo di destinazioni per la funzione Lambda
Creare un gruppo target, che viene utilizzato nell'instradamento delle richieste. Se il contenuto della richiesta corrisponde a una regola del listener con un'operazione per l'inoltro al gruppo di destinazioni, il sistema di bilanciamento del carico richiama la funzione Lambda registrata.
Ricezione di eventi dal sistema di bilanciamento del carico
Il sistema di bilanciamento del carico supporta l'invocazione Lambda per le richieste sia da HTTP che HTTPS. Il sistema di bilanciamento del carico invia un evento in formato JSON. Il sistema di bilanciamento del carico aggiunge le seguenti intestazioni a ogni richiesta: X-Amzn-Trace-Id
, X-Forwarded-For
, X-Forwarded-Port
e X-Forwarded-Proto
.
Se è presente l'intestazione content-encoding
, il sistema di bilanciamento del carico Base64 codifica il corpo e imposta isBase64Encoded
su true
.
Se l'intestazione content-encoding
non è presente, la codifica Base64 dipende dal tipo di contenuto. Per i seguenti tipi, il load balancer invia il corpo così com'è e lo imposta sufalse
: isBase64Encoded
text/*,. application/json, application/javascript, and application/xml In caso contrario, il sistema di bilanciamento del carico Base64 codifica il corpo e imposta isBase64Encoded
su true
.
Di seguito è riportato un esempio di evento.
{
"requestContext": {
"elb": {
"targetGroupArn": "arn:aws:elasticloadbalancing:region
:123456789012
:targetgroup/my-target-group
/6d0ecf831eec9f09
"
}
},
"httpMethod": "GET",
"path": "/",
"queryStringParameters": {parameters
},
"headers": {
"accept": "text/html,application/xhtml+xml",
"accept-language": "en-US
,en;q=0.8",
"content-type": "text/plain",
"cookie": "cookies
",
"host": "lambda-846800462-us-east-2.elb.amazonaws.com
",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_6)
",
"x-amzn-trace-id": "Root=1-5bdb40ca-556d8b0c50dc66f0511bf520
",
"x-forwarded-for": "72.21.198.66
",
"x-forwarded-port": "443
",
"x-forwarded-proto": "https
"
},
"isBase64Encoded": false
,
"body": "request_body
"
}
Risposta al sistema di bilanciamento del carico
La risposta dalla funzione Lambda deve includere lo stato della codifica Base64, il codice di stato e le intestazioni. Puoi omettere il corpo della risposta.
Per includere un contenuto binario nel corpo della risposta, devi sottoporre a codifica Base64 il contenuto e impostare isBase64Encoded
su true
. Il sistema di bilanciamento del carico decodifica il contenuto per recuperare la parte binaria e inviarla al client nel corpo della risposta HTTP.
Il sistema di bilanciamento del carico non rispetta le hop-by-hop intestazioni, come o. Connection
Transfer-Encoding
Puoi omettere l'intestazione Content-Length
in quanto il sistema di bilanciamento del carico la calcola prima di inviare le risposte ai client.
Di seguito è riportata una risposta di esempio da una funzione Lambda basata su nodejs.
{ "isBase64Encoded":
false
, "statusCode":200
, "statusDescription": "200 OK
", "headers": { "Set-cookie": "cookies
", "Content-Type": "application/json" }, "body": "Hello from Lambda (optional)" }
Per i modelli di funzioni Lambda che funzionano con Application Load Balancer, vedi application-load-balancer-serverless -app su github.
-
Obiettivo Lambda ALB - S3 UploadFileto
-
Obiettivo ALB-Lambda- BinaryResponse
-
ALB-Lambda-Target IP WhatisMy
Intestazioni con più valori
Se le richieste provenienti da un client o le risposte da una funzione Lambda contengono intestazioni con più valori o la stessa intestazione più volte oppure parametri di query con più valori per la stessa chiave, puoi abilitare il supporto della sintassi delle intestazioni con più valori. Dopo aver abilitato le intestazioni con più valori, le intestazioni e i parametri di query scambiati tra il sistema di bilanciamento del carico e la funzione Lambda utilizzano array anziché stringhe. Se non abiliti la sintassi delle intestazioni con più valori e un intestazione o un parametro di query dispongono di più valori, il sistema di bilanciamento del carico utilizza l'ultimo valore ricevuto.
Indice
Richieste con intestazioni con più valori
I nomi dei campi utilizzati per le intestazioni e i parametri delle stringhe di query sono diversi a seconda se sono abilitate le intestazioni multivalore per il gruppo target.
La seguente richiesta di esempio ha due parametri di query con la stessa chiave:
http://www.example.com?&myKey=val1&myKey=val2
Con il formato predefinito, il sistema di bilanciamento del carico utilizza l'ultimo valore inviato dal client e invia un evento che include parametri di stringhe di query tramite queryStringParameters
. Per esempio:
"queryStringParameters": { "myKey": "val2"},
Con le intestazioni con più valori, il sistema di bilanciamento del carico utilizza entrambi i valori della chiave inviati dal client e invia un evento che include parametri di stringhe di query tramite multiValueQueryStringParameters
. Per esempio:
"multiValueQueryStringParameters": { "myKey": ["val1", "val2"] },
Analogamente, supponiamo che il client invii una richiesta con due cookie nell'intestazione:
"cookie": "name1=value1",
"cookie": "name2=value2",
Con il formato predefinito, il sistema di bilanciamento del carico utilizza l'ultimo cookie inviato dal client e invia un evento che include intestazioni tramite headers
. Per esempio:
"headers": {
"cookie": "name2=value2",
...
},
Con le intestazioni con più valori, il sistema di bilanciamento del carico utilizza entrambi i cookie inviati dal client e invia un evento che include le intestazioni tramite multiValueHeaders
. Per esempio:
"multiValueHeaders": {
"cookie": ["name1=value1", "name2=value2"],
...
},
Se i parametri di query sono codificati in formato URL, il sistema di bilanciamento del carico non li decodifica. Devi decodificarli nella funzione Lambda.
Risposte con intestazioni con più valori
I nomi dei campi utilizzati per le intestazioni sono diversi a seconda se sono abilitate le intestazioni multivalore per il gruppo target. Devi utilizzare multiValueHeaders
se hai abilitato le intestazioni multivalore e headers
in caso contrario.
Con il formato predefinito, puoi specificare un singolo cookie:
{
"headers": {
"Set-cookie": "cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly",
"Content-Type": "application/json"
},
}
Con le intestazioni con più valori, è necessario specificare più cookie come segue:
{
"multiValueHeaders": {
"Set-cookie": ["cookie-name=cookie-value;Domain=myweb.com;Secure;HttpOnly","cookie-name=cookie-value;Expires=May 8, 2019"],
"Content-Type": ["application/json"]
},
}
Il sistema di bilanciamento del carico potrebbe inviare le intestazioni al client in un ordine diverso rispetto a quello specificato nel payload della risposta di Lambda. Pertanto, non fare affidamento sul fatto che le intestazioni verranno restituite in un ordine specifico.
Abilitazione delle intestazioni con più valori
Puoi abilitare o disabilitare le intestazioni con più valori per un gruppo di destinazioni con tipo lambda
.
Abilitazione dei controlli dell'integrità
Per impostazione predefinita, i controlli dello stato sono disabilitati per i gruppi di destinazioni di tipo lambda
. È possibile abilitare i controlli dell'integrità per implementare il failover DNS con Amazon Route 53. La funzione Lambda è in grado di verificare l'integrità di un servizio downstream prima di rispondere alla richiesta di controllo dello stato. Se la risposta dalla funzione Lambda indica un errore del controllo dell'integrità, l'errore viene trasmesso a Route 53. Puoi configurare Route 53 affinché esegua il failover sullo stack di un'applicazione di backup.
Ti verrà addebitato il costo per i controlli dello stato, allo stesso modo che per qualsiasi invocazione della funzione Lambda.
Di seguito è riportato il formato dell'evento di controllo dello stato inviato alla funzione Lambda. Per controllare se un evento è un evento di controllo dello stato, controlla il valore del campo utente-agente. L'agente utente per i controlli dello stato è ELB-HealthChecker/2.0
.
{
"requestContext": {
"elb": {
"targetGroupArn": "arn:aws:elasticloadbalancing:region
:123456789012
:targetgroup/my-target-group
/6d0ecf831eec9f09
"
}
},
"httpMethod": "GET",
"path": "/",
"queryStringParameters": {},
"headers": {
"user-agent": "ELB-HealthChecker/2.0"
},
"body": "",
"isBase64Encoded": false
}
Registra la funzione Lambda
È possibile registrare una singola funzione Lambda in ogni gruppo di destinazioni. Per sostituire una funzione Lambda, ti consigliamo di creare un nuovo gruppo target, registrare la nuova funzione con il nuovo gruppo target e aggiornare le regole del listener per utilizzare il nuovo gruppo target.
Annullamento della registrazione della funzione Lambda
Se non hai più bisogno di inviare traffico alla funzione Lambda, puoi annullare la relativa registrazione. Dopo avere annullato la registrazione di una funzione Lambda, le richieste in transito hanno esito negativo con 5XX errori HTTP.
Per sostituire una funzione Lambda, ti consigliamo di creare un nuovo gruppo target, registrare la nuova funzione con il nuovo gruppo target e aggiornare le regole del listener per utilizzare il nuovo gruppo target.