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à.
Configurazione di integrazioni personalizzate Lambda in API Gateway
Per mostrare come si configura l’integrazione personalizzata, o non proxy, Lambda, si crea un’API di Gateway API per esporre il metodo GET /greeting?greeter={name} in modo da invocare una funzione Lambda. Usa uno dei seguenti esempi di funzioni Lambda per l'API.
Usa uno dei seguenti esempi di funzioni Lambda:
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 faremo riferimento alla funzione usando l'ARN seguente:
arn:aws:lambda:us-east-1:123456789012:function:HelloWorld
Con la funzione Lambda impostata nel back-end, procedi a configurare l'API.
Per configurare l'integrazione personalizzata Lambda utilizzando AWS CLI
-
Usa il seguente create-rest-apicomando per creare un'API:
aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'L'output sarà simile al seguente:
{ "name": "HelloWorld (AWS CLI)", "id": "te6si5ach7", "rootResourceId" : "krznpq9xpg", "createdDate": 1508461860 }In questo esempio si utilizza
iddell’API (te6si5ach7) erootResourceId(krznpq9xpg). -
Utilizza il seguente comando create-resource per creare una risorsa
/greetingdi Gateway API:aws apigateway create-resource \ --rest-api-id te6si5ach7 \ --parent-id krznpq9xpg \ --path-part greetingL'output sarà simile al seguente:
{ "path": "/greeting", "pathPart": "greeting", "id": "2jf6xt", "parentId": "krznpq9xpg" }Nel passaggio successivo si utilizza il valore
id(2jf6xt) della risorsagreetingper creare un metodo sulla risorsa/greeting. -
Utilizza il seguente comando put-method per creare una richiesta di metodo API
GET /greeting?greeter={name}:aws apigateway put-method --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --authorization-type "NONE" \ --request-parameters method.request.querystring.greeter=falseL'output sarà simile al seguente:
{ "apiKeyRequired": false, "httpMethod": "GET", "authorizationType": "NONE", "requestParameters": { "method.request.querystring.greeter": false } }Questo metodo API permette al client di ricevere una formula di saluto dalla funzione Lambda nel back-end. Il parametro
greeterè facoltativo perché il back-end deve gestire un chiamante anonimo o un chiamante autoidentificato. -
Utilizzate il seguente put-method-responsecomando per impostare la
200 OKrisposta alla richiesta del metodo diGET /greeting?greeter={name}:aws apigateway put-method-response \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method GET \ --status-code 200 -
Utilizza il seguente comando put-integration per configurare l’integrazione del metodo
GET /greeting?greeter={name}con una funzione Lambda denominataHelloWorld. La funzione risponde alla richiesta con un messaggio"Hello, {name}!"se è specificato il parametrogreeter, altrimenti con"Hello, World!"se il parametro della stringa di query non è impostato.aws apigateway put-integration \ --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/apigAwsProxyRoleIl modello di mappatura fornito qui traduce il parametro della stringa di query
greeternella proprietàgreeterdel payload JSON. Questo è necessario perché l'input di una funzione Lambda deve essere espresso nel corpo.Importante
Per le integrazioni Lambda, devi usare il metodo HTTP
POSTper la richiesta di integrazione, secondo la specifica dell'operazione del servizio Lambda per le chiamate della funzione. Il parametrouriè l'ARN dell'operazione di chiamata della funzione.L'output sarà 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 ruolo IAM
apigAwsProxyRoledeve includere policy che permettono al servizioapigatewaydi richiamare funzioni Lambda. Invece di specificare un ruolo IAM percredentials, puoi chiamare il comando add-permission per aggiungere autorizzazioni basate su risorse. Questo è il modo in cui la console API Gateway aggiunge queste autorizzazioni. -
Utilizzate il put-integration-responsecomando seguente per impostare la risposta di integrazione per passare l'output della funzione Lambda al client come risposta del
200 OKmetodo:aws apigateway put-integration-response \ --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.L'output sarà simile al seguente:
{ "selectionPattern": "", "statusCode": "200" } -
Utilizza il seguente comando create-deployment per distribuire l’API in una fase
test.aws apigateway create-deployment \ --rest-api-id te6si5ach7 \ --stage-name test -
Testa l'API usando il comando cURL seguente 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'