web-dev-qa-db-ja.com

Amazonの外部でAmazon Elasticache Redisに接続できますか

VPCのElasticache redisインスタンスからEC2インスタンスに接続できますが、Elasticache Redisノードに接続する方法があるかどうかを知りたいローカルの開発者セットアップや他のベンダーが提供するVPSインスタンスなど、Amazon EC2インスタンスの外部。

現在、私のローカル設定から試す場合:

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

しばらくしてからタイムアウトになります。

72
Loic Duros

いいえ、トンネルなどの「トリック」に頼らずに済ませることはできません。これはテストには問題ないかもしれませんが、遅延/オーバーヘッドが追加された超高速キャッシュを使用することの本当の利点は失われます。

... anVPCの内部または外部のAmazon ElastiCacheクラスターは、インターネットからのアクセスを許可されません

ここから: http://aws.Amazon.com/elasticache/faqs/#Can_I_access_Amazon_ElastiCache_from_outside_AWS

EDIT 2018:上記の回答は記述されたときは正確でしたが、いくつかの構成では、約1/2の方向を使用して外部からredisキャッシュにアクセスすることが可能になりましたこのページの方法: https://docs.aws.Amazon.com/AmazonElastiCache/latest/red-ug/accessing-elasticache.html

61
E.J. Brennan

SSHポート転送でうまくいくはずです。クライアントからこれを実行してみてください。

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

次に、クライアントから

redis-cli -h 127.0.0.1 -p 6379

わたしにはできる。

Redisのデフォルトポートは6379ではなく6739であることに注意してください。また、Redisインスタンスへの接続に使用しているEC2ノードのセキュリティグループがCacheセキュリティグループに許可されていることを確認してください。

また、AWSはクラスターへのアクセスをサポートするようになりました詳細 here

77
Rico

これらの回答は古くなっています。

次の手順に従って、AWSの外部でelastic-cacheにアクセスできます。

  1. キャッシュクラスターと同じVPCでパブリックサブネットにNATインスタンスを作成します。
  2. キャッシュクラスターとNATインスタンスのセキュリティグループルールを作成します。
  3. ルールを検証します。
  4. NATインスタンスにiptablesルールを追加します。
  5. 信頼できるクライアントがクラスターに接続できることを確認します。
  6. Iptables構成を保存します。

詳細については、awsガイドを参照してください。

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

21
cscan

それほど古い質問ではありませんが、私は同じ問題に自分で走って解決しました:

場合によっては、開発上の理由から、外部からアクセスする必要があります(単純なバグ修正のためだけにマルチデプロイメントを避けるためですか?)

AmazonはEC2を外部世界のプロキシとして使用する新しいガイドを公開しました:

http://docs.aws.Amazon.com/AmazonElastiCache/latest/UserGuide/Access.Outside.html

幸運を!

6
Shay Elkayam

HAProxyを予約済みプロキシサーバーとして使用しています。

AWS外のシステム--->インターネット->パブリックIPを使用したHAProxy-> Amazon Redis(Elasticache)

それを行う別の正当な理由があることに注意してください(その時点で)

Amazon DNSフェールオーバーをサポートしないnode.jsクライアントを使用するため、クライアントドライバーはdnsルックアップをサポートしません。 redisが失敗した場合、クライアントドライバーは古いマスター(フェールオーバー後のスレーブ)への接続を維持します。

HAProxyを使用することで、この問題を解決しました。

現在、最新のioredisドライバーを使用して、Amazon dnsフェイルオーバーをサポートしています。

4
teddychan

ところで、もし誰かがWindows EC2ソリューションを望んでいるなら、DOSプロンプトでこれらを試してください(Windows EC2マシン上で):

ポート転送を追加するには

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

ポート転送されたポートを一覧表示するには

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

Ipv4でリッスンします:ipv4に接続します:

アドレスポートアドレスポート


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

ポート転送を削除するには

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

4
sming

これは、すべての汚い作業を行うソリッドノードスクリプトです。動作することをテストおよび検証しました。

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

使用方法:uzys-elasticache-tunnel [オプション] [コマンド]

コマンド:

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

オプション:

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

使用例

  • start-uzys-elasticache-tunnel start ./config.json
  • stop-uzys-elasticache-tunnel stop
  • ステータス-uzys-elasticache-tunnelステータス
3
TWilly

VPCインスタンスからクラシッククラスターに直接アクセスすることはできません。回避策は、クラシックインスタンスでNATを構成することです。

NATには単純なTCPプロキシが必要です

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
1
Malinga

このAmazonドキュメントを使用して解決したのは、別のec2マシンにstunnelをインストールする必要があるということです。

https://aws.Amazon.com/premiumsupport/knowledge-center/elasticache-connect-redis-node/

0
ShreePrakash