Richiamo di una funzione Lambda utilizzando un endpoint Amazon API Gateway - AWS Lambda

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à.

Richiamo di una funzione Lambda utilizzando un endpoint Amazon API Gateway

Puoi creare un Web API con un HTTP endpoint per la tua funzione Lambda utilizzando Amazon API Gateway. APIGateway fornisce strumenti per creare e documentare siti Web APIs che indirizzano HTTP le richieste alle funzioni Lambda. Puoi proteggere l'accesso al tuo API con controlli di autenticazione e autorizzazione. APIsPuoi servire il traffico su Internet o essere accessibile solo all'interno del tuoVPC.

Le risorse incluse nella tua API definizione di uno o più metodi, ad esempio GET oPOST. I metodi hanno un'integrazione che instrada le richieste a una funzione Lambda o a un altro tipo di integrazione. È possibile definire ogni risorsa e metodo singolarmente oppure utilizzare tipi di risorse e metodi speciali per soddisfare tutte le richieste che si adattano a un modello. Una risorsa proxy cattura tutti i percorsi sottostanti una risorsa. Il ANY metodo rileva tutti i HTTP metodi.

Scelta di un tipo API

APIGateway supporta tre tipi di funzioni APIs che richiamano le funzioni Lambda:

  • HTTPAPI: Leggero e a bassa latenza. RESTful API

  • RESTAPI: Un software personalizzabile e ricco di funzionalità. RESTful API

  • WebSocket API: Un Web API che mantiene connessioni permanenti con i client per comunicazioni full-duplex.

HTTPAPIse REST APIs sono entrambi quelli RESTful APIs che elaborano HTTP le richieste e restituiscono le risposte. HTTPAPIssono più recenti e sono costruiti con la versione API Gateway 2API. Le seguenti funzionalità sono nuove per HTTPAPIs:

HTTPAPIcaratteristiche
  • Distribuzioni automatiche: quando si modificano routing o integrazioni, le modifiche vengono distribuite automaticamente alle fasi in cui è abilitata la distribuzione automatica.

  • Fase predefinita: puoi creare una fase predefinita ($default) per soddisfare le richieste nel percorso principale API delle tueURL. Per le fasi denominate, è necessario includere il nome dello stage all'inizio del percorso.

  • CORSconfigurazione: puoi configurare in modo API da aggiungere CORS intestazioni alle risposte in uscita, invece di aggiungerle manualmente nel codice della funzione.

RESTAPIssono i classici RESTful APIs che API Gateway ha supportato sin dal lancio. RESTAPIsattualmente dispongono di più funzionalità di personalizzazione, integrazione e gestione.

RESTAPIfunzionalità
  • Tipi di integrazione: REST APIs supporta integrazioni Lambda personalizzate. Con un'integrazione personalizzata, è possibile inviare solo il corpo della richiesta alla funzione, o applicare un modello di trasformazione al corpo della richiesta prima di inviarlo alla funzione.

  • Controllo degli accessi: REST APIs supporta più opzioni per l'autenticazione e l'autorizzazione.

  • Monitoraggio e tracciamento: REST APIs supporta il AWS X-Ray tracciamento e opzioni di registrazione aggiuntive.

Per un confronto dettagliato, consulta Choose between HTTP APIs and REST APIs nella APIGateway Developer Guide.

WebSocket APIsutilizza anche la versione 2 di API Gateway API e supporta un set di funzionalità simile. Utilizza a WebSocket API per le applicazioni che traggono vantaggio da una connessione persistente tra il client eAPI. WebSocket APIsforniscono una comunicazione full-duplex, il che significa che sia il client che il client API possono inviare messaggi in modo continuo senza attendere una risposta.

HTTPAPIssupporta un formato di eventi semplificato (versione 2.0). L'esempio seguente mostra un evento da un HTTPAPI.

Esempio APIEvento proxy Gateway (HTTPAPI)
{ "version": "2.0", "routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI", "rawPath": "/default/nodejs-apig-function-1G3XMPLZXVXYI", "rawQueryString": "", "cookies": [ "s_fid=7AABXMPL1AFD9BBF-0643XMPL09956DE2", "regStatus=pre-register" ], "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", ... }, "requestContext": { "accountId": "123456789012", "apiId": "r3pmxmplak", "domainName": "r3pmxmplak.execute-api.us-east-2.amazonaws.com", "domainPrefix": "r3pmxmplak", "http": { "method": "GET", "path": "/default/nodejs-apig-function-1G3XMPLZXVXYI", "protocol": "HTTP/1.1", "sourceIp": "205.255.255.176", "userAgent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36" }, "requestId": "JKJaXmPLvHcESHA=", "routeKey": "ANY /nodejs-apig-function-1G3XMPLZXVXYI", "stage": "default", "time": "10/Mar/2020:05:16:23 +0000", "timeEpoch": 1583817383220 }, "isBase64Encoded": true }

