Amazonの外部でAmazonElastiСacheRedisに接続できますか?


90

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

現在、私のローカル設定から試してみると:

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

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

回答:


75

いいえ、トンネルなどの「トリック」に頼らなければなりません。これはテストには問題ないかもしれませんが、レイテンシー/オーバーヘッドが追加された超高速キャッシュを使用することの本当のメリットはありません。

... VPCの内外を問わずAmazonElastiCacheクラスターにインターネットからアクセスすることは許可されていません

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

編集2018:上記の回答は書かれた時点で正確でしたが、このページの約1/2の方向を使用して、外部からredisキャッシュにアクセスするように設定することで可能になりました:https://docs.aws.amazon.com/AmazonElastiCache /latest/red-ug/accessing-elasticache.html#access-from-outside-aws


1
これはまだ当てはまりますか?ドキュメントはもはやこれを述べていません-彼らはredisが標準のセキュリティグループポリシーによって管理されていると主張していますが、それにもかかわらず私はまだ私のredisノードにアクセスすることができません。それを打つ。移動したばかりの参照:VPC内にデプロイされたAmazon ElastiCacheノードは、インターネットまたはVPC外のEC2インスタンスからアクセスすることはできません。
メタラウレート2015年

7
「殺す」は少し強い気がします。たとえば、AWSの外部で(このようなトンネルを介して)アプリを実行しても、パフォーマンスに大きな影響はありません。トンネルのオーバーヘッドは、DB操作、ブラウザーの負荷、ディスクI / Oなどと比較してごくわずかです。
2016


94

SSHポートフォワーディングでうまくいくはずです。クライアントからこれを実行してみてください。

ssh -f -N -L 6379:<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ノードのセキュリティグループをキャッシュセキュリティグループに許可することを許可していることを確認してください。

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


ポートを指摘していただきありがとうございます。タイプミスです。それで、EC2を介したSSHトンネリングがAmazonの外部のelasticacheノードにアクセスする唯一の方法であると言っていますか?ありがとう、
Loic Duros 2014

@EJBrennanが他の回答で述べたようにそれは正しいです。
リコ

sshポートフォワーディングを取り消すにはどうすればよいですか...?
ムトゥクマールK

sshプロセスを強制終了できます。Linuxの場合: kill -9 <pid>
Rico

27

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

次の手順に従って、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


NATインスタンスは必要ありません。少しの間、チェックしたいと思います。リコの答えはまさに私が欲しかったものです。
Pysis

6

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

場合によっては、開発上の理由から、外部からアクセスする必要があります(単純なバグ修正のためだけに複数の展開を回避するためですか?)

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

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

幸運を!


3
参考までに、Amazonが言及しているアプローチはNATインスタンスです。
russellpierce 2015

参考までに、ドキュメントから:「このアプローチはテストと開発の目的でのみ使用する必要があります。本番環境での使用はお勧めしません」
jasonjonesutah 2016

1
はい、それは本当です@jasonjonesutah私も私の答えでこれに言及しました。生産には非常に悪い考えですが、開発には優れています。
Shay Elkayam 2016

4

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

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

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

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

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

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


1
node.jsの更新、現在ioredisはDNSフェイルオーバーをサポートしています。DNSホスト名を使用する場合、HAProxyなしで自動フェイルオーバーできます。
teddychan 2016年

4

ところで、誰かが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


3

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

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
  • 停止-uzys-elasticache-トンネル停止
  • ステータス-uzys-elasticache-tunnelステータス

1

VPCインスタンスからclassic-clusterに直接アクセスすることはできません。回避策は、クラシックインスタンスで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

下記の投稿でも同じ回答をしましたが、要件は異なります。与えられたシナリオでもどのように機能しますか?stackoverflow.com/questions/38066908/...
abby37

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.