-
[Django] Elastic Beanstalk에 AWS Elasticache Redis 사용하기파이썬/Django 2021. 4. 5. 13:25
Django Elastic Beanstalk 배포 환경에 AWS 레디스를 사용하는 방법을 소개해드리도록 하겠습니다!
1. Redis란??
Redis는 키-값 구조의 저장소로써 리스트, 해시, 셋 등 여러 자료구조를 지원하는 NoSQL입니다. 주로 RDBMS의 캐시 솔루션에 주로 사용됩니다. 자세한 특징은 여기에서 볼 수 있습니다.
2. AWS Elasticache Redis 클러스터 만들기
Elasticache 콘솔에 들어갑니다. Elasticache 대시보드의 Redis에 들어간 후 생성 버튼을 누릅니다. 엔진은 Redis를 사용하고 위치는 Amazon 클라우드를 선택합니다
이름과 설명을 써주시고 노드 유형는 저는 가장 싼 노드인 t2의 micro를 선택했습니다. 복제본은 1-5로 사용자가 알맞게 선택해줍니다.
다중 AZ(Availability)는 노드의 고가용성과 장애 조치 기능을 지원합니다. 저는 체크 해제했습니다.
VPC는 그대로 두고 서브넷은 4개중 하나를 선택합니다. 만약 다중 AZ가 활성화 된 경우에는 2개 이상의 서브넷을 선택해줍니다.
보안그룹은 default와 Elastic Beanstalk의 보안그룹을 선택해줍니다! 꼭 선택하셔야 합니다. 그 다음에 최종적으로 생성해줍니다.
2. EC2 보안 그룹 설정하기
EB의 EC2인스턴스 보안그룹을 설정합니다. 인바운드 규칙에 포트 6379로 한 후 소스에 eb 보안그룹을 선택합니다.
3. 장고 redis 구성하기
이제 장고 프로젝트에 패키지를 설치합니다. pip 또는 pipenv 로 install django-redis를 설치합니다.
pipenv install django-redis # 또는 pip install django-redis
settings.py의 INSTALLED_APPS에 "django_redis"를 추가하고 CACHES를 추가합니다. .env에 환경변수를 넣거나 EB 콘솔에 구성을 누른 다음 소프트웨어 카테고리에 편집에 들어가서 환경 속성에 키-밸류로 추가해도 됩니다.
REDIS_LOCATION_PRIMARY: f"redis://{ 노드의 primary 엔드포인트 }:6379/"
REDIS_LOCATION_REPLICA: f"redis://{ 노드의 replica 엔드포인트 }:6379/"
엔드포인트 앞에 redis:// 와 뒤에 :6379/ 를 붙여야 합니다!INSTALLED_APPS = [ ... "django_redis", ] ... CACHES = { "default": { "BACKEND": "django_redis.cache.RedisCache", "LOCATION": [ os.environ["REDIS_LOCATION_PRIMARY"], os.environ["REDIS_LOCATION_REPLICA"], ], "OPTIONS": { "CLIENT_CLASS": "django_redis.client.DefaultClient", "MASTER_CACHE": os.environ["REDIS_LOCATION_PRIMARY"], }, } }
4. 테스트하기
만약 timeout이나 access denied된다면 redis 클러스터의 보안그룹과 ec2 보안그룹을 다시 한번 확인해 보시기 바랍니다!
from django.core.cache import cache cache.set("testkey", "test_value", timeout=60 * 60) # timeout = 1 -> second이므로 1시간을 타임아웃으로 설정했습니다. cache.get("testkey")
보면 도움되는 레퍼런스
'파이썬 > Django' 카테고리의 다른 글
Gunicorn 동작 과정 알아보기 (0) 2021.10.10 [Django] GenericForeignKey (0) 2021.05.23 [Django] RestFramework 페이지네이션 종류 (0) 2021.05.05 [Django] setting.py 파헤치기 #2 (0) 2021.03.05 [Django] setting.py 파헤치기 #1 (0) 2021.03.03