2015-08-16 22 views
7

Tôi đang hiển thị hàm AWS Lambda cho các yêu cầu HTTP công khai bằng cách thiết lập điểm cuối API cổng AWS trỏ đến nó.Có thể thiết lập điểm cuối API Cổng AWS cho một hàm Lambda, sử dụng API AWS không?

Có hai phần như sau:

  • Tạo và tải lên chức năng AWS Lambda tôi
  • Thiết lập API Gateway để chỉ một thiết bị đầu cuối HTTP đến chức năng Lambda tôi

Tôi muốn làm cả hai phần bằng cách sử dụng các cuộc gọi API thay vì giao diện web. Tôi có thể làm điều đó cho phần đầu tiên bằng cách sử dụng AWS SDK và AWS CLI.

Tuy nhiên, đối với phần thứ hai, tôi bị kẹt. Tôi chưa tìm thấy đề cập đến API Gateway khi xem qua AWS SDK for node.js hoặc AWS CLI

Có cách nào để thiết lập điểm cuối API Gateway cho hàm Lambda, lập trình bằng API AWS không?

+0

CLI/SDK hỗ trợ cho 'API Gateway' là chưa sẵn sàng. Cá nhân tôi mong đợi thêm chi tiết về các tính năng này sẽ được xuất bản tại 're: Invent 2015'. – kixorz

+1

Ngoài ra, 'CloudFormation' là thứ có thể giúp bạn trong những nỗ lực trong tương lai. – kixorz

Trả lời

7

Có, có thể thông qua API của AWS để thiết lập các điểm cuối API API của Amazon cho các hàm AWS Lambda của bạn.

Mặc dù SDK AWS cho JavaScript trong Node.js và AWS CLI chưa hỗ trợ Amazon API Gateway nhưng bạn có thể thiết lập chúng bằng cách sử dụng Amazon API Gateway REST API không có SDK chính thức. Trong trường hợp này, có thể bạn sẽ sử dụng các API:

  1. restapi: tạo
  2. nguồn: tạo
  3. phương pháp: đặt
  4. tích hợp: đặt
  5. integrationresponse: đặt
  6. methodresponse: đặt

Bạn có thể muốn sử dụng thư viện của bên thứ ba để tích hợp Amazon API Gatew ay với AWS Lambda chẳng hạn như jaws-stack/JAWS hoặc r7kamura/fluct.

2

Có ... hoàn toàn có thể. Dưới đây là một số mã node.js sử dụng AWS-SDK cho node.js. Tôi đang làm một POST ở đây để tích hợp phương thức. Bây giờ có một vài điều bạn sẽ cần. Hy vọng điều này sẽ giúp ... chúc may mắn!

Các RESOURCEID của phương pháp bạn đang sử dụng cho các API Gateway

The Gateway API Nghỉ ngơi Id

Các ARN của Role Gọi đó là khả năng gọi Function Lambda của bạn

ARN của hàm Lambda bạn muốn tích hợp.

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

Cảm ơn Kevin! Các uri đã không dễ dàng để tìm ra, vì vậy đây là một mô tả chi tiết hơn trong trường hợp nó giúp một người nào đó: --uri arn: aws: apigateway: aws-region: lambda: path/2015-03-31/functions/arn: aws : lambda: aws-region: aws-acct-id: Hàm: lambda-function-name/invocations của bạn –

0

Bạn có thể trỏ điểm cuối API của bạn đến một hàm lambda. Trong khi tạo phương thức HTTP mới trong API Gateway, chọn "Kiểu tích hợp" là "Hàm lambda", sau đó chọn hàm Lambda bạn cần gọi.

Thách thức chính là ánh xạ các tham số đầu vào API cho đối tượng mô hình Lambda, bạn có thể xác định ánh xạ theo cách thủ công hoặc cung cấp giản đồ mô hình (sử dụng json-schema).

Ví dụ lập bản đồ:

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

Tham khảo this blog bài cho từng bước hướng dẫn bằng văn bản cho Java 8.

Các vấn đề liên quan