In che modo è possibile passare intestazioni personalizzate attraverso API Gateway a una funzione Lambda utilizzando un'integrazione Lambda personalizzata (non proxy)?

5 minuti di lettura
0

Voglio configurare una funzione AWS Lambda attraverso un'integrazione personalizzata (non proxy) per elaborare le intestazioni personalizzate che vengono passate attraverso la mia API Gateway Amazon API. Come posso configurarla?

Breve descrizione

Di default, una funzione Lambda elabora solo il corpo della richiesta del metodo che riceve da una richiesta API API Gateway. Per passare intestazioni personalizzate da un'API API Gateway a una funzione Lambda, utilizza un modello di mappatura del corpo. L'API invia la richiesta API aggiornata a una funzione Lambda per elaborare le intestazioni. Quindi, la funzione Lambda restituisce uno o più valori di intestazione dalla richiesta API originale.

Risoluzione

Configura le autorizzazioni AWS Identity and Access Management (IAM) richieste

Segui le istruzioni in Controllo degli accessi a un'API con le autorizzazioni IAM.

Per testare questa procedura, è possibile creare un ruolo IAM e allegare le seguenti policy gestite AWS:

  • AmazonAPIGatewayInvokeFullAccess
  • AmazonAPIGatewayPushToCloudWatchLogs

Crea una funzione Lambda per gestire le intestazioni personalizzate dalla tua API API Gateway

1.    Apri la console Lambda.

2.    Scegli Crea funzione. La pagina della funzione Crea si apre con l'opzione Crea dall'inizio selezionata.

3.    Nel riquadro informazioni di base procedi come segue:
Per Nome della funzione, inserisci un nome che descriva lo scopo della funzione. Per esempio: CustomHeaders.
Per Tempo di esecuzione, scegli Node.js 14.x

4.    In Autorizzazioni, espandi Modifica ruolo di esecuzione di default.

5.    Scegli Utilizza un ruolo esistente. Viene visualizzato un elenco a discesa dei ruoli esistenti.

6.    Per Ruolo esistente, scegli il ruolo di esecuzione Lambda creato in precedenza.

7.    Scegli Crea funzione.

8.    Nel riquadro Codice sorgente, sostituisci il codice nel riquadro dell'editor (index.js) con il seguente:

exports.handler = (event, context, callback) => {
// TODO implement
callback(null, "This message header was processed by Amazon " +event.headers["header1"]);
};

9.    Scegli Salva.

Per ulteriori informazioni, consulta Costruire funzioni Lambda con Node.js.

Crea una API REST API Gateway

1.    Apri la console API Gateway.

2.    Scegli Create API (Crea API).

-oppure-

(Se è la prima volta che utilizzi API Gateway) Viene visualizzata una pagina di introduzione alle caratteristiche del servizio. In API REST, scegli Costruisci. Quando viene visualizzato il popup Crea API di esempio, scegli OK.

3.    Per Scegli un tipo di API, nel riquadro API REST scegli Costruisci.

4.    In Crea nuova API, scegli Nuova API.

5.    In Impostazioni, procedi come segue:
Per Nome API, inserisci un nome che descriva lo scopo dell'API. Per esempio: SendtoLambda.
(Facoltativo) Per Descrizione, insersci una breve descrizione dello scopo dell'API.
Per Tipo di endpoint, scegli Regionale.

6.    Scegli Crea API.

Configura il punto di integrazione dell'API e il modello di mappatura del corpo

1.    Nella console API Gateway, scegli il nome dell'API creata nel passaggio precedente. Si apre la pagina Risorse dell'API.

2.    Nella pagina Risorse, scegli Operazioni. Quindi, scegli Crea risorsa.

3.    Nel riquadro Nuova risorsa figlia, procedi come segue:
Per Nome risorsa, inserisci un nome che descriva la risorsa. Per esempio: HeadersResource.
Scegli Crea risorsa.

4.    Scegli Operazioni. Quindi, scegli Crea metodo.

5.    Dall'elenco a discesa in /headersresource, scegli POST. Quindi, scegli l'icona del segno di spunta.

6.    Nella pagina /headersresource - POST - Impostazioni, procedi come segue:
Per Tipo di integrazione, scegli Funzione Lambda.
Per Regione Lambda, scegli la Regione AWS che ospita la funzione.
Per Funzione Lambda, inserisci il nome della funzione.
Scegli Salva. Viene visualizzato un popup Aggiungi autorizzazione alla funzione Lambda.
Nel popup, scegli OK.

7.    Nella pagina /headersresource - POST - Esecuzione del metodo, scegli Richiesta di integrazione.

8.    Nella pagina /headersresource- POST - Richiesta di integrazione, procedi come segue:
Espandi Modelli di mappatura.
Per Passthrough del corpo della richiesta, scegli Quando non ci sono modelli definiti (consigliato).
Scegli Aggiungi modello di mappatura.
Per Tipo di contenuto, inserisci application/json. Quindi, scegli l'icona del segno di spunta.

9.    Nell'editor del modello di mappatura, 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
  }
}

10.    Scegli Salva.

Implementa l'API in una nuova fase

1.    Segui le istruzioni in Implementa un'API REST in una fase. Per ulteriori informazioni, consulta Configurazione di una fase utilizzando la console API Gateway.

2.    Nel riquadro Editor di fase, copia l'URL di richiamo negli appunti.

Esempio di URL di richiamo di un'API REST

https://1a2bc3d456.execute-api.region.amazonaws.com/test

Verifica la configurazione

Per confermare che le intestazioni dei messaggi vengono elaborate dall'API e dalla funzione Lambda, esegui il seguente comando curl:

Importante: sostituisci https://restApiId.execute-api.region.amazonaws.com/stageName con l'URL di richiamo dell'API.

curl -H "Content-Type: application/json" -H "header1: API Gateway and AWS Lambda" -X POST -d "{\"API_body\": \"This is the body\"}" https://restApiId.execute-api.region.amazonaws.com/stageName/headersresource

Output di esempio

"This message header was processed by Amazon API Gateway and AWS Lambda"

Nota: per installare curl su Windows, vedi Download sul sito Web Git. Per ulteriori informazioni su curl, consulta il sito Web del progetto curl.


Informazioni correlate

Configurazione delle trasformazioni dei dati per le REST API

Autorizzazioni Lambda

Controllo degli accessi a un'API con le autorizzazioni IAM