AWS ElasticBeanstalk에 ElastiCache를 이용해 Redis 연결하기

그린·2024년 2월 6일
1

오류

목록 보기
15/17

제가 진행하다가 막히게 되었는데,
아래에 해결 방법 추가했습니다.
해결 방법 위주로 보시는 걸 더 추천합니다!


ElastiCache redis 생성하기

아래 글들을 참고하였습니다.

ElasticCache를 검색해서 이동한 후, 지금 시작 -> Redis 를 클릭한다.

1단계 : 클러스터 설정

로컬에서 redis-cli 7.2.4 버전을 이용 중이였기 때문에, 엔진 버전을 7.1로 설정해주었다.

이때 복제본 개수를 0으로 해야,
위쪽에서 뜬 다중AZ, 자동장애조치 옵션을 비활성화할 수 있다고 한다.
0으로 설정하니 아래 사진과 같이 비활성화로 바뀌었다.

서브넷 그룹을 설정한다.
이때 VPC ID는 ELB를 만들 때 생성했던 VPC로 지정해주었다.

2단계 : 고급 설정
보안그룹을 추가해주어야 하는데,
1. default VPC
2. Elastic Beanstalk
3. Bastion Host
에 대해 추가해야 한다고 한다.
실은 잘 모르겠어서,, 목록에 뜨는 보안그룹들을 일단 다 추가했다,,

클러스터를 생성한다.

ELB 보안그룹
인바운드 규칙에 포트 6379로 지정한다.
이전에 CI/CD 설정하면서 해둔 게 있었는데 이걸로 진행해보겠다...

위의 글들을 참고하다가,
https://velog.io/@lkdcode/AWS-Elastic-Beanstalk-Elastic-Cache-GithubActions-SpringBoot-CICD-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0-3
이 글을 참고해서 6379번 포트에 대해 소스에 ::/0로도 추가해주었다.

Ec2 Key

Redis가 잘 생성되었는지 EC2로 들어가서 확인을 해야 하는데,
Elastic Beanstalk으로 생성하면 ssh 에 접속할 수 있는 키 페어를 생성하는 설정이 없다고 한다.
키 페어를 생성한 후 ELB 환경과 매핑해주어야 한다고 한다.

EC2 - 키 페어에 이미 생성했던 키 페어와

ELB - 구성 - 서비스액세스구성 에 있는 키 페어가 서로 일치한다!

나는 이전에 만들어서 연결해둔 키페어가 있었어서 넘어갔다.

EC2 - 인스턴스에 들어가서 퍼블릭IPv4주소로 접속하자.

나는 웹사이트 상에서 연결을 진행했다.

EC2 Redis 설치 (저는 여기서 막혔습니다..)

redis-cli 구축을 위해 GNU 컴파일러 모음(gcc)을 설치한다.

$ sudo yum install gcc

아래의 명령어를 입력해 redis-cli 를 설치한다

$ wget http://download.redis.io/redis-stable.tar.gz
$ tar xvzf redis-stable.tar.gz
$ cd redis-stable
$ make distclean      # ubuntu 에서만 입력한다 (생략 가능)
$ make

-> make 과정에서 계속 막혀있었는데, ELB 환경 상태에 오류가 있었다.. 다시 재부팅해준 후 상태가
OK로 된 후 다시 진행했다.

근데 아래 make를 진행하는 단계에서 또 막히더니 ELB 환경에도 Severe로 상태로 전환되었다.

인스턴스에 연결된 보안그룹이 2개가 있었는데, 혹시 여기에 6379 관련 내용이 없어서 그런가 싶어서 새로 추가해주었다.

다시 또 다시 진행하는데.. ELB 상태를 보니 메모리를 거의 다 썼다고 한다,,

세로고침해보니 이제는 데이터가 안 온다고 뜨네..

조금 더 기다리니 다시 Severe 상태로 변화되었다..

make 단계에서 중지된 상태를 풀고 빠져나오면 OK 상태로 변경된다,, 어떻게 해야 하지...


문제 해결!

어제 다른 분의 조언으로,, 해결한 방법 공유합니다!

꼭 EC2 서버에 직접 redis-cli를 설치할 필요는 없고 (어차피 EB에서 새로 서버 배포하면 설치한 것 날아감..)

ElastiCache Redis 만들고 나서 바로 프로젝트에 연결 가능하다고 합니다!

로컬로 실행할 때에는 Elasticache Redis host 주소를 가지고 연동이 불가능하다고 합니다. (-> 이 사실을 몰랐습니다..)
참고 : https://kth990303.tistory.com/450

그래서 ElastiCache 엔드포인트를 redis host 값으로 넣어주는데,

이게 로컬로 실행하면 연동이 안 되어서.. 이걸 EB로 배포하고 나서 테스트해보면 잘 연동되었습니다!

+) 로컬로 실행할 때에는 로컬 Redis 서버로만 테스트 가능합니다

저처럼 처음 설정해보시는 분들이 헤매실 수 있을 것 같아 공유합니다!


회고

어제 하루 종일 이 문제때문에 삽질했다..

okky에도 질문 남기고
https://okky.kr/questions/1488045

stackoverflow에도 영어로 번역해서 질문 남겼었다..ㅋㅋㅋ
https://stackoverflow.com/questions/77940874/error-interrupting-when-installing-redis-on-elastic-beanstalk-ec2

어제 UMC 동아리 지부 스프린트 리뷰 데이 행사를 진행했는데,
이 행사는 프로젝트 팀 별로 어떻게 진행되고 있는지를 발표하고 공유하고 싶은 점을 공유하거나 다른 팀은 어떻게 진행하는지 궁금한 점을 물어보는 자리였다.

이 redis 문제 때문에 하루 종일 해결을 못 하고 있는데
다른 잘 하는 분들이 보시면 정말 쉽다고 하실 수도 있는 부분이라 생각이 들어서..
질문 할까 말까 한참을 고민하다가
결국에는 그냥 용기내서.. 이 부분이 막혀서 다른 팀에게도 질문하고 싶다고 pm님께 연락드려서 발표자료에 추가했다..!!

우와 근데.. 다른 팀 분들께서 피드백을 주시고 자세히 조언도 해주셔서!
결국... 힌트를 얻고 해결하게 되었다...

답변해주셨던 분들 너무너무 감사합니다..!!👍 진짜 감사해요..😆
우리 팀 pm님.. 내가 발표 자료에 뒤늦게 질문 추가하고 싶다고 해서 번거로우셨을 수도 있는데 선뜻 반영해주시고 잘 발표해주셔서 정말 감사합니다!!
그리고 우리 팀 프론트 팀장님이 이 행사를 진행하셨는데 내가 추가적으로 물어볼 수 있게 유도해주셔서 덕분에 마이크 켜고 더 여쭤볼 수 있는 기회를 주셔서 정말 감사했습니다!!
또.. 이 고민을 들어주고 도와주려고 해준 스프링 스터디 친구들과 전에 프로젝트 했던 친구들도 정말 고마워!!
어쩌다보니 너무 많은 분들께 도움을 받아버렸네...

너무 쉬운 질문일거라 생각하고 머뭇거렸는데 용기내서 여쭤보길 정말 잘한 것 같다!

서로 다른 프로젝트임에도 불구하고 도와주려는.. 정보 공유가 활발한 이 개발 문화(?)가 정말 좋고 감사한 것 같다.
저도 열심히 노력해서 다른 분들에게 도움이 될 수 있는 사람이 되도록 노력하겠습니다..!!

profile
기록하자

0개의 댓글