똑같은 삽질은 2번 하지 말자

AWS 본문

카테고리 없음

AWS

곽빵 2022. 12. 14. 22:35

개요

aws를 학습하면서 나오는 용어와 개념정리

 

IAM

  • 접근키, 비밀키를 가지고 매우 세밀한 접근 권한 부여 가능
  • Multi-Factor Authentication 가능
  • 그룹, 유저, 역할, 정책을 가지며 정책은 그룹, 역할에 추가 시킬 수 있고, 하나의 그룹 안에 다수의 유저가 존재한다.
  • 지역설정은 필요없다.

EC2 (Elastic Compute Cloud)

  • 구름위에 떠 있는 컴퓨터라 생각하자.

EBS (Elastic Block Storage)

  • 저장 공간이 생성되어지며 EC2 인스턴스에 부착되는 일종의 가상 하드 디스트
  • 디스크 볼륨 위에 File System이 생성
  • EBS는 특정 Availability Zone에 생성된다

ELB (Elastic Load Balancers)

  • 수많은 서버의 흐름을 균형있게 흘려보내는데 중추적인 역할을 함
  • 하나의 서버로 traffic이 몰리는 병목현상(bottleneck) 방지
  • Traffic의 흐름을 Unhealthy instance -> healthy instance로 다시 말하면 바쁘게 움직여서 과부하가 걸리고 있는 EC2에 request를 보내지 않고 널널한 EC2에 request를 보낸다.

Route53

  • aws에서 제공하는 DNS 서비스
  • EC2, S3 Bucket, Load Balancer등의 aws만의 도메인 네임 서비스를 제공하는 기능이다.

RDS(Relational DB Service)

  • 관계형 데이터베이스를 두는 곳
  • Backup (Automated Backup, DB snapshots)
  • Multi AZ (Multi Availability Zone)에 똑같은 복제본이 만들어져 Disaster Recovery를 위해서만 사용되어 진다.
  • Read Replica : 읽기 전용 복제본으로 트래픽을 분산시키기 위해 사용되는 복제본

ElastiCache

  • 클라우드 내에서 in-memory 캐시를 만들어줌
  • Read-Heavy 어플리케이션에서 상당한 Latency 감소 효과를 누림
  • Memcached와 Redis가 있다.

Memcached

  • Object 캐시 시스템으로 잘 알려져 있음
  • ElastiCache는 Memcached의 프로토콜을 디폴트로 따름
  • EC2 Auto Scaling처럼 크기가 커졌다 작아졌다 가능함
  • 오픈소스

Redis

  • Key-Value, Set, List와 같은 형태의 데이터를 In-Memory에 저장 가능함
  • 랭킹 정렬에 용이
  • 오픈 소스
  • Multi-AZ 지원

EC2 + RDS

  • RDS의 인바운드 규칙에 EC2가 속한 보안그룹을 추가함으로써 EC2에서 RDS에 접근 가능하게 되었다.
  • EC2에서 DB Host는 RDS의 도메인주소로..!

인바운드 규칙

S3(Simple Storage Service)

  • 안전하고 가변적인 object 저장공간을 제공
  • 편리한 UI 인터페이스를 통해 어디서나 쉽게 데이터를 저장하고 불러올 수 있다.
  • 파일크기는 0kb부터 5TB
  • 저장공간 무제한
  • Bucket이라는 이름을 사용함 (디렉토리와 유사)
  • Bucket은 보편적인 namespace를 사용함
  • S3 Object의 구성요소(Key, Value, Version ID, Metadata, CORS)
  • 암호화가 걸린 파일만 업로드하게 하는 그런 정책을 세우는 것도 가능하다.

CloudWatch

  • AWS 리소스 사용의 실시간 모니터링 기능 지원
  • 다양한 이벤트들을 수집하여 로그파일로 저장
  • 이벤트 & 알람 설정을 통해 SNS, AWS Lambda로 전송 가능(이벤트: S3 파일 업로드 & 삭제 RDS 접근등등)
  • [CloudWatch 사용 가능 서비스들]: EC2, RDS, S3, ELB 등등
  • 임의로 정해놓은 값에 도달할 시 Alarm을 울림
  • Alarm이 울릴 시 특정 이벤트들을 작동시킬 수 있음

