2015-08-16 10 views
7

Udostępniam funkcję Lambda AWS do publicznych żądań HTTP, ustawiając punkt końcowy bramy AWS API wskazujący na to.Czy można skonfigurować punkt końcowy bramy AWS API dla funkcji Lambda za pomocą interfejsu API AWS?

Istnieją dwie części do tego:

  • Tworzenie i przesłać moja funkcja AWS Lambda
  • Ustaw API bramy do punktu A końcowy HTTP do mojej funkcji Lambda

chcę wykonaj obie części za pomocą wywołań interfejsu API zamiast interfejsu internetowego. Mogę to zrobić w pierwszej części przy użyciu AWS SDK i AWS CLI.

Jednak w drugiej części utknąłem. Nie znalazłem wzmiankę o API bramy kiedy patrząc przez AWS SDK for node.js lub AWS CLI

Czy istnieje sposób, aby skonfigurować API bramy końcowy dla funkcji lambda, programowo za pomocą interfejsu API AWS?

+0

wsparcia CLI/SDK dla 'API Gateway' nie jest jeszcze gotowy. Osobiście oczekuję, że więcej szczegółów na temat tych funkcji zostanie opublikowanych na 're: Invent 2015'. – kixorz

+1

Ponadto, 'CloudFormation' jest czymś, co może bardzo pomóc w przyszłych wysiłkach. – kixorz

Odpowiedz

7

Tak, za pomocą interfejsu API AWS można skonfigurować punkty końcowe bramy Amazon API dla swoich funkcji AWS Lambda.

Pakiet SDK AWS dla JavaScript w Node.js i AWS CLI nie obsługuje jeszcze usługi Amazon API Gateway, ale można je skonfigurować za pomocą Amazon API Gateway REST API bez oficjalnego zestawu SDK. W tym przypadku, prawdopodobnie będzie korzystać z tych interfejsów API:

  1. restapi: tworzenie
  2. zasobu: tworzenie
  3. metody: put
  4. integracja: umieścić
  5. integrationresponse: umieścić
  6. methodresponse: put

Możesz chcieć użyć bibliotek zewnętrznych w celu integracji Amazon API Gatew ay z AWS Lambda, takimi jak jaws-stack/JAWS lub r7kamura/fluct.

2

Tak ... jest to absolutnie możliwe. Poniżej znajduje się kod node.js, który używa pakietu AWS-SDK dla node.js. Robię POST tutaj dla integracji metody. Teraz potrzebujesz kilku rzeczy. Mam nadzięję, że to pomogło, powodzenia!

RESOURCEID metody używasz do API bramy

Gateway API Reszta Id

ARN roli powołują się na to może powołać się na swoją funkcję lambda,

ARN funkcji Lambda, którą chcesz zintegrować.

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

Dzięki Kevin! Uri nie było łatwe do wymyślenia, więc tutaj jest bardziej szczegółowy opis, na wypadek gdyby ktoś pomógł: --uri arn: aws: apigateway: aws-region: lambda: path/2015-03-31/functions/arn: aws : lambda: aws-region: aws-acct-id: function: your-lambda-function-name/invocations –

0

Można wskazać swój punkt końcowy API do funkcji lambda. Podczas tworzenia nowej metody HTTP w Bramie API wybierz "Typ integracji" jako "Funkcja Lambda", a następnie wybierz funkcję Lambda, którą chcesz wywołać.

Głównym wyzwaniem byłoby odwzorowanie parametrów wejściowych interfejsu API na obiekt modelu Lambda, można zdefiniować odwzorowanie ręcznie lub udostępnić schemat modelu (używa json-schema).

Przykład mapowania:

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

Patrz this blog post na tutorialu krok po kroku napisane dla Java 8.

Powiązane problemy