2016-03-14 34 views
13

Tôi có một hàm lambda truy cập db Postgres của tôi trong RDS thông qua VPC. Sau khi nó truy vấn db, tôi muốn gửi thông báo đến SNS. Bởi vì hàm lambda của tôi tồn tại trong VPC của tôi, nó không thể truy cập SNS. Tôi có một cổng internet trên VPC của tôi. Tôi đọc qua tài liệu điểm cuối VPC và hiện tại chỉ hỗ trợ s3.Làm cách nào để AWS lambda trong VPC xuất bản thông báo SNS?

Có cách nào để xuất bản lên SNS trong hàm lambda trong VPC không?

Trả lời

7

Bạn sẽ cần một máy chủ NAT chạy trong VPC để định tuyến lưu lượng truy cập bên ngoài VPC. AWS hiện cung cấp managed NAT service giúp việc này trở nên dễ dàng hơn.

+0

Không thể hoàn thành kịch bản của tôi chỉ bằng cách có cổng internet trên VPC của tôi? Tôi đã đọc các tài liệu trên NAT và có vẻ như chỉ cần thêm các biện pháp bảo mật khi truy cập vào. – lawrence

+0

Không, bạn sẽ cần NAT để chuyển tiếp lưu lượng truy cập. Xem tài liệu về Câu hỏi thường gặp (https://aws.amazon.com/lambda/faqs/). – garnaat

+0

Tôi hiểu. Trong trường hợp của tôi, tôi nghĩ rằng việc thiết lập NAT là một chút không cần thiết, vì vậy tôi đã thay đổi trường hợp sử dụng của mình để ghi dữ liệu postgres của mình vào một tệp txt và tải nó lên s3 (thông qua điểm cuối VPC), sau đó sử dụng sự kiện đặt s3 kích hoạt các dịch vụ aws khác của tôi. Cảm ơn vì đầu vào của bạn. – lawrence

2

Cuối cùng tôi đã cố gắng làm cho nó hoạt động ...

Bí quyết là bạn PHẢI có 2 mạng con.

Công khai, với bảng định tuyến gửi lưu lượng truy cập đến Cổng Internet của VPC của bạn. Đặt NAT vào đó.

Và một tệp riêng tư, với bảng định tuyến gửi lưu lượng truy cập đến NAT. Đặt Lambdas vào đó. (BTW Làm một subnet nào có nghĩa là thiết lập các tùy chọn Auto-gán IP công cộng là Có.)

Nó được trình bày trong sơ đồ tổng quan này từ các tài liệu AWS:

http://docs.aws.amazon.com/AmazonVPC/latest/UserGuide/VPC_Scenario2.html#Configuration-2

1

Tôi biết điều này là cũ, nhưng đây là một tùy chọn khác hoạt động, cho những người không muốn cấu hình NAT. Thay vì cố gắng có hàm lambda bên trong VPC tương tác với SNS, chia thành 2 hàm lambda, như sau.

Function 1 nằm bên trong VPC và tương tác với cơ sở dữ liệu, trả về kết quả tương tác cơ sở dữ liệu của bạn (ví dụ: danh sách ID khớp với một số tiêu chí).

Function 2 nằm bên ngoài VPC, gọi Function 1, sau đó xử lý mảng giá trị và xuất bản thông báo SNS thích hợp (ví dụ: gửi thông báo dựa trên từng ID trong danh sách).

Sẽ rất tuyệt nếu có điểm cuối VPC cho SNS, nhưng vẫn vào cuối năm 2016 điều này có vẻ không đúng.

+1

Sự hiểu biết của tôi là 'Chức năng 1', nhờ vào bên trong VPC, sẽ mất quyền truy cập internet. Như vậy, 'Hàm 2' sẽ gọi' Hàm 1' như thế nào? – jonsibley

+2

'Hàm 2' có thể gọi' Hàm 1', miễn là chính sách thực thi 'Hàm 2' bao gồm các quyền để gọi' Hàm 1'. Theo như tôi hiểu, 'Chức năng 2' mất quyền truy cập internet theo nghĩa là nó không thể quay số ra, nó chỉ có thể truy cập những thứ khác bên trong VPC. (Nó vẫn có thể được truy cập bởi các hàm lambda bên ngoài với các điều khoản thích hợp.) – abbm

+0

Tôi đồng ý rằng SNS cần hỗ trợ VPC – Tom

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