Per ulteriori informazioni, consulta Creare integrazioni AWS Lambda proxy per HTTP APIs in API Gateway.

Aggiunta di un endpoint alla funzione Lambda

Per aggiungere un endpoint pubblico alla funzione Lambda
  1. Aprire la pagina Funzioni della console Lambda.

  2. Scegliere una funzione.

  3. In Function overview (Panoramica delle funzioni), scegliere Add trigger (Aggiungi trigger).

  4. Seleziona APIGateway.

  5. Scegli Crea un API o Usa un esistente API.

    1. NuovoAPI: per APItipo, scegli HTTPAPI. Per ulteriori informazioni, consulta Scelta di un tipo API.

    2. EsistenteAPI: seleziona l'opzione API dall'elenco a discesa o inserisci l'APIID (ad esempio, r3pmxmplak).

  6. Per Security (Sicurezza), scegliere Open (Apri).

  7. Scegliere Add (Aggiungi).

Integrazione proxy

APIAPIsI gateway sono composti da fasi, risorse, metodi e integrazioni. La fase e la risorsa determinano il percorso dell'endpoint:

APIformato del percorso
  • /prod/: la fase e la risorsa radice di prod.

  • /prod/user: la fase di prod e la risorsa di user.

  • /dev/{proxy+} – Qualunque routing della fase dev.

  • /— (HTTPAPIs) La fase e la risorsa root predefinite.

Un'integrazione Lambda mappa una combinazione di percorso e HTTP metodo a una funzione Lambda. Puoi configurare API Gateway per passare il corpo della HTTP richiesta così com'è (integrazione personalizzata) o per incapsulare il corpo della richiesta in un documento che includa tutte le informazioni sulla richiesta, tra cui intestazioni, risorse, percorso e metodo.

Per ulteriori informazioni, consulta Integrazioni proxy Lambda in Gateway. API

Formato dell'evento

Amazon API Gateway richiama la tua funzione in modo sincrono con un evento che contiene una JSON rappresentazione della richiesta. HTTP Per un'integrazione personalizzata, l'evento è il corpo della richiesta. Per un'integrazione proxy, l'evento ha una struttura definita. L'esempio seguente mostra un evento proxy proveniente da un Gateway. API REST API

Esempio APIEvento proxy Gateway (RESTAPI)
{ "resource": "/", "path": "/", "httpMethod": "GET", "requestContext": { "resourcePath": "/", "httpMethod": "GET", "path": "/Prod/", ... }, "headers": { "accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9", "accept-encoding": "gzip, deflate, br", "Host": "70ixmpl4fl.execute-api.us-east-2.amazonaws.com", "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.132 Safari/537.36", "X-Amzn-Trace-Id": "Root=1-5e66d96f-7491f09xmpl79d18acf3d050", ... }, "multiValueHeaders": { "accept": [ "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" ], "accept-encoding": [ "gzip, deflate, br" ], ... }, "queryStringParameters": null, "multiValueQueryStringParameters": null, "pathParameters": null, "stageVariables": null, "body": null, "isBase64Encoded": false }

Formato della risposta

APIIl gateway attende una risposta dalla funzione e trasmette il risultato al chiamante. Per un'integrazione personalizzata, si definiscono una risposta di integrazione e una risposta di metodo per convertire l'output della funzione in una risposta. HTTP Per un'integrazione proxy, la funzione deve rispondere con una rappresentazione della risposta in un formato specifico.

L'esempio seguente mostra un oggetto risposta da una funzione Node.js. L'oggetto response rappresenta una HTTP risposta riuscita che contiene un JSON documento.

Esempio index.mjs: oggetto risposta di integrazione proxy (Node.js)
var response = { "statusCode": 200, "headers": { "Content-Type": "application/json" }, "isBase64Encoded": false, "multiValueHeaders": { "X-Custom-Header": ["My value", "My other value"], }, "body": "{\n \"TotalCodeSize\": 104330022,\n \"FunctionCount\": 26\n}" }

