2015-10-11 16 views
16

Tôi hiện đang viết hàm lambda Node.js, trong đó tôi muốn ghi lại địa chỉ IP công khai của người yêu cầu đến. Tôi đã xem qua cả API Gateway và tài liệu Lambda cả ngày, nhưng không tìm thấy giải pháp nào cả.Làm cách nào để truy xuất địa chỉ IP công khai của người dùng qua Cổng API Amazon + Lambda (nút)

Đối tượng lambda event có bao gồm siêu dữ liệu yêu cầu tôi có thể sử dụng để trích xuất IP của người dùng không?

Trả lời

23

Dưới đây là một minh họa đơn giản về việc sử dụng API Gateway $context.identity.sourceIp trong một hàm Lambda.

API Mapping mẫu:

{ 
    "sourceIP" : "$context.identity.sourceIp" 
} 

Lambda chức năng:

'use strict'; 
console.log('Loading function'); 
exports.handler = (event, context, callback) => { 
    console.log('SourceIP =', event.sourceIP); 
    callback(null, event.sourceIP); 
}; 
+0

Điều này thật tuyệt vời. Cảm ơn bạn đã gửi thông tin bản đồ =) – rdegges

+0

FYI: Đối với tích hợp proxy, API Gateway chuyển toàn bộ yêu cầu đến phụ trợ và bạn không có bất kỳ tùy chọn nào để sửa đổi hành vi chuyển tiếp. http://docs.aws.amazon.com/apigateway/latest/developerguide/integration-passthrough-behaviors.html?shortFooter=true –

+4

Đối với tích hợp proxy Lambda, IP nguồn được bao gồm trong sự kiện được chuyển đến hàm. Ví dụ: event.requestContext.identity.sourceIp –

8

Trong Gateway API, đó là giá trị

$context.identity.sourceIp 

http://docs.aws.amazon.com/apigateway/latest/developerguide/api-gateway-mapping-template-reference.html#context-variable-reference

Bạn có thể vượt qua mà qua để Lambda của bạn thông qua một mẫu bản đồ.

+0

Tuyệt. Nhưng, làm thế nào để tôi tham khảo giá trị truyền qua trong hàm Lambda của tôi? – AaronBaker

+1

Tôi đã thử làm bằng cách ánh xạ mẫu, đã làm gần như tất cả mọi thứ, nhưng điều đó không làm việc, Có bất kỳ tham chiếu từng bước rõ ràng hoặc một ví dụ mà có thể nói về nó? –

5

Sửa

Cách tốt hơn là thực sự để kiểm tra

event['requestContext']['identity']['sourceIp'] 

Bạn cũng có thể nhận được User-Agent so với cùng đối tượng

event['requestContext']['identity']['userAgent'] 

Original câu trả lời

Tính đến tháng 9 năm 2017, bạn có thể tạo một phương pháp trong API Gateway với Lambda Proxy tích hợp, điều này sẽ cung cấp cho bạn truy cập vào

events['headers']['X-Forwarded-For'] 

Mà sẽ giống như thế 1.1.1.1,214.25.52.1

IP đầu tiên 1.1.1.1 là địa chỉ IP công khai của người dùng của bạn.

+0

Đây là câu trả lời thực sự, nếu bạn đang sử dụng tích hợp proxy Lambda. Dễ dàng hơn nhiều so với việc thêm ánh xạ cho mỗi phương thức. –

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