[AWS] 세션 스토어 구축

 세션 스토어 구축




세션 관리를 위한 분산 캐시로 Amazon ElastiCache for Redis를 사용합니다.

 ElastiCache 노드를 구성하기 위한 모범 사례와 애플리케이션에서 세션을 처리하는 방법도 파악합니다.



실습
 
1. 해당 인스턴스의 보안 그룹이 포트 5000에서 들어오는 TCP 연결을 허용하는지 확인해야합니다 . 


$ sudo yum install git
$ sudo yum install python3
$ sudo pip3 install virtualenv
$ git clone https://github.com/aws-samples/amazon-elasticache-samples/
$ cd amazon-elasticache-samples/session-store
$ virtualenv venv
$ source ./venv/bin/activate
$ pip3 install -r requirements.txt
$ export FLASK_APP=example-1.py
$ export SECRET_KEY=some_secret_string
$ flask run -h 0.0.0.0 -p 5000 --reload








포트 5000에서 Flask 애플리케이션을 시작합니다.












2. Redis 클러스터 생성하기 


 Redis클러스터의 이름 및 유형을 설정합니다 
실습에서는 노드유형을 cache.t2.micro ,복제본 수 1을 설정했습니다 . 




















서브넷 그룹을 선택하고 기본가용영역은 설정 없음으로 구성합니다 . 





























보안 그룹을 선택하고 ec2 인스턴스로부터 6379/tcp 포트로부터 연결을 허용하는지 확인합니다 . 























본 실습에서는 암호 및 백업등을 비활성화 했지만 문제 발생 시 조치를 취할 수 있는 충분한 시간을 확보하기 위한 보존 기관과 함께 백업을 활성화하는 것이 좋습니다. 




생성을 클릭하고 사용상태가 되면 사용 가능합니다 . 

























3. Redis를 사용한 세션 캐싱


처음 리포지토리에서 다운로드 받았던 폴더안에 example-1.py 파일에 다음 코드를 붙여 넣습니다 . 

import os
from flask import Flask, session, redirect, escape, request

app = Flask(__name__)
app.secret_key = os.environ.get('SECRET_KEY', default=None)

@app.route('/')

def index():

    if 'username' in session:
        return 'Logged in as %s' % escape(session['username'])

    return 'You are not logged in'

@app.route('/login', methods=['GET', 'POST'])

def login():

    if request.method == 'POST':

        session['username'] = request.form['username']
        return redirect('/')

    return '''
        <form method="post">
        <p><input type=text name=username>
        <p><input type=submit value=Login>
        </form>
    '''

@app.route('/logout')

def logout():

    session.pop('username', None)
    return redirect('/')

코드를 저장했다면 flask 명령어를 실행합니다 . 

$ flask run -h 0.0.0.0 -p 5000 --reload














4. Redis로의 연결 테스트하기 














생성한 클러스터의 세부 정보에서 기본 앤드포인트를 확인합니다 . 



EC2 인스턴스에서 REDIS_URL 환경 변수를 구성합니다.





$ export REDIS_URL=testcluster.mutkl3.ng.0001.use1.cache.amazonaws.com:6379




파이썬 구문셸 에서  노드 연결 테스트를 합니다.

>>> import redis
>>> client = redis.Redis.from_url('redis://your_redis_endpoint:6379')
>>> client.ping()





























댓글