Configurazione dell'integrazione proxy Lambda per Gateway API usando AWS CLI
In questa sezione viene illustrato come usare AWS CLI per configurare un'API con l'integrazione proxy Lambda. Per istruzioni dettagliate sull'uso della console API Gateway per configurare una risorsa proxy con l'integrazione proxy Lambda, consulta Tutorial: creazione di una REST API con un'integrazione proxy Lambda.
Per questo scenario useremo la funzione Lambda di esempio seguente come back-end dell'API:
export const handler = async(event, context) => { console.log('Received event:', JSON.stringify(event, null, 2)); var res ={ "statusCode": 200, "headers": { "Content-Type": "*/*" } }; var greeter = 'World'; if (event.greeter && event.greeter!=="") { greeter = event.greeter; } else if (event.body && event.body !== "") { var body = JSON.parse(event.body); if (body.greeter && body.greeter !== "") { greeter = body.greeter; } } else if (event.queryStringParameters && event.queryStringParameters.greeter && event.queryStringParameters.greeter !== "") { greeter = event.queryStringParameters.greeter; } else if (event.multiValueHeaders && event.multiValueHeaders.greeter && event.multiValueHeaders.greeter != "") { greeter = event.multiValueHeaders.greeter.join(" and "); } else if (event.headers && event.headers.greeter && event.headers.greeter != "") { greeter = event.headers.greeter; } res.body = "Hello, " + greeter + "!"; return res };
Rispetto alla configurazione dell'integrazione personalizzata Lambda riportata in Configurazione di integrazioni personalizzate Lambda in API Gateway, l'input per questa funzione Lambda può essere espresso nei parametri e nel corpo della richiesta. Avrai maggiore libertà per permettere al client di passare gli stessi dati di input. Qui il client può passare il nome del mittente della formula di saluto come parametro della stringa di query, intestazione o proprietà del corpo. La funzione può anche supportare l'integrazione personalizzata Lambda. La configurazione dell'API è più semplice. Non devi configurare la risposta del metodo o la risposta di integrazione.
Per configurare l'integrazione proxy Lambda tramite la AWS CLI
-
Utilizza il seguente comando create-rest-api per creare un’API:
aws apigateway create-rest-api --name 'HelloWorld (AWS CLI)'L'output sarà simile al seguente:
{ "name": "HelloWorldProxy (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 {proxy+}L'output sarà simile al seguente:
{ "path": "/{proxy+}", "pathPart": "{proxy+}", "id": "2jf6xt", "parentId": "krznpq9xpg" }Nel passaggio successivo si utilizza il valore
id(2jf6xt) della risorsa{proxy+}per creare un metodo sulla risorsa/{proxy+}. -
Utilizza il seguente comando put-method per creare una richiesta di metodo
ANYcomeANY /{proxy+}:aws apigateway put-method --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method ANY \ --authorization-type "NONE"L'output sarà simile al seguente:
{ "apiKeyRequired": false, "httpMethod": "ANY", "authorizationType": "NONE" }Questo metodo API permette al client di ricevere o inviare formule di saluto dalla funzione Lambda nel back-end.
-
Utilizza il seguente comando put-integration per configurare l’integrazione del metodo
ANY /{proxy+}con una funzione Lambda denominataHelloWorld. Questa funzione risponde alla richiesta con un messaggio"Hello, {name}!"se è specificato il parametrogreeter, altrimenti con un messaggio"Hello, World!"se il parametro della stringa di query non è impostato.aws apigateway put-integration \ --rest-api-id te6si5ach7 \ --resource-id 2jf6xt \ --http-method ANY \ --type AWS_PROXY \ --integration-http-method POST \ --uri arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:123456789012:function:HelloWorld/invocations \ --credentials arn:aws:iam::123456789012:role/apigAwsProxyRoleImportante
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 ruolo IAMapigAwsProxyRoledeve includere policy che permettono al servizioapigatewaydi richiamare funzioni Lambda. Per ulteriori informazioni sulle autorizzazioni IAM, consultare Modello di autorizzazione API Gateway per invocare un'API.L'output sarà simile al seguente:
{ "passthroughBehavior": "WHEN_NO_MATCH", "cacheKeyParameters": [], "uri": "arn:aws:apigateway:us-west-2:lambda:path/2015-03-31/functions/arn:aws:lambda:us-west-2:1234567890:function:HelloWorld/invocations", "httpMethod": "POST", "cacheNamespace": "vvom7n", "credentials": "arn:aws:iam::1234567890:role/apigAwsProxyRole", "type": "AWS_PROXY" }Invece di specificare un ruolo IAM per
credentials, è possibile utilizzare il comando add-permission per aggiungere autorizzazioni basate su risorse. Questo è ciò che fa la console API Gateway. -
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 i comandi cURL seguenti in un terminale.
Chiamata dell'API con il parametro della stringa di query
?greeter=jane:curl -X GET 'https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/greeting?greeter=jane'Chiamata dell'API con un parametro di intestazione
greeter:jane:curl -X GET https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -H 'greeter: jane'Chiamata dell'API con un corpo
{"greeter":"jane"}:curl -X POST https://te6si5ach7.execute-api.us-west-2.amazonaws.com/test/hi \ -H 'content-type: application/json' \ -d '{ "greeter": "jane" }'In tutti i casi, l'output è una risposta 200 con il corpo seguente:
Hello, jane!