Bạn có thể kết nối với Amazon ElastiСache Redis bên ngoài Amazon không?


90

Tôi có thể kết nối với phiên bản ElastiCache Redis trong VPC từ phiên bản EC2 . Nhưng tôi muốn biết liệu có cách nào để kết nối với nút ElastiCache Redis bên ngoài các phiên bản Amazon EC2, chẳng hạn như từ thiết lập nhà phát triển cục bộ của tôi hoặc các phiên bản VPS do các nhà cung cấp khác cung cấp hay không.

Hiện tại khi thử từ thiết lập cục bộ của tôi:

redis-cli -h my-node-endpoint -p 6379

Tôi chỉ nhận được một thời gian chờ sau một thời gian.

Câu trả lời:


75

Không, bạn không thể không dùng đến các 'thủ thuật' chẳng hạn như đường hầm, có thể OK để thử nghiệm nhưng sẽ giết chết bất kỳ lợi ích thực sự nào của việc sử dụng bộ đệm siêu nhanh với độ trễ / chi phí tăng thêm.

... Amazon ElastiCache Cluster, bên trong hoặc bên ngoài VPC, không bao giờ được phép truy cập từ Internet .

Từ đây: http://aws.amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

CHỈNH SỬA 2018: Câu trả lời ở trên là chính xác khi được viết, tuy nhiên bây giờ có thể với một số cấu hình để truy cập bộ nhớ đệm redis từ bên ngoài bằng cách sử dụng các hướng dẫn khoảng 1/2 chiều xuống trang này: https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
đây vẫn là trường hợp? Các tài liệu không còn nói điều này nữa - họ tuyên bố redis được điều chỉnh bởi các chính sách nhóm bảo mật tiêu chuẩn, nhưng tôi vẫn không thể truy cập vào nút redis của mình mặc dù vậy. Đánh nó đi. Tham chiếu vừa được chuyển đi: Amazon ElastiCache Nodes, được triển khai trong VPC, không bao giờ có thể được truy cập từ Internet hoặc từ Phiên bản EC2 bên ngoài VPC.
metalaureate

7
Tôi cảm thấy rằng 'kill' hơi mạnh. Ví dụ: chúng tôi không nhận được hiệu suất đáng kể khi chạy các ứng dụng của mình bên ngoài AWS (thông qua một đường hầm như vậy). Chi phí chung của đường hầm là rất nhỏ so với các hoạt động DB, tải trình duyệt, I / O đĩa, v.v.
sming


94

Chuyển tiếp cổng SSH nên thực hiện thủ thuật. Hãy thử chạy điều này từ khách hàng của bạn.

ssh -f -N -L 6379:<your redis node endpoint>:6379 <your EC2 node that you use to connect to redis>

Sau đó từ khách hàng của bạn

redis-cli -h 127.0.0.1 -p 6379

Nó làm việc cho tôi.

Xin lưu ý rằng 6379không phải là cổng mặc định cho redis 6739. Đồng thời, hãy đảm bảo rằng bạn cho phép nhóm bảo mật cho phép của nút EC2 mà bạn đang sử dụng kết nối với phiên bản redis của bạn vào nhóm bảo mật Cache của bạn.

Ngoài ra, AWS hiện hỗ trợ truy cập thông tin thêm về cụm của bạn tại đây


Cảm ơn bạn đã chỉ ra cổng, chỉ là lỗi đánh máy. Vì vậy, bạn đang nói rằng SSH đường hầm thông qua EC2 là cách duy nhất để có được quyền truy cập vào một nút co giãn bên ngoài Amazon? Cảm ơn,
Loic Duros

Điều đó chính xác giống như @EJBrennan đã đề cập trong câu trả lời khác.
Rico

Làm thế nào chúng tôi có thể thu hồi chuyển tiếp cổng ssh ...?
Muthukumar K

bạn có thể giết quá trình ssh. Trên Linux: kill -9 <pid>
Rico

27

Những câu trả lời này đã lỗi thời.

Bạn có thể truy cập bộ đệm đàn hồi bên ngoài AWS bằng cách làm theo các bước sau:

  1. Tạo một phiên bản NAT trong cùng một VPC như cụm bộ nhớ cache của bạn nhưng trong một mạng con công cộng.
  2. Tạo quy tắc nhóm bảo mật cho cụm bộ nhớ cache và phiên bản NAT.
  3. Xác thực các quy tắc.
  4. Thêm quy tắc iptables vào phiên bản NAT.
  5. Xác nhận rằng ứng dụng khách đáng tin cậy có thể kết nối với cụm.
  6. Lưu cấu hình iptables.

Để có mô tả chi tiết hơn, hãy xem hướng dẫn aws:

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws


Tôi không muốn có phiên bản NAT, tôi muốn kiểm tra nó trong một phút. Câu trả lời của Rico là chính xác những gì tôi muốn.
Lọc máu

6

Câu hỏi không quá cũ, tôi đã tự mình chạy đến vấn đề tương tự và giải quyết nó:

