Come posso passare intestazioni personalizzate tramite Gateway API a una funzione Lambda con integrazione personalizzata Lambda (non proxy)?
Desidero configurare una funzione AWS Lambda tramite un'integrazione personalizzata (non proxy) per elaborare intestazioni personalizzate che vengono passate tramite la mia API di Gateway Amazon API.
Breve descrizione
Per impostazione predefinita, una funzione Lambda elabora solo il corpo della richiesta del metodo che riceve da una richiesta API di Gateway API. Per passare intestazioni personalizzate da un'API di Gateway API a una funzione Lambda, utilizza un modello di mappatura corpo. L'API invia prima la richiesta API aggiornata a una funzione Lambda per l'elaborazione delle intestazioni. Poi la funzione Lambda restituisce uno o più valori di intestazione dalla richiesta API originale.
Risoluzione
Configura le autorizzazioni IAM necessarie
Segui le istruzioni in Control access to a REST API with IAM permissions.
Per testare questa procedura, crea un ruolo AWS Identity and Access Management (IAM), quindi collega le policy gestite da AWS AmazonAPIGatewayInvokeFullAccess e AmazonAPIGatewayPushToCloudWatchLogs. Per ulteriori informazioni, consulta AWS managed policies.
Crea una funzione Lambda per gestire le intestazioni personalizzate dalla tua API di Gateway API
Completa i passaggi seguenti:
- Apri la console Lambda.
- Scegli Crea funzione. Si aprirà la pagina Crea funzione con l'opzioneCrea da zero selezionata.
- Nel pannello Informazioni di base esegui le azioni seguenti:
In Nome funzione inserisci un nome che descriva lo scopo della funzione. Ad esempio: IntestazioniPersonalizzate.
In Tempo di esecuzione scegli Node.js 20.x. - In Autorizzazioni espandi la voce Modifica del ruolo di esecuzione predefinito.
- Scegli Utilizza un ruolo esistente. Verrà visualizzato un elenco a discesa dei ruoli esistenti.
- In Ruolo esistente scegli il ruolo di esecuzione Lambda creato in precedenza.
- Scegli Crea funzione.
- Nel pannello Origine del codice sostituisci il codice index.mjs nel pannello dell'editor con il codice seguente:
Scegli Distribuisci.export const handler = async (event, context, callback) => { callback(null, "The custom header " +event.headers["header1"] +" has been processed successfully by AWS Lambda via Amazon API Gateway"); };
Per ulteriori informazioni, consulta Building Lambda functions with Node.js.
Crea una REST API di Gateway API
Completa i passaggi seguenti:
- Apri la console Gateway API.
- Scegli Crea API.
-oppure-
Se è la prima volta che usi Gateway API, verrà visualizzata una pagina di introduzione alle funzionalità di Gateway API. In API REST scegli Crea. - Nella sezione Crea REST API scegli Nuova API in Dettagli API.
- In Nome API inserisci un nome che descriva lo scopo dell'API. Ad esempio: InviaaLambda.
(Facoltativo) In Descrizione inserisci una breve descrizione dello scopo dell'API.
In Tipo di endpoint scegli Regionale. - Scegli Crea API.
Configura il punto di integrazione e il modello di mappatura corpo dell'API
Completa i passaggi seguenti:
-
Apri la console Gateway API.
-
Scegli il nome dell'API creata in precedenza. Si aprirà la pagina Risorse dell'API.
-
Nella pagina Risorse scegli Crea risorsa.
-
Nel pannello Crea risorsa esegui le azioni seguenti:
In Nome risorsa inserisci un nome che descriva la risorsa. Ad esempio: RisorsaIntestazioni.
Scegli Crea risorsa. -
Scegli la Risorsa che hai creato, quindi scegli Crea metodo.
-
Nel pannello Crea metodo esegui le azioni seguenti:
In Tipo di metodo scegli POST dall'elenco a discesa.
In Tipo di integrazione seleziona Funzione Lambda.
Verifica che l'opzione Integrazione proxy Lambda sia disabilitata.
In Funzione Lambda scegli la regione AWS che ospita la funzione, quindi inserisci il nome della funzione Lambda o il nome della risorsa Amazon (ARN).
Scegli Crea metodo. Questa azione concede automaticamente a Gateway API l'autorizzazione a invocare la funzione Lambda. -
Scegli POST come metodo per la risorsa creato nel passaggio precedente. Poi, nel pannello Esecuzione metodo, scegli Richiesta di integrazione.
-
Nel pannello Richiesta di integrazione scegli Modifica, quindi esegui le azioni seguenti:
In Richiesta passthrough corpo scegli When there are no templates defined (recommended) (Quando non ci sono modelli definiti, consigliato).
Espandi Modelli di mappatura in basso nel pannello.
Scegli Aggiungi modello di mappatura.
In Content-Type inserisci application/json. -
Nell'editor del Corpo del modello inserisci quanto segue:
{ "method": "$context.httpMethod", "body" : $input.json('$'), "headers": { #foreach($param in $input.params().header.keySet()) "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end #end } }
-
Fai clic su Salva.
Implementa l'API in una nuova fase
Completa i passaggi seguenti:
- Segui le istruzioni per distribuire una REST API in una fase. Per ulteriori informazioni, consulta Set up a stage for a REST API in API Gateway.
- Fai clic sul pulsante Distribuisci l'API.
- Nella finestra pop-up Distribuisci l'API inserisci un nuovo nome per la fase, quindi scegli Distribuzione.
- Espandi la fase nel pannello Fasi per visualizzare la risorsa e il metodo che hai creato nei passaggi precedenti.
- Scegli POST come metodo pewr la risorsa e copia il valore di Richiama URL negli appunti.
Esempio di URL di invocazione della REST API
https://1a2bc3d456.execute-api.region.amazonaws.com/stageName/resourceName
Testa la configurazione
Per verificare che l'API e la funzione Lambda elaborino le intestazioni, esegui questo comando curl:
curl -H "Content-Type: application/json" -H "header1: value1" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/resourceName
Nota: sostituisci con l'URL di invocazione della tua API.
Esempio di output
"The custom header value1 has been processed successfully by AWS Lambda via Amazon API Gateway"
Nota: per installare curl su Windows, vedi Downloads sul sito web di Git. Per ulteriori informazioni su curl, visita il sito web del progetto curl.
Informazioni correlate
Set up data transformations in API Gateway
Contenuto pertinente
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa
- AWS UFFICIALEAggiornata 2 anni fa