2019년 2월 7일 목요일

로컬 doctor 환경에서 elasticcache 사용하기.

로컬 doctor 환경에서 elasticcache 사용하기. 


지금 개발하고 있는 서비스 스펙 구성이 elasticbeanstalk을 기반으로 Multiple docker 환경으로 서비스가 구성되어 있습니다. 

이번에 cache가 필요한 상황이라 사용하기 위해서 redis를 container를 한개 더 서비스안에 구성해서 작업을 진행 할까 하다가 그렇게 되면 scaling 이슈나 백업과 같은 운영 이슈가 발생할것 같아서
(핑계지만 지금 서버 개발자가 저 혼자예요 ㅠㅠ. 그래서 아직 오케스트레이션도 아직 세팅 해놓지 않았습니다. )

열심히 리서치 중? (사실 옵션이 별로 없었습니다.)

elasticcache를 사용하기로 결정 했고, AWS console을 통해서 elasticcache를 세팅 했습니다.

이제 세팅이 완료 되었으니 연결이 되나 테스트를 해봐야겠죠? 그래서 로컬 환경에서 테스트를 진행해볼려고 하는데...
Connection refused error가 발생하는 겁니다. ..

또 다시 구글 검색 시작...
검색해보니 elasticcache의 경우에는 vpc 안에서만 연결이 된다고 하더군요.

아니면 elastic beanstalk에 config를 조정해서 beanstalk에서 사용할수 있는 elasticcache를 따로 세팅하는 것이였습니다.

나는 내꺼 만들어 놨는데?? 이거 쓰고 싶은데 ㅠㅠ. 이상한 오기가 생겨서 그럼 어떻게 하지? 생각해보다가 elastic beanstalk과 elasticcache 사이는 같은 vpc 망 안에 있어서 security group에서 port만 열어주면 되는것을 확인해서 포트를 열어주고 이론상으로는 연결이 다 된것 같은데, 혹시라도 테스트를 해보고 싶어서 어떻게 하면 할수 있을까 고민하던중에. 찾아보니,

beanstalk에 있는 인스턴스와 로컬 사이에 ssh tunneling을 연결하고, beanstalk과 elasticcache 사이에는 port forwarding을 통해서 6379 포트를 로컬에 연결 시켜서 테스트를 진행하는 것이였습니다.

이것에 관련된 코드는 굉장히 적습니다.

* connect port forwarding

export SSH_PATH=~/.ssh/test_confing
export CACHE_URL=test.cache.url.com
export EBS_HOST=ec2-user@EBS_HOST
export TUNNEL_PORT=6379

ssh -i $SSH_PATH -f -N -L$TUNNEL_PORT:$CACHE_URL:$TUNNEL_PORT $EBS_HOST

* disconnect port forwarding

# ps aux | grep redis
# kill -9 PROCCESS

disconnection 같은 경우에는 더 좋은 방법 있으시면 말씀해주세요. 사실 귀찮아서...

자 이제 redis-cli을 통해서 로컬호스트에 connection이 완료 되는것을 확인 이제 나의 developer 환경 ( docker container) 내에서도 잘 되는지. 127.0.0.1 아니면 ifconfig를 통해 나의 network IP docker내에서는 127.0.0.1로 하면 localhost를 잡지 못하는 이슈 발생.

이렇게 했는데도, 계속 connection refuse 에러가 발생해서 다시 찾아보니, localhost 대신에서 docker내에서는 저는 참고로 개발시 MAC을 사용하고 있습니다.  호스트 주소를 아래와 같이 세팅하면 내 로컬에 있는 network를 잡는다고 하네요.

docker.for.mac.host.internal

이렇게 세팅하고 테스트!!!!!!!!! 두둥!! 완료.

실제로도 배포 해보니, 서비스도 죽지 않고 connection도 잘 연결 되었습니다.

이상으로 로컬에서 elasticcache 이용하기 끝!!

다음으로 올릴 글은 지금까지 mocha + sinon + chai 를 통해서 nodejs에 테스트 프레임워크를 구성해서 사용하고 있었는데, 이제 jest로 옮기는 작업을 진행하면서 발생한 이슈나 TIP? 같은걸 공유할까 합니다.

댓글 없음:

댓글 쓰기