Đôi khi, vì những lý do đang phát triển, bạn cần truy cập từ bên ngoài (để tránh triển khai nhiều lần chỉ để sửa lỗi đơn giản?)

Amazon đã xuất bản một hướng dẫn mới sử dụng EC2 làm proxy cho thế giới bên ngoài:

https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html#access-from-outside-aws

Chúc may mắn!


3
Để tham khảo, cách tiếp cận mà Amazon đề cập là một phiên bản NAT.
russellpierce

FYI, từ các tài liệu: "Cách tiếp cận này nên được sử dụng cho chỉ thử nghiệm và phát triển các mục đích Nó không được khuyến khích sử dụng sản xuất."
jasonjonesutah

1
Vâng, đó là sự thật @jasonjonesutah Tôi cũng đã đề cập điều này trong câu trả lời của mình. Một ý tưởng rất tồi cho việc sản xuất nhưng rất tuyệt vời để phát triển.
Shay Elkayam

4

Chúng tôi đang sử dụng HAProxy làm máy chủ proxy dành riêng.

Hệ thống của bạn bên ngoài AWS ---> Internet -> HAProxy với IP công cộng -> Amazon Redis (Elasticache)

Lưu ý rằng có một lý do chính đáng khác để làm điều đó (tại thời điểm đó)

Vì chúng tôi sử dụng ứng dụng khách node.js, không hỗ trợ Amazon DNS bị lỗi, trình điều khiển ứng dụng khách không hỗ trợ tra cứu lại dns. Nếu quá trình làm lại không thành công, trình điều khiển máy khách sẽ tiếp tục kết nối với cái chính cũ, là máy chủ sau khi không thành công.

Bằng cách sử dụng HAProxy, nó đã giải quyết được vấn đề đó.

Hiện đang sử dụng trình điều khiển ioredis mới nhất, nó hỗ trợ chuyển đổi dự phòng amazon dns.


1
cập nhật cho node.js, hiện ioredis hỗ trợ DNS bị lỗi. Nếu bạn sử dụng tên máy chủ DNS, nó có thể tự động bị lỗi nếu không có HAProxy.
teddychan

4

BTW nếu bất kỳ ai muốn giải pháp windows EC2, hãy thử các giải pháp này tại dấu nhắc DOS (trên máy windows EC2 đã nói):

Để thêm chuyển tiếp cổng

C: \ Users \ Administrator>netsh interface portproxy add v4tov4 listenport=6379 listenaddress=10.xxx.64.xxx connectport=6379 connectaddress=xxx.xxxxxx.ng.0001.use1.cache.amazonaws.com

Để liệt kê các cổng chuyển tiếp cổng

C: \ Users \ Administrator>netsh interface portproxy show all

Nghe trên ipv4: Kết nối với ipv4:

Cổng địa chỉ cổng địa chỉ


10.xxx.128.xxx 6379 xxx.xxxxx.ng.0001.use1.cache.amazonaws.com 6379

Để loại bỏ chuyển tiếp cổng

C: \ Users \ Administrator>netsh interface portproxy delete v4tov4 listenport=6379 listenaddress=10.xxx.128.xxx


3

Đây là một tập lệnh nút rắn sẽ thực hiện tất cả các công việc khó khăn cho bạn. Đã kiểm tra và xác minh nó hoạt động.

https://www.npmjs.com/package/uzys-elasticache-tunnel

Cách sử dụng Cách sử dụng: uzys -asticache-tunnel [options] [command]

Lệnh:

start [filename]  start tunneling with configuration file (default: config.json)
stop              stop tunneling
status            show tunneling status

Các tùy chọn:

-h, --help     output usage information
-V, --version  output the version number

Ví dụ sử dụng

  • start - uzys -asticache-tunnel start ./config.json
  • dừng lại - uzys -asticache-tunnel stop
  • trạng thái - tình trạng uzys-co giãn-đường hầm

1

Nó không thể truy cập trực tiếp cụm cổ điển từ một phiên bản VPC. Giải pháp thay thế sẽ là định cấu hình NAT trên phiên bản cổ điển.

NAT cần có một proxy tcp đơn giản

YourIP=1.2.3.4
YourPort=80
TargetIP=2.3.4.5
TargetPort=22

iptables -t nat -A PREROUTING --dst $YourIP -p tcp --dport $YourPort -j DNAT \
--to-destination $TargetIP:$TargetPort
iptables -t nat -A POSTROUTING -p tcp --dst $TargetIP --dport $TargetPort -j SNAT \
--to-source $YourIP
iptables -t nat -A OUTPUT --dst $YourIP -p tcp --dport $YourPort -j DNAT \
--to-destination $TargetIP:$TargetPort

Bạn cũng đã đưa ra câu trả lời tương tự trong bài đăng được đề cập bên dưới, có yêu cầu khác nhau. Làm thế nào nó có thể hoạt động trong kịch bản nhất định ?? stackoverflow.com/questions/38066908/…
abby37

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.