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:
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
-
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. -
Chiama il comando
get-resources
per ottenere il valore diid
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. -
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 risorsaid
(2jf6xt
). Ti servirà per creare un metodo nella risorsa/greeting
nella prossima fase. -
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. -
Chiama
put-method-response
per configurare la risposta200 OK
alla richiesta del metodoGET /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
-
Chiama
put-integration
per configurare l'integrazione del metodoGET /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 \ --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à delgreeter
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. Iluri
parametro è l'azione di richiamo della funzione. ARNUn 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 alapigateway
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 -
Chiama
put-integration-response
per configurare la risposta di integrazione in modo da passare l'output della funzione Lambda al client come risposta del metodo200 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" }
-
Chiama
create-deployment
per distribuirli API su unatest
fase:aws apigateway create-deployment --rest-api-id te6si5ach7 --stage-name test --region us-west-2
-
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'