AWS DB - 04/27

호호빵·2022년 4월 27일
0

AWS

목록 보기
3/6

아키텍처의 변화

아키텍처의 변화로 데이터베이스가 가벼워지고 더욱 개발에 집중할 수 있는 환경이 됨.


RDBMS vs NoSql

RDBMS

관계형 데이터베이스 관리 시스템 (Relational DataBase Management System)

  • 거의 모든 서비스의 메인 데이터베이스
  • 엑셀과 같은 표의 형태로 데이터 저장, 정형화된 데이터
  • 테이블의 컬럼이 고정되어 있어 데이터 컬럼 수정 어려움
  • 테이블끼리 연결 가능(Oracle, Mysql, Mssql 등)

NoSql (Non-relational)

  • Json 형태로 데이터 저장(RDBMS의 테이블과 비슷한 도큐먼트라는 곳에 저장)
  • 도큐먼트는 컬럼이 고정되지 않기 때문에 변경 용이. 비정형화된 데이터 저장하는 용도

AWS

프론트백엔드데이터베이스
S3EC2RDS
IAMELBElastiCache
CloudfrontElastic BeanstalkElasticSearch Service

RDS (Realational Database Service)

AWS에서 관리되는 관계형 데이터베이스 서비스
직접 운영하기 까다로운 RDBMS를 관리해줌
RDS가 MySql을 관리해줌.

생성

  • 표준생성, MySql(버전확인), 프리티어
  • 이름, 암호설정, db.t2.micro
  • 퍼블릭 액세스 기능(예), VPC 보안그룹(새로 생성)
  • 엔드포인트 url이 중요!

사용

  • DB를 설치하고 조회하고 수정하는게 사용하는 것(설치, 조회, 수정)
  • 파이참 - 오른쪽 Database - Mysql 추가 - 테스트 후 생성
    (내 컴퓨터에서 AWS의 RDS에 접속 가능하게 됨.)
  • Schema 추가 : 한글 사용가능 코드 추가
  • Table 추가 : 파일 만들어 관리할 수 있음
  • Query 실행
  • 보안 그룹 소스 : 소스 범위에 있는 IP만 3306 포트로 접속이 가능

<스키마에 한글 사용코드 추가>

<테이블 추가, 파일 이름 형식>

<쿼리 실행문>

RDS, Python 연동

  • RDS 보안 그룹에 아이피 0.0.0.0/0 추가(러프하게 사용하기 위해)
  • 백엔드 application.py 코드 추가, 프론트 index.html 코드 추가
  • 백엔드에 라이브러리 추가
    (pip install install flask-mysql , 로컬)
    (pip freeze > requirements.txt , EB 배포용)
  • EB에 환경변수에 4가지 추가
  • commit and push, cloudfront 주소로 확인
    python 연동 코드


Redis(Remote Dictionary Server)

  • 인메모리 DB
  • RDB가 파일에 데이터를 저장하는 것에 비해 Redis는 메모리에 데이터를 저장하기 때문에 속도 빠름
    (RDB의 부하를 덜어주기 위해 Redis를 사용)
  • "키-값"구조의 비정형 데이터를 저장하고 관리하기 위한 오픈소스 기반의 비관계형 데이터베이스 관리 시스템(DBMS)

ElasticCache

RDS가 MySql을 관리하는 것처럼
ElasticCache는 Redis를 매니지드해줌.

클러스터 생성

  • 보안그룹을 먼저 만들고 생성.(vpc 안에 보안 그룹, 포트 번호 6379)
  • 레디스, 아마존 클라우드
  • 이름, 포트, 노드, 다중AZ(x)
  • 설정해놓은 보안 그룹 설정

ElasticCache 연동

RDS와 달리 외부에서 접속 불가능
내 컴퓨터가 아닌 배포를 해서 같은 VPC내의 인스턴스에서 확인해야 함.

  • 백엔드 application.py 코드 추가, 프론트 index.html 코드 추가
  • 백엔드에 라이브러리 추가
    (pip install redis , 로컬)
    (pip freeze > requirements.txt , EB 배포용)
  • EB 환경변수에 REDIS_HOST 추가
  • commit and push, cloudfront 주소로 확인
    python 연동 코드

ElasticSearch

검색엔진 오픈소스
이전에는 검색엔진만으로 사용하였지만 아키텍처의 변화와 분산환경에서 로그의 중요성이 부각되면서 로그를 데이터화하는 ELK 스택을 발전

  • 예전에는 로그를 파일에 쌓아 데이터 분석, 수집, 검색 등 어려움(하드디스크나 나스에 보관)
  • Kibana와 같은 다양한 분석도구들이 등장
  • ELK : 로그 중앙화
  • Application -> 로그를 logstash -> ElasticSearch -> Kibana

ElasticSearch Service(OpenSearch service)

ElasticSearch를 쉽게 사용하게 해줌
(위의 RDS, Redis와 같은 형태)

생성

  • 개발 및 테스트, 최신 OpenSearch service
  • 인스턴스 유형 : t3.small
  • 액세스 정책 : 도메인에 대한 개방 액세스 허용
  • 엔드포인트 : Elasticsearch에 데이터를 저장, 조회 할때 사용하는 URL
  • Kibana : 분석된 로그 데이터를 시각적으로 보여주는 페이지

logstash 설치

  • EC2 생성
  • Shell JAVA 설치
sudo apt-get update  # 패키지 업데이트

sudo apt-get install openjdk-8-jdk  # 설치
  • logstash 설치
# 다운로드
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

# 패키지 설치
sudo apt-get install apt-transport-https

# 패키지 리파지토리 추가
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

# 패키지 업데이트 & 설치
sudo apt-get update && sudo apt-get install logstash
  • logstash 실행
# 설정파일 생성
sudo vi /etc/logstash/conf.d/logstash-python.conf

# 설정파일
input {          		 # 로그를 logstash로 
  tcp {
    port => 5044
  }
}

output {				 # logstash에서 ElasticSearch로
  elasticsearch {
    hosts => ["https://search-elasticsearch-sparta-tedvy7ev365r74opwxg2eumxn4.ap-northeast-2.es.amazonaws.com:443"]
    index => "flask-logs-%{+YYYY.MM.dd}"
    user => "admin"
    password => "Aa12345!"
    ssl => true
    ilm_enabled => false
  }
}

# 실행 
sudo systemctl start logstash.service

# 실행 확인 
netstat -tnlp


# 명령모드에서 i: insert 모드(키 입력) , esc : delete 모드(x로 지우기)
# :wq 로 저장 후 나가기

vi 명령어 참고

ElasticSearch Service, Python 연동

  • EC2에사 보안 - 5044 포트 열기
  • 백엔드 application.py 코드 추가
  • 백엔드에 라이브러리 추가
    (pip install python-logstash-async , 로컬)
    (pip freeze > requirements.txt , EB 배포용)
  • EB에 환경변수에 LOGSTASH_HOST 추가(프라이빗 IPv4 주소)
  • commit and push, cloudfront 주소로 확인

+ 간단정리

  • RDS : RDBMS를 쉽게 운영하여 개발에 집중하게 해주는 서비스
  • ElastiCache : Redis를 다루어 RDBMS + Cache를 사용하여 서비스를 더 안정적으로 운영하게 해주는 서비스
  • Elasticsearch Service : 로그를 저장하고, 데이터화 할 수 있게 해주는 DB 서비스
profile
하루에 한 개념씩

0개의 댓글