Il runtime Lambda serializza l'oggetto di risposta in JSON e lo invia a. API APIAnalizza la risposta e la utilizza per creare una HTTP risposta, che poi invia al client che ha effettuato la richiesta originale.

Esempio HTTPrisposta
< HTTP/1.1 200 OK < Content-Type: application/json < Content-Length: 55 < Connection: keep-alive < x-amzn-RequestId: 32998fea-xmpl-4268-8c72-16138d629356 < X-Custom-Header: My value < X-Custom-Header: My other value < X-Amzn-Trace-Id: Root=1-5e6aa925-ccecxmplbae116148e52f036 < { "TotalCodeSize": 104330022, "FunctionCount": 26 }

Autorizzazioni

Amazon API Gateway ottiene l'autorizzazione a richiamare la tua funzione dalla politica basata sulle risorse della funzione. Puoi concedere l'autorizzazione di invoca a un intero API gruppo o concedere un accesso limitato a una fase, una risorsa o un metodo.

Quando aggiungi una API funzione utilizzando la console Lambda, la console API Gateway o in un AWS SAM modello, la policy basata sulle risorse della funzione viene aggiornata automaticamente. Di seguito è riportata una policy di funzioni di esempio.

Esempio Policy di funzione
{ "Version": "2012-10-17", "Id": "default", "Statement": [ { "Sid": "nodejs-apig-functiongetEndpointPermissionProd-BWDBXMPLXE2F", "Effect": "Allow", "Principal": { "Service": "apigateway.amazonaws.com" }, "Action": "lambda:InvokeFunction", "Resource": "arn:aws:lambda:us-east-2:111122223333:function:nodejs-apig-function-1G3MXMPLXVXYI", "Condition": { "StringEquals": { "aws:SourceAccount": "111122223333" }, "ArnLike": { "aws:SourceArn": "arn:aws:execute-api:us-east-2:111122223333:ktyvxmpls1/*/GET/" } } } ] }

Puoi gestire manualmente le autorizzazioni delle policy funzionali con le seguenti operazioni: API

Per concedere il permesso di invocazione a un esistenteAPI, usa il comando. add-permission Esempio:

aws lambda add-permission \ --function-name my-function \ --statement-id apigateway-get --action lambda:InvokeFunction \ --principal apigateway.amazonaws.com \ --source-arn "arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET/"

Verrà visualizzato l'output seguente:

{ "Statement": "{\"Sid\":\"apigateway-test-2\",\"Effect\":\"Allow\",\"Principal\":{\"Service\":\"apigateway.amazonaws.com\"},\"Action\":\"lambda:InvokeFunction\",\"Resource\":\"arn:aws:lambda:us-east-2:123456789012:function:my-function\",\"Condition\":{\"ArnLike\":{\"AWS:SourceArn\":\"arn:aws:execute-api:us-east-2:123456789012:mnh1xmpli7/default/GET\"}}}" }
Nota

Se la funzione utilizzata API è diversa Regioni AWS, l'identificatore della regione nell'origine ARN deve corrispondere alla regione della funzione, non alla regione di. API Quando API Gateway richiama una funzione, utilizza una risorsa ARN basata sulla regione ARN diAPI, ma modificata per corrispondere alla regione della funzione.

L'origine ARN in questo esempio concede l'autorizzazione a un'integrazione sul GET metodo della risorsa radice nella fase predefinita di unAPI, con ID. mnh1xmpli7 È possibile utilizzare un asterisco nell'origine ARN per concedere autorizzazioni a più fasi, metodi o risorse.

Modelli di risorse
  • mnh1xmpli7/*/GET/*— GET metodo su tutte le risorse in tutte le fasi.

  • mnh1xmpli7/prod/ANY/user— ANY metodo sulla user risorsa in prod fase.

  • mnh1xmpli7/*/*/*: qualsiasi metodo su tutte le risorse in tutte le fasi.

Per informazioni dettagliate sulla visualizzazione delle policy e sulla rimozione delle istruzioni, vedere Utilizzo di politiche basate sulle risorse IAM in Lambda.

Applicazione di esempio

L'app di esempio APIGateway with Node.js include una funzione con un AWS SAM modello che crea un REST API file con AWS X-Ray tracciamento abilitato. Include anche script per la distribuzione, il richiamo della funzione, il test e la API pulizia.