서버리스 소개
- 서버리스 서비스는 새로운 서비스
- 사용 하는 개발자는 관리할 필요가 없음
- 서버가 없다는게 아니라 관리할 필요가 없다는 뜻
- 원래 서버리스는 FasS (Function as a Service)를 뜻 했음
- 즉 서버가 보이지 않거나 서버를 프로비저닝 하지 않는 것
Lambda 개요
- EC2는 계속 실행되는데 ASG로 스케일링해서 추가, 제거하는 작업을 하는데
- AWS Lambda로 코드를 프로비저닝하면 EC2가 아닌 함수를 실행하고 바로 꺼지게 할 수가 있다.
- 자동으로 AWS가 프로비저닝 해주기에 스케일링이 자동임
- 함수당 최대 10GB RAM
- 증가 시킬수록 CPU 및 네트워크 품질 성능 향상
- Lambda 컨테이너 이미지
- 이미지 자체가 Lambda의 런타임 API를 구현 해야함
- Lambda 런타임 API를 구현하지 않으면?
- ECS
- Fargate
- 위의 2개로 컨테이너를 실행 해야함
- 람다도 서버리스임
Lambda 제한
- 한도는 리전당 존재
- 실행 한도와 배포 한도가 있음
- 실행 한도
- 실행 시 메모리 할당량은 128MB에서 10GB
- 메모리는 1MB씩 증가
- 최대 실행 시간은 900초(15분)
- 환경 변수는 4KB까지 가능
- 큰 파일을 가져올 때 사용할 수 있는 임시 공간 존재
- /tmp 폴더에 용량이 있으며 최대 10GB
- Lambda 함수는 최대 1,000개까지 동시 실행이 가능
- 배포 한도
- 압축 시 최대 크기 최대 50MB
- 압축하지 않을때는 최대 250MB
- 용량을 넘는 파일의 경우
- /tmp 폴더에 용량이 있으며 최대 10GB
- 환경 변수는 4KB까지 가능
Lambda@엣지 & CloudFront Functions
- CrontFront 사용 할 때는 엣지 로케이션을 통해 콘텐츠 배포함
- 엣지 함수란?
모던 애플리케이션에서 애플리케이션에 도달하기 전, 엣지에서 로직을 실행하도록 요구하는 것
CloudFront 배포에 연결하는 코드
- 사용자 근처에서 실행하여 지연 시간 최소화가 목적
- 엣지 함수란?
- CloudFront에는 두 종류 함수가 존재
- CloudFront 함수 (엣지 함수)
- 서버를 관리할 필요가 없음 (서버리스)
전역으로 배포되기 때문 - 사용 사례
- CDN 콘텐츠
- 웹사이트 보안과 프라이버시
- 동적 웹 애플리케이션
- SEO
- 오리진 및 데이터 센터 간 지능형 경로
- 사용한 만큼만 비용을 지불
- CloudFront 함수는 JavaScript로 작성된 경량 함수 (엣지 함수)로
뷰어 요청과 응답을 수정함- CloudFront가 뷰어로부터 요청을 받은 다음에 요청을 수정 할 수 있음
- CloudFront가 뷰어에게 응답을 보내기전 뷰어 응답을 수정 할 수 있음
- 시작 시간은 1밀리초 미만
- 초당 백만개의 요청 처리
- 서버를 관리할 필요가 없음 (서버리스)
- Lambda@엣지
- CloudFront 함수 (엣지 함수)보다 기능이 좀 더 많음
- Node.js나 Python으로 작성
- 모든 CloudFront, Origin 요청 및 응답을 변경 할 수 있음
- CloudFront 배포를 관리하는 리전과 같은 리전만 작성 할 수 있음
- 실행에 5에서 10초정도 걸림
- CloudFront 함수 (엣지 함수)
Lambda in VPC
- 기본적으로 Lambda 함수를 시작하면 VPC 외부에서 시작 됨
- VPC는 AWS가 제공하는 서비스
- 그래서 VPC 내에서 리소스에 액세스할 권한이 없음
- RDS, ElastiCache 내부 로드 밸런서를 시작하면 Lambda 함수가 해당 서비스에 액세스를 못함
Lambda의 기본 설정이기 때문 - 인터넷 퍼블릭 API에 액세스 하는건 가능
- VPC에서 Lambda 함수를 시작하면 됨
- 1. Lambda 함수를 프라이빗 서브넷에 ENI(Elastic Network Interface)를 생성
- RDS 프록시
- RDS가 프라이빗 서브넷에 있는데 Lambda 함수로 직접 해당 DB에 액세스 하면
- 너무 많이 생성되었다가 사라지기에 RDS 데이터베이스 로드가 상승해서 시간 초과 걸림
- 그래서 RDS 프록시를 만들고 Lambda 함수를 RDS 프록시에 연결함
- RDS 프록시는 RDS를 바라보게 하면 된다.
- Lambda -> RDS Proxy -> RDS DB Instance
- 장점
- 연결의 폴링과 공유를 해 확장성 향상
- 장애 조치 시간 66% 줄여 가용성 향상, 연결 보존
- IAM 인증을 강제하여 보안성 생김
RDS - 람다 호출 및 이벤트 알림
- RDS 람다 호출
- 1. RDS가 람다 함수를 직접 호출
- 2. 람다 함수는 사용자에게 환영 이메일을 보냄
- 3. 사용자는 그걸 받게 됨
- 이것을 할려면 데이터베이스에 접속하고 그 안에서 설정하면 되는 것
AWS 콘솔에서 설정하는게 아님 - RDS 인스턴스가 람다 함수를 호출을 하는 것
- 그래서 RDS 인스턴스에 람다 함수로 오는 인바운트 트래픽을 허용 해야함
사실상 모든 방식으로 오는 트래픽을 허용해야함
람다가 퍼블릭 인터넷에 있는 경우에도 허용해야해서 - 네트워크 연결성이 중요
- 람다 함수를 호출하기에 필수적인 권한을 갖고 있어야함
- RDS가 적절한 IAM 정책을 갖고 있어야한다는 뜻
- 그래서 RDS 인스턴스에 람다 함수로 오는 인바운트 트래픽을 허용 해야함
- RDS 이벤트 알림
- AWS안에서 이루어짐
- 인스턴스 자체에 대한 정보를 알려주는 알림들이 있음
- 생성된 시각, 정지된 시각, 시작된 시각 등
- 데이터에 대한 정보는 전혀 없음
- 데이터베이스 인스턴스, 데이터베이스 스냅샷, 파라미터 그룹, 보안 그룹, 프록시.. 등의 이벤트를 구독 할 수 있음
- 하지만 데이터베이스 안의 데이터에 관한 정보는 받지 않음
Amazon DynamoDB 개요
- 완전 관리형 데이터베이스 (서버리스)
- 데이터가 다중 AZ 간에 복제 돼서 가용성이 높다.
- NoSQL 데이터베이스
- 트랜잭션 기능 지원
- DynamoDB를 이용하면 방대한 워크로드로 확장이 가능
- DB가 내부에서 분산되기 때문
- 초당 수백만 개 요청 처리
- 수조 개의 행, 수백 TB 스토리지를 갖게 됨
- 성능은 한 자릿수 밀리초
- 보안과 관련된 모든 기능 IAM과 통합
- 비용이 적게 들고
- 오토스케일링 기능 탑재
- 데이터베이스 프로비저닝 안해도됨
항상 사용이 가능해서 테이블 생성해서 해당 테이블 용량만 설정하면 됨
- Standard
- 액세스가 빈번한 데이터일 경우 사용
- IA 테이블 클래스
- 액세스가 빈번하지 않는 데이터일 경우 사용
- DynamoDB 항목 최대 크기는 400KB
- 스키마를 빠르게 전개해야할 때 사용하면 좋음
- 프로비저닝된 모드
- 초당 읽기/쓰기 요청 수를 예측해서 미리 지정하면
테이블의 용량이 됨 - 예측 할 수 있고 서서히 전개되며 비용 절감을 원할 때 적합
- 초당 읽기/쓰기 요청 수를 예측해서 미리 지정하면
- 온디맨드 모드
- 읽기 / 쓰기 용량이 워크로드에 따라 자동으로 확장됨
- 용량 계획을 하지 않아서 RCU, WCU 개념이 없음 (읽기/쓰기 개념이 없음)
- 비용이 비쌈
- 워크로드를 예측할 수 없거나 급격히 증가 할때 사용하기 적합
Amazon DynamoDB 심화 기능
- DynamoDB Accelerator (DAX)
- DynamoDB를 위한 고가용성 완전 관리형 무결절 인메모리 캐시
- 읽기 작업이 많을 때 DAX 클러스터 생성하고 데이터를 캐싱해서 읽기 혼잡을 해결
- 캐시 기본 TTL은 5분
- ElastiCache가 아니라 DAX를 쓰는 이유는?
- 집계 결과를 저장 할때는 ElastiCache가 좋고
- 대용량의 연산을 저장 할 때 DynamoDB를 사용
- DynamoDB - 스트림 프로세싱
- 테이블의 모든 수정 사항 (CRUD)를 포함한 스트림 생성이 가능
- 예시
- 사용자 테이블에 새로운 사용자가 등록됐을 때 환영 이메일을 보내는 등
- 실시간으로 사용 분석을 하거나
- 파생 테이블을 삽입 할 수도 있음
- 리전 간 복제를 실행 할때도 사용
- 두 가지 스트림 처리가 있음
- DynamoDB Streams
- 보존 기간 24시간
- 소비자 수가 제한 됨
- Lambda 트리거와 함께 사용시 좋음
- 자체 읽기 실행할려면 DynamoDB Stream Kinesis 어댑터 사용
- Kinesis Data Streams
- 보존 기간 1년
- 더 많은 수의 소비 자 수 가능
- 데이터 처리 하는 방법 많음
- AWS Labda 함수
- Kinesis Data Analytics
- Kinesis Data Firehose Glue
- 스트링 ETL
- 등
- DynamoDB Streams
- DynamoDB Global Tables
- 여러 리전 간에 복제가 가능한 테이블
- 테이블 간에 양방향 복제가 가능
- 복수의 리전에서 짧은 지연 시간으로 액세스 할 수 있게 해줌
- 활성화 할려면은
- DynamoDB Stream 활성화 필요
- DynamoDB Time to Live (TTL)
- 만료 타임스탬프가 지나면 자동으로 항목 삭제하는 기능
- 주로 사용 사례는 웹 세션 핸들링
- 세션을 중앙 저장소인 DynamoDB에 두시간 저장 하고 시간 지나면 삭제 하는 식으로
- DynamoDB 지정 시간 복구 (PITR)
- 활성화 선택을 할 수 있고
- 35일 동안 지속됨
- 활성화 하면 백업 기간내에 언제든 지정 시간 복구 가능
- 복구 할 경우 새로운 테이블을 만들어 줌
- 35일 이상 하고 싶으면 온디맨드 백업
- 직접 삭제 할때까지 보존
- 백업을 관리 할려면 AWS Backup 서비스
- 백업에 수명 주기 정책 활성화 할 수 있음
- 재해 복구 목적으로 리전 간 백업 복사 가능
- 복구 할 경우 새로운 테이블을 만들어 줌
- DynamoDB와 S3간 통합
- 지정 시간 복구 기능 활성해 해야지 사용이 가능
- DynamoDB -> S3로 보낸 후 쿼리를 수행할려면 Amazon Athena 엔진 사용
- 보낼때 JSON, ION 포맷 지원
- 테이블을 내보내도 테이블 읽기 용량이나 성능에 영향 안줌
- 지정 시간 복구 기능이 활성화가 되어있어서 35일 이내 어떤 시점이든 S3로 보낼수있음
- S3 -> DynamoDB로도 보낼수 있음
- 보낼때 CSV, JSON, ION 포맷 지원
API Gateway 개요
- AWS의 서버리스 서비스로 REST API를 생성 할 수 있어서
클라이언트가 퍼블릭 액세스 할 수 있음- Lambda 함수 요청을 바로 HTTP 엔드포인트로 가능
- Lambda는 DynamoDB랑 연결해서 CRUD 가능
- Lambda 함수 요청을 바로 HTTP 엔드포인트로 가능
- API Gateway + Lambda와 통합하면 완전 서버리스 애플리케이션이 구축 됨
- 인프라 관리 필요없음
- WebSocket 프로토콜 지원
- dev, test, prod등 여러 환경 핸들링 가능
- 보안에도 활용 가능
- 인증, 권한 부여 등 수많은 보안 기능 활성화 가능
- Swagger나 Open API로 내보낼수도 있음
- 어떤 통합을 지원하는가?
- AWS Lambda
- Kinesis Data Streams
- 엔드포인트 형식 종류
- Edge-Optimized(엣지 로케이션)
- 글로벌 클라이언트용
- 전 세계 누구나 API Gateway 액세스 가능
- Regional (리전)
- 같은 리전에 있는곳에만 배포
- Private (비공개)
- VPC내에서만 액세스 할 수 있음
- ENI 같은 인터페이스 VPC 엔드포인트를 사용
- Edge-Optimized(엣지 로케이션)
- API Gateway 보안
- IAM 역할 사용
- Amazon Cognito
- HTTPS 보안
Step Functions
- 서버리스 워크플로를 시각적으로 구성 할 수 있는 기능
- 주로 람다 함수를 오케스트레이션 하는데 활용
- 복잡한 워크플로를 만들때 실행시킬 수 있는 도구
- 제공하는 기능
- 시퀀싱
- 병행 실행
- 조건 설정
- 타임아웃
- 에러 처리하기
- 등
- 람다 함수만 되는게 아니라 EC2, ECS, 온프레미스 서버, API 게이트웨이, SQS 큐 등 다양함
- 사람이 개입해서 승인을 해야하는 단계도 설정 가능
Amazon Cognito 개요
- 사용자에게 웹 및 모바일 앱과 상호 작용할 수 있는 자격 증명을 부여해줌
- 모르는 사용자들에게 자격 증명을 부여 해 인식(Cognito) 한다.
- 두 종류의 하위 서비스가 있음
- Cognito 사용자 풀
- 앱 사용자에게 가입 기능을 제공
- API Gateway 및 ALB 원활히 통합됨
- 페더레이션 자격 증명
- 앱에 등록된 사용자에게 임시 AWS 자격 증명을 제공
- AWS 리소스에 직접 액세스를 가능하게 해줌
- Cognito 사용자 풀과 원활히 통합 가능
- Cognito 사용자 풀
- IAM에 이미 사용자가 있지 않나?
- AWS 외부의 웹과 모바일 앱 사용자를 대상으로 하는 것임
- 수백 명의 사용자
- 모바일 사용자
- SAML을 통한 인증
- AWS 외부의 웹과 모바일 앱 사용자를 대상으로 하는 것임
- Cognito 사용자 풀(CUP)에 대한 자세한 설명
- 웹 및 모바일 앱을 대상으로 하는 서버리스 사용자 DB
- 사용자 이름, 이메일, 비밀번호 조합 등으로 간단한 로그인 절차 정의 가능
- 비밀번호 재설정 기능
- 이메일 및 전화번호 검증
- MFA 인증
- 페이스북, 구글 통합 소셜 로그인 가능
- 페더레이션 자격 증명에 대한 자세한 설명
- 사용자에게 자격 증명 제공하지만 API Gateway나 ALB 통해서 액세스 하지 않고
- 임시 AWS 자격 증명을 사용해 AWS 계정에 직접 액세스 함
- 따라서 사용자는
Cognito 사용자 풀내의 사용자가 될 수도 있고
타사 로그인이 될 수도 있음
- 따라서 사용자는
- 자격 증명에 적용되는 IAM 정책은 Cognito 자격 증명 풀 서비스에 사전 정의 되어있음
- user_id를 기반으로 사용자를 정해서 세분화된 제어 가능
- 게스트 사용자나 특정 역할 없으면 기본 IAM 역할 상속
- DynamoDB에 행 수준 보안이 설정 가능함
- 대신에 DynamoDB LeadingKeys가 Cognito 자격 증명 사용자와 ID가 같아야함
- 정책이 적용된 사용자는 DynamoDB에 액세스를 얻은 항목에만 액세스 가능
'스터디 > AWS SAA' 카테고리의 다른 글
섹션 21: AWS의 데이터베이스 (0) | 2024.01.12 |
---|---|
섹션 20: 서버리스 솔루션 아키텍처 토론 (0) | 2024.01.11 |
섹션 18: AWS의 컨테이너: ECS, Fargate, ECR 및 EKS (1) | 2024.01.09 |
섹션 17: 디커플링 애플리케이션: SQS, SNS, Kinesis, Active MQ (1) | 2024.01.08 |
섹션 16: AWS 스토리지 추가 기능 (0) | 2024.01.06 |