Come posso passare i dati attraverso REST API del gateway API a una funzione Lambda back-end oppure a un endpoint HTTP?

6 minuti di lettura
0

Desidero che REST API di Gateway Amazon API passi i dati a una funzione back-end di AWS Lambda e a un endpoint HTTP. In che modo posso farlo?

Breve descrizione

Per configurare REST API per passare i dati a una funzione Lambda back-end, utilizza un'integrazione personalizzata Lambda.

Per passare i parametri della stringa di query a un endpoint HTTP, utilizza un'integrazione personalizzata HTTP.

Importante: assicurati che i dati di input siano forniti come payload della richiesta di integrazione. Una best practice consiste nell'utilizzare un modello di mappatura per fornire il payload. Per ulteriori informazioni, consulta Mappare i payload di richieste e risposte tra metodo e integrazione.

Risoluzione

Crea una funzione Lambda per gestire le intestazioni personalizzate dall'API Gateway API

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 Basic information (Informazioni di base), effettua le seguenti operazioni: per Function name (Nome funzione), immettere un nome che descriva lo scopo della funzione. Ad esempio: MapTemplate. Per Runtime, scegli Python 3.9..

4.    Per Permissions (Autorizzazioni), espandi Change default execution role (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.    Nella scheda Code (Codice), in Code source (Sorgente codice), sostituisci il codice in lambda_function.py con quanto segue:

import json

def lambda_handler(event, context):
    print(event)
    return {
        'statusCode': 200,
        'body': json.dumps(event) # returning the data sent to backend lambda function as API response.
    }

9.    Scegli Deploy (Implementa).

Per ulteriori informazioni, consulta Costruire funzioni Lambda con Python.

Passa i dati alla funzione Lambda back-end o all'endpoint HTTP

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 REST API, scegli Build (Costruisci). Quando viene visualizzato il popup Create Example API (Crea API di esempio), scegli OK.

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

4.    In Create new API (Crea nuova API), scegli New API (Nuova API).

5.    In Settings (Impostazioni), procedi come segue: per API name (Nome API), inserisci un nome che descrive lo scopo dell'API. Ad esempio: MappingTemplateTutorial. (Facoltativo) Per Description (Descrizione), inserisci una breve descrizione dello scopo dell'API. Ad esempio, Invia i dati alla funzione Lambda di back-end/endpoint HTTP. Per Endpoint Type (Tipo di endpoint), scegli Regional (Regionale).

6.    Scegli Create API (Crea API).

Configura le risorse dell'API, il punto di integrazione 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 New Child Resource (Nuova risorsa figlio), per Configure as proxy resource (Configura come risorsa proxy), seleziona l'icona del segno di spunta, quindi scegli Create Resource (Crea risorsa).

4.    Nella pagina /{proxy+} - ANY - Setup, procedi come segue:

  • Per Integration type (Tipo di integrazione), scegli Lambda Function Proxy (Proxy funzione Lambda).
  • Per Lambda Region (Regione Lambda), scegli la regione AWS che ospita la funzione.
  • Per la Lambda Function (Funzione Lambda), immetti il nome della funzione MappingTemplateTutorial.

Scegli Save (Salva). Viene visualizzato un popup Add Permission to Lambda Function (Aggiungi autorizzazione alla funzione Lambda), scegli OK.

7.    Nella pagina /{proxy+} - ANY - Method Execution, scegli Integration Request (Richiesta di integrazione).

8.    Nella pagina /{proxy+} - ANY - Integration Request, effettua le seguenti operazioni:

  • Deseleziona la casella Use Lambda Proxy integration (Usa icona di integrazione del proxy Lambda). Viene visualizzato un popup di Switch to Lambda integration (Integrazione Passa a Lambda).
  • Nel popup, scegli OK. Viene visualizzato un popup Add Permission to Lambda Function (Aggiungi autorizzazione alla funzione Lambda). Nel popup scegli OK
  • Espandi i Mapping Templates (Modelli di mappatura).
  • Per Passthrough del corpo della richiesta, scegli Quando non ci sono modelli definiti (consigliato).

Scegli Add mapping template (Aggiungi modello di mappatura). Per Tipo di contenuto, inserisci application/json. Quindi, scegli l'icona del segno di spunta.

9.    Scegli l'elenco a discesa Generate template (Genera modello), quindi scegli Method Request passthrough (Metodo di richiesta passthrough).

10.    Nell'editor del modello di mappatura, inserisci quanto segue:

##  See http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html
#set($allParams = $input.params())
{
"method" : "$context.httpMethod", ## API method
"authcontext" : "$context.authorizer.stringkey", ## Optional output from Lambda Authorizers
## passthrough body
"body-json" : $input.json('$'),
## passthrough headers, querystrings and path parameters
"params" : {
#foreach($type in $allParams.keySet())
    #set($params = $allParams.get($type))
"$type" : {
    #foreach($paramName in $params.keySet())
    "$paramName" : "$util.escapeJavaScript($params.get($paramName))"
        #if($foreach.hasNext),#end
    #end
}
    #if($foreach.hasNext),#end
#end
}
}

11.    Scegli Save (Salva).

12.    Scegli Method Execution (Esecuzione metodo) per tornare alla pagina /{proxy+} - ANY - Method Execution.

13.    Scegli Method Response (Risposta al metodo) per impostare una risposta valida al metodo.

14.    Nella pagina /{proxy+} - ANY - Method Response, scegli Add Response (Aggiungi risposta).

15.    Per il codice di stato HTTP, immetti 200. Quindi, scegli l'icona del segno di spunta.

16.    Scegli Actions (Azioni) per distribuire l'API in una fase.

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.us-east-1.amazonaws.com/stage

Verifica la configurazione

Per confermare che tutti i dati vengono passati alla funzione Lambda back-end o all'endpoint HTTP dall'API, esegui il seguente comando curl:

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

curl -i --location --request POST 'https://1a2bc3d456.execute-api.us-east-1.amazonaws.com/stage/path1/path2?query1=querystring1&query2=querystring2' --header 'header1: value1' --header 'header2: value2' --header 'Content-Type: application/json' --data-raw '{"keybody":"valuebody"}'

L'output del comando include tutti i dati ricevuti dalla funzione Lambda di back-end al client. È possibile aggiornare il messaggio di output per l'ambiente.

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

Tutorial: Build an API Gateway REST API with Lambda non-proxy integration (Tutorial: Crea REST API del gateway API con integrazione non proxy Lambda)

Configurazione delle trasformazioni dei dati per le REST API

In che modo posso passare le intestazioni personalizzate attraverso API Gateway a una funzione Lambda utilizzando un'integrazione Lambda personalizzata?