서버리스
- 서버 관리를 거의 하지 않는 패러다임
- 함수 배포만 하면 됨
- FaaS
- 서버를 관리하지 않고 프로비저닝하지 않아도 됨
- 람다, DynamoDB, Cognito, API Gateway, S3, SNS, SQS, Kinesis, Aurora Serverless, Step functions, Fargate 등등의 서비스
Lambda
- 가상 함수
- 서버 관리 불필요
- 사용할 때만 사용됨
- 확장이 자동화됨
- 수행 시간 짧다.
- 과금 체계가 간단하다.
- 다른 모든 서비스와 연동됨
- 다양한 언어 지원
- CloudWatch로 모니터링 가능
- 함수 당 쉽게 리소스 할당 가능 (최대 10GB ram)
- ram을 늘리면 CPU와 네트워크도 추가 할당됨
- EventBridge에 크론잡을 설정하여 특정 시간마다 람다의 이벤트 트리거 역할 가능
- 시작 시점에 /tmp 디렉토리를 사용해서 다른 파일 로드 가능 (임시 스토리지로도 사용 가능)
제약 조건
- 메모리는 128MB ~ 10GB
- 실행 시간은 최대 15분
- 환경 변수 크기는 4KB
- container의 disk 용량은 512MB ~ 10GB
- 동시성은 1000
- 배포 최대 사이즈는 -zip 기준 50MB
- 압축되지 않은 배포 크기는 250MB (소스코드 + 라이브러리 포함)
스냅 스타트
- Java 11 이상의 Lambda 함수의 성능을 최대 10배까지 늘릴 수 있다.
- 초기화가 진행된 상태로 대기하므로 JVM 로드 시간 단축으로 시간적 이득
- 신규 버전을 배포하는 경우, 함수 초기화
- 초기화가 진행된 상태의 메모리와 디스크 스냅샷을 진행
- 해당 스냅샷을 캐싱해서 성능 향상을 도모
Edge 커스터마이징
- Edge Function
- Edge에서 로직을 실행
- CloudFront 배포에 함수를 붙이는 기능
- 역시 서버리스로 구동
- CloudFront function
- js 기반의 가벼운 함수 실행
- 높은 확장성, 낮은 지연시간
- ms 이하의 시작 시간, 초당 100만 단위의 요청 처리
- CloudFront에 내장된 기능
- CloudFront의 Viewer 요청 및 응답을 변경하기 위해 사용
- CloudFront가 요청받은 이후에 동작함.
- CloudFront가 응답하기 전에 동작함.
- Lambda@Edge
- Python3, NodeJS 기반의 람다 함수
- 다소 무거움
- 초당 천단위의 요청 처리
- us-east-1 리전에서만 함수 작성
- 작성된 함수는 각 CloudFront로 복사해서 전파
- CloudFront의 요청 및 응답을 변경하기 위해 사용
- CloudFront가 요청받은 이후에 동작
- CloudFront가 Origin에 요청하기 이전에 동작
- CloudFront가 오리진에게 응답받은 이후에 동작
- CloudFront가 응답하기 이전에 동작
Edge 기능 예시
- 웹사이트 보안에서도 사용
- 동적 웹사이트를 엣지에서 운영
- 검색 최적화를 사용
- Origin들과 데이터 센터간의 라우팅을 위해 사용
- Bot 마이그레이션을 진행
- 실시간 이미지 변형
- A/B 테스트
- 사용자 인증
- 등등
VPC 내부에서 사용
- VPC 밖에서 동작하므로 VPC 내부의 다른 서비스에 접근 불가
- VPC, subnet, SG를 지정해야 함.
- 별도의 ENI를 부착하여 VPC 내부에서 사용 가능.
RDS Proxy와 사용
- RDS에 직접 접근해야 하는 경우
- 람다 실행마다 DB Connection을 생성하는 경우 커넥션 고갈 일어남.
- RDS Proxy가 DB 커넥션을 Pooling하고, 공유하여 확장성 증가
- 커넥션을 보관하면서 실패 재시도를 줄이고 가용성 증가
- IAM 인증을 강제하여 보안성을 올림
- RDS Proxy는 절대 public으로 열리지 않음. 그러므로 람다가 VPC 내부에 배포되어야 함.
DB에서 람다 호출하기
- DB에서 발생하는 Data Event를 처리할 수 있도록 함.
- PostrgeSQL RDS, Aurora Mysql에서 지원함
- DB의 Outbound traffic이 람다로 전송될 수 있어야 함.
- Public, NAT Gateway, VPC Endpoint 등이 설정되어야 함.
- 또한 DB가 람다를 호출할 수 있는 권한 필요
RDS 이벤트 알림
- DB 인스턴스의 상태에 대한 이벤트 알림 처리
- DB 인스턴스, 스냅샷, 파라미터 그룹, 보안 그룹, RDS 프록시, 커스텀 엔진 버전에 대한 이벤트 구독 가능
- 5분 정도의 지연시간 존재
- SNS, EventBridge를 통해 전달되고, 람다를 후방에 붙여서 해결
DynamoDB
- 완전 관리형 서비스
- 멀티AZ 지원하는 고가용성
- NoSQL DB
- 트랜잭션 지원
- 대용량, 분산 워크로드 지원
- 초당 100만 단위의 요청 처리, 조단위 row, 백단위 TB 스토리지 지원
- 빠르고 안정적인 성능 (10ms 미만)
- 보안, 인증, 인가는 IAM을 통해 핸들링 가능
- 낮은 비용과 오토스케일링을 지원
- 항상 가동 가능한 상태
- DynamoDB는 테이블로 구성됨
테이블
- 테이블은 생성시점에 지정되는 PK를 가짐
- PK는 Partition Key와 Sort Key로 구분
- 테이블은 무제한으로 아이템(row를 가질 수 있음)
- 각 아이템은 속성을 갖는다.(null 가능, 추가 가능)
- 아이템의 최대 사이즈는 400KB
- Scalar type(String, Number 등), Document type(List, Map), Set type(String set, Number set 등) 지원
- 매우 빠르게 스키마를 늘릴 수 있다.
- 테이블 타입은 스탠다드와 Infrequent Access(자주 접근하지 않는 경우)로 나뉨.
읽기 쓰기 용량 모드
- 각 테이블의 읽기 쓰기 크기를 조절할 수 있다.
- Provisioned Mode (기본)
- 초당 읽기/쓰기 수를 지정
- 용량을 사전에 지정해야 함.
- 지정된 읽기 용량 단위와 쓰기 용량 단위로 비용을 지불
- 읽기/쓰기 용량에 오토스케일링 모드를 지정 가능
- On-Demand Mode
- 읽기/쓰기 용량의 확장/축소가 자동으로 진행
- 사전 계획 불필요
- 사용한만큼 비용이 발생하지만 더 비싸다.
- 그러나 예측이 어렵거나, 급작스럽게 트래픽이 증가하는 서비스에 유용하다.
DAX
- DynamoDB 전용 완전 관리, 고가용성 메모리 캐시
- 읽기 부하를 줄이기 위해 사용
- ms 수준의 지연율
- 애플리케이션 로직 변경은 불필요 (DynamoDB와 같은 SDK 사용.)
- TTL은 기본 5분. (최신화가 필요하다면 안 쓰거나 TTL을 조정할 것)
- Elasticahe에 비해 장점이 많음
- 개별 오브젝트 캐싱 가능
- 쿼리, 스캔에 대한 캐싱 지원
DynamoDB Stream
- 테이블 내부의 아이템 단위의 변경이 일어나면, 정렬된 순서가 있는 스트리밍 지원
- 24시간 동안 데이터 저장
- 소비자 수에 제한
- 데이터 변경에 대한 실시간 처리 (회원 가입하면 이메일 보내기)
- 실시간 사용 분석
- 관련 있는 테이블에 신규 데이터를 추가
- 리전 간 복제
- 테이블 변경 이벤트에 맞춰서 추가적인 액션이 필요한 경우에 사용.
- 추가적인 변경이 필요하면 Lambda 혹은 Kinesis Adapter를 사용.
- Kinesis Data Streams와의 비교
- 데이터 저장 기간 1년
- 소비자 더 많이 등록 가능
- 다양한 서비스와 연동 가능
- 복잡하고 많은 스트림이거나, 다양한 서비스와 연동해야 하는 경우 Kinesis가 압승
Global Table
- DynamoDB의 테이블이 낮은 지연율로 여러 리전에서 접근하도록 설정
- 모든 테이블이 two-way replication으로 이루어짐.
- 즉, 모든 리전의 테이블에 대해 읽고 쓰기가 가능하다는 것.
- 또한, DynamoDB 스트림이 반드시 켜져 있어야 한다.
TTL
- DB에 값을 저장한 시점부터 데이터의 유효 시간을 설정 가능
- 애플리케이션 로직, 별도 크론잡 스케줄링이 필요 없이 자체적으로 처리 가능
- 현재 데이터만을 보관, 웹세션을 핸들링 등 데이터가 일시적으로만 남고 삭제되어야 하는 경우 설정
재해복구 백업
- 지속적 백업
- 시점 기반 복구를 위해 지속적으로 백업함.
- 최근 35일간 데이터를 선택적으로 설정
- 백업 기간 내의 어느 시점이든 백업 가능
- 복구 처리를 위해 새로운 테이블을 생성
- On-Demand 백업
- 상대적으로 긴 기간동안 백업 보관 (비용 청구됨)
- 명시적으로 삭제 필요
- 필요할 때 백업 가능
- 성능이나 지연시간에 영향을 미치지 않음
- AWS backup을 통해 정의 및 관리 가능
- 리전간 백업 설정 가능
- 복구 처리를 위해 새로운 테이블 생성
S3 Export
- S3로 데이터 보내기 가능
- PITR과 같이 사용
- 테이블의 읽기 성능에 영향을 받지 않음
- DynamoDB에 직접 접근하지 않고 데이터 분석 가능
- 이력 관리(Audit)를 위해 스냅샷을 남기는 경우에 사용
- DynamoDB를 다시 데이터를 넣기 전에 ETL 진행 가능
- DynamoDB JSON, ION 형식으로 데이터를 내보낼 수 있다.
S3 Import
- S3로부터 데이터 가져오기 가능
- 읽기 용량 소비 X
- 신규 테이블 생성
- 가져오기 과정에서 발생하는 에러들은 CloudWatch에서 확인 가능
- CSV, DynamoDB JSON, ION 형식으로 가져올 수 있다.
API Gateway
- 인프라 관리 필요 없음
- Websocket 프로토콜 지원
- API Versioning 지원
- 람다에 붙여서 람다를 Web으로 띄울 수 있음.
- 여러개의 환경 지원 (개발, 테스트, 상용 등등)
- 요청에 대한 쓰로틀링 설정 가능
- Swagger / OpenAPI로부터 빠르게 API Gateway를 구성할 수도 있다.
- 요청 / 응답 변형 및 검증 가능
- SDK와 API 정의 작성 가능
- 응답 캐싱함
타 서비스와 사용하기
- 람다: 람다의 REST API 공개 가능
- HTTP: 백엔드의 HTTP 엔드포인트 외부 노출(API 통신 관리를 인프라 단에서 처리한다는 장점)
- AWS Service: 모든 AWS 서비스 API를 API Gateway를 통해 공개 가능
엔드포인트 종류
- 엣지 최적화 (기본값)
- 글로벌 사용자 대상
- CloudFront Edge Location으로 라우팅
- 지연시간 감소
- API Gateway 자체는 한개 리전에만 있게 된다.
- 지역별
- 같은 리전 내부의 사용자 대상
- 직접 CloudFront와 연결 가능
- 캐싱 전략, CloudFront 배포에 대한 관리 직접 해야 함.
- 대신 불필요한 엣지 최적화로 발생하는 비용 감소
- Private
- VPC 내부에서만 접근 가능
- ENI 세팅 필요
- 접근 제어를 위해 IAM 정책 사용
보안
- 사용자 권한
- IAM Role (내부 서비스)
- Cognito (외부 사용자 인증)
- 별도의 인증 로직 (자사에서 사용하는 로직이 있는 경우)
- 사용자 정의 도메인 이름 HTTPS
- AWS Certificate Manager(ACM)과 연동해서 사용
- 엣지 최적화를 사용하는 경우 인증은 us-east-1에서
- 지역별을 사용하는 경우 API Gateway가 있는 리전에서 인증
- CNAME or A 레코드가 Route53에 정의돼 있어야 함.
AWS Step Function
- 람다 수행 workflow를 구성 가능
- 시각적으로 구성 가능
- 순차, 병렬, 조건, 시간제한, 에러 핸들링 등 가능
- EC2, ECS, 온프레미스, API Gateway, SQS 등과 사용 가능
- 사람과 상호작용하는 요소도 넣을 수 있음
Amazon Cognito
- 웹, 앱에서 사용하는 인증을 유저에게 제공
- Cognito User Pool과 Identity Pool로 나뉨
Cognito User Pool
- 앱 사용자에게 로그인 기능 제공
- API Gateway 또는 Application Load Balancer와 연동해서 사용 가능
- 사용자 정보를 저장하기 위해 자체적으로 서버리스 DB 생성
- email + pw로 간단한 로그인
- 비밀번호 초기화 제공
- 이메일 또는 핸드폰 번호 인증 제공
- MFA 제공
- 외부 서비스 인증과 연동 가능
Cognito Identity Pool
- 유저의 정보를 가져와서 직접 AWS 리소스에 접근할 수 있는 AWS 인증을 임시적으로 유저에게 제공
- 유저의 정보는 User Pool, 외부 서비스 등 다양한 곳에서 가져올 수 있음.
- 유저는 AWS 서비스에 바로 접근하거나 API Gateway를 통해 접근 가능
- IAM 정책은 Cognito에 미리 정의된 내용이 사용됨
- user_id를 기반으로 세밀하게 권한 조정 가능
- 기본 IAM Role은 인증된 유저에게만 제공
- PITR: Point In Time Recovery. 특정 시점에 대한 복구
- ETL: 데이터 추출, 변환, 전달하는 과정
- 쓰로틀링: 제한
'자격증 > SAA' 카테고리의 다른 글
[SAA] 데이터 분석 (0) | 2024.12.21 |
---|---|
[SAA] DB 총정리 (0) | 2024.12.21 |
[SAA] Integration (0) | 2024.12.10 |
[SAA] Storage with On-premise (0) | 2024.12.08 |
[SAA] Global Accelerator (0) | 2024.12.06 |