CloudFront

  • 정적, 동적, 실시간 웹사이트 컨텐츠를 유저들에게 전달
  • Edge Location(컨텐츠들이 캐시에 보관되어지는 장소)을 사용 
  • 컨텐츠 딜리버리 네트워크 Content Delivery Network(CDN)
  • 분산 네트워크 (Distributed Network)
  • Distribution(분산): CDN에서 사용되어지며 Edge Location들을 묶고 있다는 개념
  • Origin: 원래 컨텐츠들이 들어있는 곳 웹서버 호스팅이 되어지는 곳. S3, EC2 인스턴스가 오리진이 될 수 있음
  • 분산 네트워크를 구축함으로써 각각의 Edge Location에 캐시가 만들어지고 지역에 구애받지 않고 빠르게 접근 가능하게 된다.

 

DynamoDB

  • NoSQL(Not Only SQL) 데이터베이스
  • 매우 빠른 쿼리 속도
  • Auto-Scaling 기능 탑재
  • Key-Value 데이터 모델 지원
  • 테이블 생성시 스키마 생성 필요 없음
  • 모바일, 웹, IoT데이터 사용시 추천됨
  • SSD 스토리지 사용
  • PK를 사용하여 데이터 쿼리
  • DynamoDB에는 두가지의 PK 유형이 있음
    • 파티션키
      • 고유한 특성을 가지고 있다.
      • 실제 데이터가 들어가는 위치를 결정해줌
      • 파티션키 사용시 동일한 두개의 데이터가 같은 위치에 저장될 수 없음
    • 복합키
      • 파티션키 + 정렬키
      • 예시: 똑같은 고객이 다른 날짜에 다른 물건을 구매
      • 파티션키: 고객아이디, 정렬키: 날짜
  • 두가지의 Index 유형 존재
    • Local Secondary Index
      • 테이블 생성시에만 정의해줄 수 있음
      • 따라서 테이블 생성 후 변경, 삭제가 불가능
      • 똑같은 파티션키 사용, 그러나 다른 정렬키 사용
    • Global Secondary Index
      • 테이블 생성후에도 추가, 변경, 삭제 가능
      • 다른 파티션키, 정렬키 사용
    • 인덱스를 이용해 다양한 뷰를 생성, 그리고 뷰를 이용해 쿼리를 실행시킴으로써 상당히 빠른 실행속도를 얻을 수 있다.
  • Query
    • Primary Key를 사용하여 데이터 검색
    • Primary Key가 중복이 가능하다..! 조금 관계형데이터베이스와 개념이 틀린 부분..이거에 의해서 전체적인 테이블의 구성도 꽤 틀려질 수 있을꺼 같다. 하나의 튜플(행)이 완전한 하나의 정보?가 되는 느낌인건가?
    • Query 사용시 모든 데이터(컬럼) 반환
    • ProjectionExpression 파라미터를 사용하면 가지고 오고 싶은 컬럼만 지정하는게 가능
  • Scan
    • 모든 데이터를 불러온다.(primary key 사용 x)
    • ProjectionExpression 파라미터를 사용하면 가지고 오고 싶은 컬럼만 지정하는게 가능
    • Query가 훨씬 효율적이므로 LookUp 테이블이 아닌 이상 Query 사용 추천

DAX(DynamoDB Accelerator)

  • 클러스터 In-memory 캐시
  • 10배 이상의 속도 향상
  • 읽기 요청만 해당됨
  • DAX 캐싱 시스템
    • 테이블에 데이터 삽입 & 업데이트시 DAX에 반영
  • 단점
    • 쓰기 요청이 많은 어플에 부적합
    • 읽기 요청이 많지 않은 어플 부적합
    • 아직 모든 지역에서 제공되지 않음

