2015-01-03 31 views
34

Có thể kết nối từ một hàm AWA Lambda với một cụm Redis ElastiCache không?Kết nối với cụm ElastiCache từ hàm AWS Lambda

Tôi không thể hiểu được đó có phải là sự cố cấu hình hay không đơn giản là không thể.

PS: Tôi đã thử nghiệm từ phiên bản EC2 và tôi có thể kết nối với nút Redis. Ngoài ra, hàm Lambda và nút Redis nằm trong cùng một vùng.


UPDATE (09 tháng 10 năm 2015):

Amazon công bố VPC cho các chức năng AWS Lambda. Details here

Điều này có nghĩa là giờ đây chúng tôi có thể truy cập bất kỳ tài nguyên nào trong AWS sau nhóm bảo mật VPC, bao gồm máy ElastiCache và RDS.

CẬP NHẬT (ngày 11 tháng 2 năm 2016): Amazon đã khởi chạy VPC cho AWS Lambda.

https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-within-a-vpc-using-aws-lambda/

+0

Không có hạn chế kỹ thuật nào để kết nối từ Lambda với dịch vụ bên ngoài. Nếu bạn đang sử dụng thư viện của bên thứ ba, bạn phải đưa chúng vào tệp ZIP của bạn và các thư viện này phải có khả năng chạy trên Linux. Bạn có thể đưa ra một mẫu mã và thông báo lỗi không? Câu hỏi của bạn chưa đủ yếu tố để giúp bạn –

+1

Tôi biết Lambda có thể kết nối với các dịch vụ bên ngoài. Câu hỏi đặt ra là nếu ElastiCache cho phép các hàm Lambda kết nối với các cụm của nó. –

+2

Nếu nhóm bảo mật của bạn được thiết lập chính xác, không có sự khác biệt từ điểm xem bộ đệm của Elastic Cache. Đây chỉ là kết nối TCP đơn giản - không có sự khác biệt trong kết nối đến từ Lambda hoặc bất kỳ dịch vụ nào khác –

Trả lời

12

Mở rộng trên @ bình luận RohitChatterjee ở đây có đầy đủ các trích dẫn từ tài liệu AWS tại http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/GettingStarted.AuthorizeAccess.html

"cụm Tất cả ElastiCache chỉ có thể được truy cập từ một thể hiện của Amazon EC2. Một cụm và dụ Amazon EC2 liên quan của nó phải Trong cùng một đám mây riêng ảo của Amazon (VPC) Nếu bạn phải truy cập một cụm ElastiCache từ một nơi nào đó ngoài một cá thể Amazon EC2 trong cùng một VPC, như một giải pháp thay thế bạn có thể thiết lập một hoặc nhiều máy chủ Amazon EC2 bên trong VPC của bộ đệm hoạt động như một proxy cho thế giới bên ngoài Việc thiết lập một máy chủ sẽ bổ sung thêm một bước nhảy mạng bổ sung hoặc chi phí và chi phí bổ sung cho Lớp cổng Bảo mật (SSL), hoặc cả hai. chi phí là nhỏ cho nhiều trường hợp sử dụng. Bạn phải cấp proxy Amazon EC2 truy cập dụ để cluster của bạn."

Vì vậy, không AWS Lambda không thể kết nối trực tiếp đến một cụm elasticache.
Bạn phải sử dụng một EC2 như một proxy. Bạn có thể thiết lập một đơn giản http_proxy trên một trong những trường hợp của bạn hoặc làm cổng chuyển tiếp với cả hai DNAT và SNAT như mô tả về câu trả lời này https://serverfault.com/a/586553

+5

Kể từ tháng 2 năm 2016, AWS đã công bố [VPC cho Lambda] (https://aws.amazon.com/about-aws/whats-new/2016/02/access-resources-within-a-vpc-using-aws -lambda /). –

1

Tôi đã gặp vấn đề tương tự. Tôi không tìm thấy một giải pháp trực tiếp mà thay vào đó sử dụng một hàm Lambda để kết nối với một máy chủ EC2 bằng cách sử dụng socket.io khá dễ dàng và phát ra một sự kiện cho máy chủ EC2 đó.

Khi máy chủ EC2 nhận được sự kiện, nó thực hiện nhiệm vụ Redis cần thiết (dọn dẹp cơ sở dữ liệu sau khi tạo hình thu nhỏ hình ảnh).

Hy vọng điều này sẽ hữu ích! Nếu bất cứ ai phát hiện ra làm thế nào để kết nối với ElastiCache từ Lambda trực tiếp tôi vẫn muốn biết!

3

Thiết lập một HTTP Proxy hoặc iptables sẽ không làm việc vì những lý do sau: các cuộc gọi

Redis không HTTP và sẽ không được xử lý bởi các proxy HTTP iptables (hoặc bất kỳ cổng nào) chuyển tiếp cho rằng vấn đề) sẽ hoặc sẽ không chấp nhận một tên miền như là điểm đến hoặc là rất kém hiệu quả do độ phân giải DNS yêu cầu mỗi lần.

Phương pháp tốt nhất và thuận tiện là cài đặt twemproxy trong máy EC2 và định tuyến các yêu cầu của bạn thông qua nó. Như một phần thưởng, bạn đột nhiên đã triển khai một chiến lược sharding tuyệt vời là tốt.

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