Configura integrazioni personalizzate Lambda in Gateway API - Amazon API Gateway

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

Configura integrazioni personalizzate Lambda in Gateway API

Per mostrare come configurare l'integrazione personalizzata Lambda, creiamo un API gateway API per esporre il GET /greeting?greeter={name} metodo per richiamare una funzione Lambda. Usa uno dei seguenti esempi di funzioni Lambda. API

Usa uno dei seguenti esempi di funzioni Lambda:

Node.js
export const handler = function(event, context, callback) { var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; if (event.greeter==null) { callback(new Error('Missing the required greeter parameter.')); } else if (event.greeter === "") { res.body = "Hello, World"; callback(null, res); } else { res.body = "Hello, " + event.greeter +"!"; callback(null, res); } };
Python
import json def lambda_handler(event, context): print(event) res = { "statusCode": 200, "headers": { "Content-Type": "*/*" } } if event['greeter'] == "": res['body'] = "Hello, World" elif (event['greeter']): res['body'] = "Hello, " + event['greeter'] + "!" else: raise Exception('Missing the required greeter parameter.') return res

Questa funzione risponde con un messaggio "Hello, {name}!" se il valore del parametro greeter è una stringa non vuota. La funzione restituisce un messaggio "Hello, World!" se il valore di greeter è una stringa vuota. La funzione restituisce un messaggio di errore "Missing the required greeter parameter." se il parametro greeter non è impostato nella richiesta in ingresso. Denominiamo la funzione HelloWorld.

Puoi crearla nella console Lambda o tramite la AWS CLI. In questa sezione, facciamo riferimento a questa funzione utilizzando quanto segue: ARN

arn:aws:lambda:us-east-1:123456789012:function:HelloWorld

Con la funzione Lambda impostata nel backend, procedi con la configurazione di. API

Per configurare l'integrazione personalizzata Lambda utilizzando AWS CLI
  1. Chiama il create-rest-api comando per creare unAPI:

    aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)' --region us-west-2

    Nota il id valore risultante API (te6si5ach7) nella risposta:

    { "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "createdDate": 1508461860 }

    Hai bisogno di API id tutta questa sezione.

  2. Chiama il comando get-resources per ottenere il valore di id della risorsa root:

    aws apigateway get-resources --rest-api-id te6si5ach7 --region us-west-2

    La risposta di esito positivo sarà simile alla seguente:

    { "items": [ { "path": "/", "id": "krznpq9xpg" } ] }

    Prendi nota del valore di id (krznpq9xpg) della risorsa root. Ti servirà nella prossima fase e successivamente.

  3. Chiama create-resource per creare una risorsa API gateway di/greeting:

    aws apigateway create-resource --rest-api-id te6si5ach7 \ --region us-west-2 \ --parent-id krznpq9xpg \ --path-part greeting

    La risposta con esito positivo è simile a quella riportata di seguito.

    { "path": "/greeting", "pathPart": "greeting", "id": "2jf6xt", "parentId": "krznpq9xpg" }

    Prendi nota del valore greeting della risorsa id (2jf6xt). Ti servirà per creare un metodo nella risorsa /greeting nella prossima fase.

  4. Chiama put-method per creare una richiesta di API metodo diGET /greeting?greeter={name}:

    aws apigateway put-method --rest-api-id te6si5ach7 \ --region us-west-2 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=false

    La risposta con esito positivo è simile a quella riportata di seguito.

    { "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.querystring.greeter": false } }

    Questo API metodo consente al client di ricevere un saluto dalla funzione Lambda nel backend. Il parametro greeter è facoltativo perché il back-end deve gestire un chiamante anonimo o un chiamante autoidentificato.

  5. Chiama put-method-response per configurare la risposta 200 OK alla richiesta del metodo GET /greeting?greeter={name}:

    aws apigateway put-method-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200

  6. Chiama put-integration per configurare l'integrazione del metodo GET /greeting?greeter={name} con una funzione Lambda, denominata HelloWorld. La funzione risponde alla richiesta con un messaggio "Hello, {name}!" se è specificato il parametro greeter, altrimenti con "Hello, World!" se il parametro della stringa di query non è impostato.

    aws apigateway put-integration \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --type AWS \ --integration-http-method POST \ --uri arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations \ --request-templates '{"application/json":"{\"greeter\":\"$input.params('greeter')\"}"}' \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRole

    Il modello di mappatura fornito qui traduce il parametro della stringa di greeter query nella proprietà del greeter payload. JSON Questo è necessario perché l'input di una funzione Lambda deve essere espresso nel corpo.

    Importante

    Per le integrazioni Lambda, è necessario utilizzare il HTTP metodo di POST per la richiesta di integrazione, in base alla specifica dell'azione del servizio Lambda per le chiamate di funzioni. Il uri parametro è l'azione di richiamo della funzione. ARN

    Un output corretto è simile al seguente:

    { "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-east-1:lambda:path/2015-03-31/functions/arn:aws:lambda:us-east-1:123456789012:function:HelloWorld/invocations", "httpMethod": "POST", "requestTemplates": { "application/json": "{\"greeter\":\"$input.params('greeter')\"}" }, "cacheNamespace": "krznpq9xpg", "credentials": "arn:aws:iam::123456789012:role/apigAwsProxyRole", "type": "AWS" }

    Il IAM ruolo delle politiche apigAwsProxyRole indispensabili che consentono al apigateway servizio di richiamare le funzioni Lambda. Invece di fornire un IAM ruolo percredentials, puoi chiamare il comando add-permission per aggiungere autorizzazioni basate sulle risorse. Ecco come la console Gateway aggiunge queste autorizzazioni. API

  7. Chiama put-integration-response per configurare la risposta di integrazione in modo da passare l'output della funzione Lambda al client come risposta del metodo 200 OK.

    aws apigateway put-integration-response \ --region us-west-2 \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 \ --selection-pattern ""

    Impostando il modello di selezione su una stringa vuota, la risposta predefinita è 200 OK.

    La risposta di esito positivo sarà simile alla seguente:

    { "selectionPattern": "", "statusCode": "200" }
  8. Chiama create-deployment per distribuirli API su una test fase:

    aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
  9. Prova l'APIutilizzo del seguente URL comando c in un terminale:

    curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=me' \ -H 'authorization: AWS4-HMAC-SHA256 Credential={access_key}/20171020/us-west-2/execute-api/aws4_request, SignedHeaders=content-type;host;x-amz-date, Signature=f327...5751'