DynamoDB Stream

  • DynamoDB 테이블에서 일어나는 일들(삽입 수정 삭제등)이 일어날 시 시간적 순서에 맞게 Streams에 기록
  • Log는 즉각 암호화가 일어나며 24시간동안 보관됨
  • 주로 이벤트를 기록하고 이벤트 발생을 외부로 알리는 용도
  • 이벤트 전 & 후에 대한 상황 보관

 

API Gateway

  • 뛰어난 확장성 제공 및 API를 만들고 운영하고 모니터링 가능
  • Back-end 서비스 (웹 어플리케이션, EC2)에 들어있는 데이터 접근 허용
  • Pay As You Go
  • use-case

 

Code Commit

  • 파일들을 보관하는 저장 장소 -> Github과 매우 유사
  • 동시에 많은 사람들이 저장 장소 접근 및 업데이트 가능
  • 버전 컨트롤 기능 제공
    • 언제, 누가, 어떻게 저장 장소 내용을 번경하였는지가 각각 저장됨

Code Deploy

  • 자동 배포
  • 새로운 기능들의 빠른 배포
  • 소프트웨어 & 서버 다운타임 없음
  • Manual 에러 없음
  • Rolling 배포
    • 여러개의 서버가 존재, 그중 하나하나 배포를 해간다.
  • Blue/Green 배포
    • 크게 두가지의 mode가 존재하고 Blue는 이전 버전 Green 이번에 새롭게 배포한 버전
    • Rolling배포 보다 더 많은 서버 비용이 필요하지만, 이전 버전으로 되돌리기 상당히 쉬우므로 규모가 커지면 커질수록 블루 그린 배포 방법을 사용하는게 좋다.

ECS(Elastic Container Service)

  • Container 통합 서비스 (Orchestration Service)
  • Docker & Window Container 지원
  • 빠른 배포, container workload provision
  • VPC내에서 Container의 보안 관리
  • Kubernetes와 유사함, 그러나 ECS만의 장점 존재
    • AWS IAM, Route53, VPC 연동
  • ECS를 돌리는 방법
    • EC2 Instances
    • AWS Fargates (Serverless Compute Engine For Containers)

ECR(Elastic Container Registry)

  • ECS의 컨테이너를 생성하기 위해 이미지는 보관하는 곳
  • Container 이미지 보관하는 저장소 (Dokcer Hub, Nexus)

Serverless

  • 서버를 우리가 관리할 필요 없이 알아서 어플리케이션 코드를 클라우드에서 돌릴 수 있게 해준다. 라는 개념이다
  • AWS는 Capacity Provisioning(감시) Auto-Scaling(사이즈 자동 조정) Patching(운영체제의 패치)등을 관리 해준다.

AWS Lambda

  • Serverless의 주축을 담당
  • Events를 통하여 Lambda를 실행시킴
  • NodeJS, Python, Java, Go등 다양한 언어 지원
  • Lambda Function을 처음 만들면 Version은 $LATEST가 됨
  • 변경된 Lambda Function을 업로드 하면 그 Version이 $LATEST가 됨
  • Version은 우리가 Alias를 부여할 수 있음
    • 다른 Lambda Version을 가질 수 있음
    • 다른 Lambda Version은 다른 ARN이 존재함
  • Alias는 다른 Version으로 변환시 사용되어짐
  • Alias(별칭)을 이용하면 STAGING, PROD, $LATEST로 구별해서 사용할 수 있다.

 

VPC 안에 Lambda가 접근을 하려면?

  • Lambda함수가 Private Subnet에 접근할 수 있게 허용해야줘야 함
  • Lambda함수는 아래와 같은 VPC Configuration이 요구됨
    • Private Subnet ID
    • Security Group ID
  • Lambda함수는 Private Subnet으로부터 사용 가능한 IP주소를 부여해주는 ENI(Elastic Network Interface)를 셋업함

Step Function

  • Serverless 어플리케이션을 구축함에 있어 시각적 인터페이스 제공
  • 일련의 Step으로 Serverless 어플리케이션을 관리할 수 있음
  • Step은 Business Logic에 의해 순서대로 실행되어짐
  • Step의 output은 또 다른 Step의 input이 될 수 있음

 

