Usa le funzioni Lambda come obiettivi di un Application Load Balancer - Sistema di bilanciamento del carico elastico

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 il load balancer inoltra la richiesta a un gruppo target con una funzione Lambda come destinazione, richiama la funzione Lambda e passa il contenuto della richiesta alla funzione Lambda, in formato. JSON

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 di dimensione correlati, vedi Header limits. HTTP

  • La dimensione massima della risposta JSON che la funzione Lambda può inviare è 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 Il problema del deputato confuso nella Guida per l'utente, IAM

aws lambda add-permission \ --function-name lambda-function-arn-with-alias-name \ --statement-id elb1 \ --principal elasticloadbalancing.amazonaws.com \ --action lambda:InvokeFunction \ --source-arn target-group-arn \ --source-account target-group-account-id
Controllo delle versioni della funzione Lambda

Puoi registrare una funzione Lambda per gruppo di destinazioni. Per assicurarti di poter modificare la funzione Lambda e che il sistema di bilanciamento del carico richiami sempre la versione corrente della funzione Lambda, crea un alias di funzione e includi l'alias nella funzione ARN quando registri la funzione Lambda con il bilanciamento del carico. Per ulteriori informazioni, consulta Controllo delle versioni e alias delle funzioni AWS Lambda e Trasferimento del traffico mediante gli alias nella Guida per gli sviluppatori di 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 Configurazione di base della funzione AWS Lambda. Per informazioni sul valore di timeout massimo che è possibile configurare, consulta Quote di 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.

Per creare un gruppo target e registrare la funzione Lambda utilizzando la console
  1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, in Load balancing (Bilanciamento del carico) scegli Target Groups (Gruppi di destinazione).

  3. Scegliere Crea gruppo target.

  4. Per Seleziona destinazione, scegli Funzione Lambda.

  5. Per Nome gruppo di destinazioni digitare un nome per il gruppo di destinazioni.

  6. (Facoltativo) Per abilitare i controlli dell'integrità, scegli Controllo dell'integrità, Abilita.

  7. (Facoltativo) Aggiungere uno o più tag come illustrato di seguito:

    1. Espandere la sezione Tag.

    2. Selezionare Aggiungi tag.

    3. Immetti una chiave e un valore per il tag.

  8. Scegli Next (Successivo).

  9. Specificare una singola funzione Lambda oppure saltare questo passaggio e specificare una funzione Lambda in seguito.

  10. Scegliere Crea gruppo target.

Per creare un gruppo di destinazioni e registrare la funzione Lambda tramite AWS CLI

Usa i comandi create-target-groupe register-targets.

Ricezione di eventi dal sistema di bilanciamento del carico

Il sistema di bilanciamento del carico supporta la chiamata Lambda per le richieste su entrambi e. HTTP HTTPS Il load balancer 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 sistema di bilanciamento del carico invia il corpo della richiesta così com'è e imposta isBase64Encoded su false: testo/*, applicazione/json, applicazione/javascript e applicazione /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 load balancer decodifica il contenuto per recuperare il contenuto binario e lo invia al client nel corpo della risposta. HTTP

Il load balancer 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. In alternativa, aprire la console Lambda, scegli Applicazioni, Crea applicazione e seleziona una delle seguenti opzioni da AWS Serverless Application Repository:

  • ALB-Target Lambda- S3 UploadFileto

  • ALB-Obiettivo 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.

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 della query sono URL codificati, il load balancer 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.

Per abilitare le intestazioni con più valori tramite la console
  1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, in Bilanciamento del carico scegli Gruppi di destinazione.

  3. Scegli il nome del gruppo di destinazione per visualizzarne i dettagli.

  4. Nella scheda Dettagli del gruppo, all'interno della Attributi, scegli Modifica.

  5. Seleziona o deseleziona Intestazioni con più valori.

  6. Scegli Save changes (Salva modifiche).

Per abilitare le intestazioni multivalore utilizzando il AWS CLI

Utilizzate il modify-target-group-attributescomando con l'lambda.multi_value_headers.enabledattributo.

Abilitazione dei controlli dell'integrità

Per impostazione predefinita, i controlli dello stato sono disabilitati per i gruppi di destinazioni di tipo lambda. Puoi abilitare i controlli dello stato per implementare il DNS failover 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 }
Per abilitare i controlli sanitari per un gruppo target utilizzando la console
  1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, in Bilanciamento del carico scegli Gruppi di destinazione.

  3. Scegli il nome del gruppo di destinazione per visualizzarne i dettagli.

  4. Nella scheda Dettagli del gruppo, nella sezione Impostazioni del controllo dell'integrità, scegli Modifica.

  5. In Controlli dell'integrità, scegli Abilita.

  6. Scegli Save changes (Salva modifiche).

Per abilitare i controlli sanitari per un gruppo target utilizzando il AWS CLI

Utilizzate il modify-target-groupcomando con l'--health-check-enabledopzione.

Annullamento della registrazione della funzione Lambda

Se non hai più bisogno di inviare traffico alla funzione Lambda, puoi annullare la relativa registrazione. Dopo aver annullato la registrazione di una funzione Lambda, le richieste in corso falliscono con errori 5XX. HTTP

Per sostituire una funzione Lambda, ti consigliamo di creare un nuovo gruppo di destinazioni, registrare la nuova funzione con il nuovo gruppo e aggiornare le regole del listener per utilizzare il nuovo gruppo di destinazioni invece di quello esistente.

Per annullare la registrazione della funzione Lambda utilizzando la console
  1. Apri la EC2 console Amazon all'indirizzo https://console.aws.amazon.com/ec2/.

  2. Nel pannello di navigazione, in Bilanciamento del carico scegli Gruppi di destinazione.

  3. Scegli il nome del gruppo di destinazione per visualizzarne i dettagli.

  4. Nella scheda Destinazioni, scegli Annulla registrazione.

  5. Quando viene richiesta la conferma, seleziona Annulla registrazione.

Per annullare la registrazione della funzione Lambda utilizzando AWS CLI

Utilizza il comando deregister-targets.