Amazon 외부의 Amazon ElastiСache Redis에 연결할 수 있습니까?


90

EC2 인스턴스 에서 VPCElastiCache Redis 인스턴스에 연결할 수 있습니다. 하지만 로컬 개발 설정 또는 다른 공급 업체에서 제공하는 VPS 인스턴스 와 같이 Amazon EC2 인스턴스 외부의 ElastiCache Redis 노드에 연결하는 방법이 있는지 알고 싶습니다 .

현재 내 로컬 설정에서 시도 할 때 :

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

시간이 지나면 시간이 초과됩니다.

답변:


75

아니요, 터널과 같은 '트릭'에 의지하지 않고서는 안됩니다. 테스트에는 적합 할 수 있지만 대기 시간 / 오버 헤드가 추가 된 초고속 캐시 사용의 실질적인 이점을 없앨 수 있습니다.

... VPC 내부 또는 외부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#access-from-outside-aws


1
여전히 그렇습니까? 문서는 더 이상 이것을 말하지 않습니다. 그들은 redis가 표준 보안 그룹 정책에 의해 관리된다고 주장하지만 그래도 여전히 redis 노드에 액세스 할 수 없습니다. 스트라이크. 방금 이동 한 참조 : VPC 내에 배포 된 Amazon ElastiCache 노드는 인터넷이나 VPC 외부의 EC2 인스턴스에서 액세스 할 수 없습니다.
metalaureate 2015 년

7
'킬'이 좀 강하다고 느낍니다. 예를 들어, AWS 외부에서 (이러한 터널을 통해) 앱을 실행할 때 눈에 띄는 성능 저하가 발생하지 않습니다. 터널의 오버 헤드는 DB 작업, 브라우저로드, 디스크 I / O 등에 비해 아주 적습니다.
sming jul


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

그것은 나를 위해 작동합니다.

레디 스에 대한 그 기본 포트가 있습니다 6379없습니다 6739. 또한 Redis 인스턴스를 캐시 보안 그룹에 연결하는 데 사용중인 EC2 노드의 보안 그룹을 허용하도록 허용해야합니다.

또한 AWS는 이제 여기에서 클러스터에 대한 추가 정보 액세스를 지원합니다.


포트를 지적 해 주셔서 감사합니다. 오타 일뿐입니다. 그렇다면 EC2를 통한 SSH 터널링이 Amazon 외부의 elasticache 노드에 대한 액세스 권한을 얻는 유일한 방법이라는 말입니까? 감사합니다.
Loic Duros 2014

다른 답변에서 언급 한 @EJBrennan과 마찬가지로 정확합니다.
Rico

ssh 포트 포워딩을 어떻게 취소 할 수 있습니까?
Muthukumar 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 인스턴스가 필요하지 않습니다. 잠시 확인하고 싶습니다. Rico의 대답은 정확히 내가 원했던 것입니다.
Pysis 19

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

1
예, 그것은 사실입니다 @jasonjonesutah 나는 또한 이것을 내 대답에서 언급했습니다. 프로덕션에는 매우 좋지 않지만 개발에는 우수합니다.
Shay Elkayam

4

HAProxy를 예약 된 프록시 서버로 사용하고 있습니다.

AWS 외부의 시스템 ---> 인터넷-> 퍼블릭 IP가있는 HAProxy-> Amazon Redis (Elasticache)

그렇게해야하는 또 다른 좋은 이유가 있음을 주목하십시오 (당시).

Amazon DNS 장애 조치를 지원하지 않는 node.js 클라이언트를 사용하기 때문에 클라이언트 드라이버는 DNS 조회를 다시 지원하지 않습니다. redis가 실패하면 클라이언트 드라이버는 장애 조치 후 슬레이브 인 이전 마스터에 계속 연결합니다.

HAProxy를 사용하여 그 문제를 해결했습니다.

이제 최신 ioredis 드라이버를 사용하여 amazon dns 장애 조치를 지원합니다.


1
node.js 업데이트, 이제 ioredis는 DNS 장애 조치를 지원합니다. DNS 호스트 이름을 사용하는 경우 HAProxy없이 자동 장애 조치가 될 수 있습니다.
teddychan

4

BTW Windows EC2 솔루션을 원하는 사람이 있다면 DOS 프롬프트에서 다음을 시도하십시오 (Windows EC2 시스템에서).

포트 전달을 추가하려면

C : \ 사용자 \ 관리자>netsh interface portproxy add v4tov4 listenport=6379 listenaddress=10.xxx.64.xxx connectport=6379 connectaddress=xxx.xxxxxx.ng.0001.use1.cache.amazonaws.com

포트 전달 포트를 나열하려면

C : \ 사용자 \ 관리자>netsh interface portproxy show all

ipv4에서 듣기 : ipv4에 연결 :

주소 포트 주소 포트


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

포트 전달을 제거하려면

C : \ 사용자 \ 관리자>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

사용 예

  • 시작-uzys-elasticache-tunnel start ./config.json
  • 중지-uzys-elasticache-tunnel 중지
  • 상태-uzys-elasticache-tunnel 상태

1

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

요구 사항이 다른 아래 언급 된 게시물에서도 동일한 답변을 제공했습니다. 주어진 시나리오에서도 어떻게 작동 할 수 있습니까? stackoverflow.com/questions/38066908/…
abby37

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.