ElastiCache와 TLS

2025년 1월 23일 목요일

Today I Learned

날짜

2025년 1월 23일 목요일

내용

ElastiCache 서버리스 연결의 특징

람다에서 ㄷ웹훅으로 생성된 데이터를 데이터베이스에 어떻게 연결할 것인가에 대해 많은 고민과 조언이 있었다. 현재 시도 가능한 방식 3가지는 다음과 같다.

  1. 람다에서 데이터베이스 직접 접근
    1. AWS Lambda와 RDS를 연결하는 기능도 따로 있을 뿐더러, 모든 로직이 Step Functions 내에 있는 람다에서 종료되니 설계도 깔끔하다.
    2. 다만, 데이터베이스에 접근하는 곳이 2곳(서버, 람다)이 되어서 오류가 발생하거나 수정 사항이 생겼을 때의 관리소요가 추가된다.
  2. 서버에 HTTP 요청
    1. 서버에 있는 데이터 수정 엔드포인트를 이용.
    2. 굳이 서버 데이터 처리하는 작업에 API를 사용하는 부담
  3. 캐시
    1. 데이터를 Redis 리스트에 보관하고 서버가 풀링하여 저장하는 방식
    2. 결국 풀링이 필요함

결국 3으로 구현하고 있다. 웹훅은 시간대에 따라 요청 수가 차이가 나므로 오토 스케일링이 필요하다고 판단했다. 가장 요청이 몰릴 때를 기준으로 생성하면 돈 아깝다. 다행히 Amazon ElastiCache에는 서버리스가 있었기 떄문에 이걸 이용했다.

근데 웬걸? 기존에 테스트하느라 특정 인스턴스로 만들었을때는 잘 되던게 하나도 안된다. 이걸로 어제부터 하루 종일 고생했는데 겨우 답을 알아냈다. 원인은 TLS였다.

TLS (Transport Layer Security)

암호화된 연결은 데이터 전송 구간에서 데이터를 암호화해 외부에서 보거나 바꾸기 어렵게 하는 방식인데 이 암호화의 방식 중 하나가 TLS다. TLS(Transport Layer Security)는 네트워크 통신을 안전하게 하기 위한 대표적인 암호화 프로토콜인데 Redis의 경우, 기본 포트 6379는 평문 전송, 6380 등 TLS 전용 포트는 암호화 전송을 사용하도록 설정할 수 있다.

이 서버리스 Redis OSS는 TLS 사용이 필수다. 따라서 6380 포트가 열려있어야만 통신할 수 있다(관련 AWS 문서). 이걸 몰랐다… 아주 정확히 말하면 TLS 설정이 켜져있는 Redis OSS는 통신을 위해 보안그룹에 6380 포트를 열어줘야 한다.

추가로, 어제 로컬에서 Redis Insight로 캐시 서버에 접근하는 방식을 공유했는데 이 TLS 설정이 켜진 서버리스의 경우에는 또 추가로 켜줘야 하는 옵션이 있다.

1 2

아래 Use TLS를 켜주자.

회고

아직은 GPT보단 Stack Overflow가 나을 때가 있다. 분발해라.