2015-08-16 12 views
7

Sto esponendo una funzione AWS Lambda alle richieste HTTP pubbliche impostando un endpoint di Gateway API AWS che punta ad esso.È possibile configurare un endpoint Gateway API AWS per una funzione Lambda, utilizzando l'API AWS?

Ci sono due parti a questo:

  • creare e caricare la mia funzione AWS Lambda
  • Impostare il gateway API per puntare un endpoint HTTP per la mia funzione Lambda

voglio fai entrambe le parti usando le chiamate API invece dell'interfaccia web. Posso farlo per la prima parte utilizzando l'SDK AWS e la CLI AWS.

Tuttavia, per la seconda parte, sono bloccato. Non ho trovato una menzione del gateway API quando si guarda attraverso lo

C'è un modo per configurare un endpoint Gateway API per una funzione Lambda, utilizzando in modo programmatico l'API AWS?

+0

supporto CLI/SDK per 'API Gateway' non è ancora pronto. Personalmente mi aspetto che ulteriori dettagli su queste funzionalità siano pubblicati su 're: Invent 2015'. – kixorz

+1

Inoltre, 'CloudFormation' è qualcosa che potrebbe essere di grande aiuto nei tuoi sforzi futuri. – kixorz

risposta

7

Sì, è possibile tramite l'API di AWS configurare gli endpoint Gateway API Amazon per le funzioni di AWS Lambda.

Mentre l'SDK AWS per JavaScript in Node.js e AWS CLI non hanno ancora supportato Amazon API Gateway, è possibile impostarli utilizzando Amazon API Gateway REST API senza SDK ufficiale. In questo caso, probabilmente utilizzare queste API:

  1. RestAPI: creare
  2. risorsa: creare
  3. metodo: mettere
  4. integrazione: mettere
  5. integrationresponse: mettere
  6. methodResponse: put

È possibile utilizzare librerie di terze parti per integrare Gatew API Amazon con AWS Lambda come jaws-stack/JAWS o r7kamura/fluct.

2

Sì ... è assolutamente possibile. Di seguito è riportato un codice node.js che utilizza AWS-SDK per node.js. Qui sto facendo un POST per l'integrazione del metodo. Ora ci sono alcune cose che ti serviranno. Spero che questo aiuti ... buona fortuna!

La ResourceId del metodo che si sta utilizzando per il gateway API

Il gateway API REST Id

L'ARN del Ruolo Invoke che è in grado di richiamare la vostra funzione lambda

L'ARN della funzione Lambda che desideri integrare.

var AWS = require('aws-sdk'); 

api = new AWS.APIGateway(); 

var params = { 
    httpMethod: 'POST', 
    resourceId: [YOUR RESOURCE ID], 
    restApiId: [YOUR REST API ID], 
    type: 'AWS', 
    uri: [YOUR LAMBDA FUNCTION ARN], 
    integrationHttpMethod: 'POST', 
    credentials : [YOUR INVOKE ROLE ARN] 
}; 

api.putIntegration(params, function (err, data) { 
    if (err) { 
     console.log('AWS Error', err); 
    } else { 
     console.log('Put Integration Method Created', data); 
    } 
}); 
+0

Grazie Kevin! L'uri non è stato facile da capire, quindi ecco una descrizione più dettagliata nel caso in cui aiuti qualcuno: --uri arn: aws: apigateway: aws-region: lambda: path/2015-03-31/functions/arn: aws : lambda: AWS-regione: AWS-acct-id: funzione: your-lambda-nome-funzione/invocazioni –

0

È possibile puntare l'endpoint API per una funzione lambda. Durante la creazione di un nuovo metodo HTTP nel gateway API, selezionare "Tipo di integrazione" come "Funzione Lambda", quindi selezionare la funzione Lambda da richiamare.

La principale sfida sarebbe quella di mappare i parametri di input API all'oggetto modello Lambda, è possibile definire manualmente il mapping o fornire uno schema modello (utilizza json-schema).

Esempio mappatura:

{ 
    "firstname" : "$input.params('firstname')", 
    "lastname" : "$input.params('lastname')" 
} 

consultare this blog postale per step-by-step tutorial scritto per Java 8.