WIF(Web Identity Federation)

  • 아마존, 구글 등을 통하여 유저들에게 AWS 접근 권한 제공
  • 인증코드(토큰) 사용

Cognito

  • 회원가입, 로그인 기능 제공
  • 어플리케이션과 Web Provider간의 중재자 역할 (인증, 인가의 부분들을 전부 맡아서 관리해준다.)
  • 다양한 기기로부터 사용자 정보를 동기화함 -> 확장성
  • 사용자 Credentials을 자동으로 관리

SQS(Simple Queue Service)

  • Message Queue 서비스
  • 어플리케이션 컴포넌트 분리
    • 여기서 컴포넌트는 웹서버 배치서버를 말하는데 이를 분리함으로써 무거운 작업들을 완전히 독립적으로 실행할 수 있다.
    • 컴포넌트 사이에서 매우 용이한 메세지 운용 가능
  • 메세지 보관
    • 최대 256KB에 해당하는 text 포멧 메세지 보관 가능(XML, JSON, TXT)
  • 메세지 가져오기
    • AWS SQS API를 통한 메세지 꺼내오기
  • 버퍼로써의 역할
    • 유저가 보낸 request에 대한 정보를 큐에 저장함으로써 데이터 처리 컴포넌트단에서 오류가 발생하더라도 리퀘스트 데이터의 손실을 막을 수 있다.
  • Standard Queue
    • 초당 메세지를 주고받는 횟수가 거의 무제한
    • 최소 한번은 꼭 메세지를 전달시킴
    • 최대한 메세지가 들어온 순서대로 메세지가 나갈 수 있게 해줌
    • 아주 가끔 중복 메세지가 전달될 수도 있음, 그리고 순서가 어긋날 수 있음
  • FIFO Queue
    • 메세지가 들어온 순서대로 메세지가 밖으로 나감
    • 딱 한번만 메세지를 전달함
      • 메세지 중복 허용X
      • Consumer가 다시 요청 할때까지 특정시간동안 Queue에 들어있음
    • 초당 메세지를 주고 받는 횟수가 정해져있음
      • 300TPS
  • Visibility Timeout
    • Queue에서 빠져나간 메세지를 Consumer가 읽은 후 Queue안에서 그 메세지가 invisible상태로 유지되는 시간
    • 디폴트로 타임아웃이 30초로 설정되어 있으며 서버에서 30초내에 처리를 성공을 반환하지 않으면 처리중인 큐가 invisible에서 visible로 변견된다
  • Short Polling
    • 큐가 비어있어도 즉시 response를 반환함
    • 큐가 비어있을때 빈 response를 반환됨
    • 빈 response에 대해서도 비용을 지불해야한다.
  • Long Polling
    • 정기적으로 큐를 검사한다.
    • Long poll timeout이 되거나 큐에 메세지가 들어가면 response가 반홤됨
    • 비용을 절감할 수 있음 따라서 Short Poliing보다 선호된다.

SNS(Simple Notification Service)

  • 클라우드로부터 Notifications를 전달받는 용도로 사용
  • 어플리케이션으로부터 전달받은 메세지들은 다른 어플리케이션 혹은 구독자들에게 전달됨
  • 모바일의 푸시알람, 이메일, 람다의 호출등등을 할 수 있다.
  • PUB/SUB모델
    • 어떤 쇼핑물 웹사이트에서 구매가 발생했을때 SNS는 구매성공이나 구매실패라는 Topic으로 저장을 하고 그 Topic을 구독하고 있는 모바일기기, 람다, 이메일을 즉각 구매의 결과를 사용자에게 전달할 수 있다.
    • topic은 구매자들이 Subscribe하고 메시지를 전달받는 만남의 광장 역할
  • 장점
    • 메시지를 즉시 보냄
    • 설정이 간편함
    • 호환성이 뛰어나다(다양한 플랫폼을 지원)
    • 저렴한 비용
Comments