SMALL
1. Serverless
- 서버리스 서비스를 사용하는 개발자는 더이상 서버를 관리할 필요가 없다. 서버가 없다는 뜻이 아닌, 관리할 필요가 없다는 의미이다.
- 개발자는 단지 코드를 배포하고 함수를 배치하기만 하면 됨
- 초기의 서버리스는 Faas(Function as a service)를 의미했지만, 지금의 서버리스는 더 많은 것을 의미
- AWS Lambda로부터 서버리스는 개발되었고, 이제는 DB, Messaging, Storage 등을 포함한 모든 관리형 서비스를 의미함
- 서버리스는 서버가 없음을 의미하는 것이 아니라 서버가 보이지 않거나 관리하지 않고 프로비저닝 하지 않는 것을 의미
- Serverless in AWS
- AWS Lambda
- DynamoDB
- AWS Cognito
- AWS API Gateway / Amazon S3
- AWS SNS & SQS
- AWS Kinesis Data Firehose / Aurora Serverless
- Step Functions
- Fargate
2. AWS Lambda
- Why AWS Lambda
- Amazon EC2
- 클라우드 가상 서버 - 프로비저닝 필요
- RAM과 CPU 크기가 제한됨
- 지속적으로 실행됨
- 스케일링은 서버를 추가하거나 제거하는 작업을 해야 함
- Amazon Lambda
- 가상 함수 - 관리할 서버가 없음
- 제한 시간이 잆음 - 짧은 실행시간
- 온디맨드로 실행(호출 시 실행)
- 스케일링 자동화
- Amazon EC2
- AWS Lambda의 장점
- 쉬운 가격 정책
- 호출횟수 및 컴퓨팅 시간, Lambda가 실행된 만큼 청구
- Lambda 요청 1백만건과 40만 GB 컴퓨팅 시간에 대한 프리 티어 제공
- AWS의 전체 서비스와 통합 가능
- 다양한 프로그래밍 언어 사용 가능
- AWS CloudWatch를 통한 쉬운 모니터링
- 함수당추가 리소스 확보가 쉬움 (최대 10 gb의 램을 프로비저닝 할 수 있음)
- RAM을 증가시키면 CPU 및 네트워크 성능도 향상됨
- 쉬운 가격 정책
- 사용가능 언어
- Node.js (Javascript)
- Python
- Java(compatible with Java8)
- C# (.NET Core)
- Golang
- C# / Powershell
- Ruby
- Custom Runtime API (Community-supported, ex) Rust)
- Lambda 컨테이너 이미지 지원
- Lambda 컨테이너 이미지는 Lambda. Runtime API를 구현해야 함
- 임의의 Dockeer 이미지를 실행하기 위해서는 ECS 또는 Fargate를 사용하는 것이 권장됨
- AWS Lambda Integrations Main ones
- API Gateway: REST API 생성, 람다 함수 호출
- Kinesis: Lambda를 이용해 바로 데이터 변환
- DynamoDB: 데이터베이스에 트리거가 생기면 람다 함수가 작동
- S3: 언제든 lambda 함수를 작동시킬수 있음
- CloudFront: Lambda@Edge
- CloudWatch Events & EventBridge: AWS의 인프라에 어떤 일이 생기고 그상황에 대응하고자 할 때 상황에 따라 자동화를 실행하기 위해 람다함수 호출
- CloudWatch Logs: 어디든 해당 로그를 스트리밍
- SNS: 알림과 SNS 주제에 대처 가능
- SQS: SQS 대기열 메시지 처리 기능
- Cognito: 사용자가 데이터베이스에 로그인할 때마다 응답
- AWS Lambda Pricing
- 요청당 지불
- 처음 1백만건 요청 무료
- 이후 1백만건 요청마다 $0.2 (요청당 $0.0000002)
- 기간당 지불
- 월당 첫 40만 GB/sec의 컴퓨팅 시간은 무료
- == 함수가 1GB RAM인 경우 40만초
- == 함수가 128MB RAM인 경우 320만초
- 이후 60만 GB/sec 에 대해 $1 청구
- 월당 첫 40만 GB/sec의 컴퓨팅 시간은 무료
- AWS Lambda의 실행 비용은 매우 저렴하여 사용자에게 인기가 있음
- 요청당 지불
- AWS Lambda Limits to know - per region
- 실행
- 메모리 할당: 128mb ~10gb (메모리는 1mb씩 증가)
- 최대 실행 시간: 900초(15분)
- 환경 변수: 4kb 까지
- "함수 컨테이너"의 디스크 용량(/tmp 폴더): 512mb ~ 10gb
- 동시 실행 횟수: 1,000회 (증가 가능)
- 배포
- Lambda 함수 배포 시 최대 크기(압축된 .zip 파일): 50mb
- 압축하지 않았을 때의 배포 크기(코드 + dependecies): 250mb
- 시작 시 다른 파일을 로드하기 위해 /tmp 디렉토리 사용 가능
- 환경 변수: 4kb
- 실행
- Edge Function: Lambda@Edge & CloudFront Functions
- Customization At The Edge
- 보통은 함수와 애플리케이션을 특정 리전에서 배포하지만 CloudFront를 사용할 때에는 엣지 로케이션을 통해 콘텐츠를 배포한다.
- 모던 애플리케이션에서는 애플리케이션에 도달하기 전에 엣지에서 로직을 실행하돋록 요구하기ㅗㄷ 함
- 엣지 함수
- CloudFront 배포에 연결하고 작성한 코드
- 지연시간을 최소화하기 위해 사용자에게 가까운 위치에서 실행됨
- CloudFront
- CloudFront Functions
- Lambda@Edge
- 서버를 관리할 필요 없이 전역으로 배포됨
- ex) CDN 콘텐츠를 사용자가 지정하는경우
- 사용한 만큼 비용 지불
- 완전한 서버리스
- CloudFront Functions & Lambda@Edge Use Cases
- 웹사이트 보안 및 개인정보 보호
- 엣지에서 동적 웹 애플리케이션
- 검색 엔진 최적화(SEO)
- 다양한 오리진과 데이터 센터 간 지능적인 라우팅
- 엣지에서의 봇 완화
- 실시간 이미지 변환
- A/B 테스팅
- 사용자 인증 및 권한 부여
- 사용자 우선 순위 지정
- 사용자 추적 및 분석
- CloudFront Functions
- Javascript로 작성된 경량화된 함수
- 확장성이 높고 지연 시간에 민감한 CDN 사용자 지정에 사용됨
- 시작 시간은 1ms 이하, 초당 수백만개의 요청 처리
- Viewer 요청 및 응답 변경에 사용
- 뷰어 요청: CloudFront가 뷰어로부터 요청을 받은 다음 뷰어 요청 수정 가능
- 뷰어 응답: CloudFonrt가 뷰어에게 응답을 보내기 전에 뷰어 응답 수정 가능
- CloudFront의 네이티브 기능(모든 코드가 CloudFront에서 직접 관리)
- CloudFront는 고성능, 고확장성이 필요할 때 뷰어 요청과 뷰어 응답에만 사용됨
- 사용 사례
- 캐시키 정규화 - 요청 속성(헤더, 쿠키, 쿼리 문자열, URL)을 변환하여 최적의 캐시키 생성
- 헤더 조작 - 요청 또는 응답에서 http 헤더 삽입/수정/삭제
- URL 재작성 또는 리디렉션
- 요청 인증 및 권한 부여 - 사용자가 생성한 토큰(jwt 등) 생성 및 유효성 검사를 통한 요청 허용/거부
- Lambda@Edge
- Node.js 또는 Python으로 작성된 Lambda 함수
- 초당 수천개의 요청 처리
- 모든 CloudFornt 요청 및 응답 변경에 사용
- 뷰어 요청: CloudFront가 뷰어로부터 요청을 받은 다음 뷰어 요청 수정 가능
- 오리진 요청: CloudFront가 오리진에 요청을 전송하기 전에 수정
- 오리진 응답: CloudFront가 오리진에서 응답을 받은 후에 수정
- 뷰어 응답: CloudFront가 뷰어에게 응답을 보내기 전에 뷰어응답 수정 가능
- 함수는 하나의 AWS 리전(us-east-1)에서 작성하고, CloudFront가 모든 로케이션에 해당 함수 복제
- 더 긴 실행시간 (수밀리초)
- 조정 가능한 CPU 또는 메모리
- 코드가 3rd party library에 의존하는 경우(ex: 다른 aws 서비스에 액세스하기 위한 aws sdk)
- 데이터 처리를 위한 외부 서비스에 대한 네트워크 액세스를 통해 대규모 데이터를 통합 수행
- 파일 시스템 액세스 또는 http 요청의 본문에 대한 액세스
- Customization At The Edge
CloudFront Functions | Lambda@Edge | |
---|---|---|
Runtime Support | JavaScript | Node.js, Python |
# of Requests | Millions of requests per second | Thousands of requests per second |
CloudFront Triggers | Viewer Request/Response | - Viewer Request/Response - Origin Request/Response |
Max. Execution Time | < 1 ms | 5 - 10 seconds |
Max. Memory | 2 mb | 128 mb up to 10 gb |
Total Package Size | 10 kb | 1 mb - 50 mb |
Network Access, File System Access | no | yes |
Access to the Request Body | no | yes |
Pricing | free tier available, 1/6th price of @Edge | no free tier charge per request & duration |
- Lambda in VPC
- 기본적으로 Lambda 함수는 사용자의 VPC가 아닌 AWS 소유의 VPC에서 실행됨, VPC 내에서 리소스(RDS, ElasticCache, 내부 ELB)에 액세스 할 수 없음
- 사용자의 VPC에서 Lambda 함수를 실행하려면 VPC ID Lambda 함수를 시작하려는 서브넷을 지정하고 Lambda 함수에 보안그룹을 추가해야 함, Lambda는 사용자의 서브넷에 ENI(Elastic Network Interface)를 생성
- Lambda with RDS Proxy
- VPC에서 Lambda를 사용하는 대표적인 사용사례는 RDS Proxy이다.
- RDS 데이터베이스가 프라이빗 서브넷에 있어도 Lambda 함수로 직접 해당 DB에 액세스할 수 있다.
- 위의 방법으로 Lambda 함수가 직접 DB에 액세스 하게 되면 RDS 데이터베이스의 로드가 상승해 시간 초과 등의 문제로 이어지기 때문에 RDS Proxy를 사용한다.
- RDS Proxy
- DB 연결의 풀링과 공유를 통해 확장성 향상
- 장애가 발생할 경우 장애 조치 시간을 66%까지 감소시키고 연결을 유지함으로써 가용성 향상
- IAM 인증을 강제화하고 자격 증명을 Secret Manager에 저장함으로써 보안을 향상시킴
- RDS Proxy는 퍼블릭 액세스가 불가능하므로 Lambda 함수는 반드시 사용자의 VPC에 배포되어야 함
3. Amazon DynamoDB
- 완전 관리형 데이터베이스
- 다중 AZ간의 데이터 복제를 통해 고가용성 제공
- NoSQL (관계형 DB X, transaction 지원)
- 대규모 워크로드로 확장 가능한 분산 데이터베이스
- 성능이 빠르고 일관성을 유지함(한 자릿수 밀리초의 성능)
- 보안, 인가 및 관리를 위해 IAM과 통합되어 있음
- 저렴한 비용, 오토 스케일링 기능 제공
- 유지 관리나 패치 작업이 필요 없으며 항상 사용 가능
- Standard 및 Infrequent Access(IA) 테이블 클래스 지원
- DynamoDB는 테이블로 구성
- 각 테이블에는 PK(Primary Key)가 있음 - 생성 시 부여
- 각 테이블에는 무한한 개수의 항목(=rows)를 가질 수 있음
- 각 항목은 속성이 있음(추후 추가 가능 / null 가능)
- 항목의 최대 크기는 400kb
- 지원하는 데이터 타입
- Scalar Types: string, number, binary, boolean, null
- Document Types: list, map
- Set Types: String set, Number Set, Binary Set
- 스키마를 빠르개 전개해야할 때 Aurora나 RDS보다 DynamoDB가 더 나은 선택임
- Read/Write Capacity Modes
- 테이블의 용량 (읽기/쓰기 처리량)을 관리하는 방식을 제어
- Provisioned Mode(default)
- 초당 읽기/쓰기 수를 예측하여 미리 지정
- 용량을 사전에 계획히야 함
- 프로비저닝된 읽기 용량 단위(RCU) 및 쓰기 용량 단위 (WCU)에 대해 비용을 지불
- RCU 및 WCU에 대한 오토 스케일링 가능
- On-demand Mode
- 읽기/쓰기 작업량에 따라 자동으로 확장/축소
- 용량 계획 필요 X
- 사용한만큼 비용을 지불하며, 비용이 더 비싸지만 사용량에 따라 유연하게 대응 가능
- 예측할 수 없는 작업량이나 급격한 증가가 예상되는 경우에 적합
- DynamoDB Advanced Features
- DynamoDB Accelerator(DAX)
- DynamoDB를 위한 완전 관리형 무결절 인메모리 캐시
- DynamoDB 테이블에 읽기 작업이 많을 때 DAX 클러스터를 생성하고 데이터를 캐싱하여 읽기 혼잡을 해결
- 캐시된 데이터에 대한 마이크로초 수준의 지연 시간
- 애플리케이션 로직 수정이 필요 X (기존 DynamoDB API와 호환)
- 캐시의 기본 TTL 값은 5분
- DynamoDB Accelerator(DAX) VS ElasticCache
- DAX는 DynamoDB 앞에 있고 개별 객체 캐시, 쿼리, 스캔 캐시를 처리하는 데에 유용
- 집계결과 저장시에는 Amazon ElasticCache가 좋고, 대용량 연산 저장 시에는 Amazon DynamoDB가 좋다.
- Stream Processing
- 데이터의 변경 사항을 실시간으로 감지하고 처리하는 기술
- DynamoDB의 스트림은 테이블엥서 발생하는 모든 항목의 생성, 업데이트, 삭제 작업에 대한 변경 이벤트를 기록하는 일련의 이벤트 스트림
- ex) 실시간으로 변경 사항에 대응하기(사용자에게 환영 이메일 보내기), 실시간 사용 분석, 파생 테이블 삽입, 리전 간 복제 구현, DynamoDB 테이블 변경 시 AWS Lambda 호출
- DynamoDB Stream
- 보존기간: 24 hours
- 소비자 수 제한
- Lambda 트리거 또는 DynamoDB Stream adapter 사용 가능
- Kinesis Data Stream
- 보존기간: 1 year
- 더 많은 소비자 수
- AWS Lambda, Kinesis Data Analytics, Kinesis Data Firehose, AWS Glue Streaming ETL 등에 사용
- DynamoDB Global Table
- 여러 리전간에 짧은 지연 시간으로 액세스 할 수 있도록 하는 기능
- active - active 복제
- 애플리케이션은 어떤 리전에서든 해당 테이블을 읽고 쓸 수 있음
- Global Tables를 설정하기 위해서는 먼저 테이블에 DynamoDB Streams를 활성화해야 함
- Time To Live(TTL)
- 만료 타임스탬프가 지난 항목을 자동으로 삭제하는 기능
- ex) 최근 항목만 저장, 규정 준수, 웹 세션 핸들링 등
- Backups for disaster reecovery
- 지정 시간 복구(Point-in-time Recovery, PITR)을 통한 지속적인 백업
- 선택적으로 활성화 가능, 최근 35일간 지속
- 활성화하면 백업 기간 내에는 언제든 백업 윈도우 내에서 복구 가능
- 복구 과정에서는 새로운 테이블 생성
- On-Demand backups
- 장기 보관을 위해 명시적으로 삭제할때 까지 보관되는 전체 백업 수행
- 성능이나 지연 시간에 영향을 주지 않음
- AWS Backup Service에서 구성 및 관리할 수 있음(교차 리전 복사 기능 사용 가능)
- 복구 과정에서는 새로운 테이블 생성
- 지정 시간 복구(Point-in-time Recovery, PITR)을 통한 지속적인 백업
- Integration with Amazon S3
- S3로 내보내기 (Export to S3) - PITR 기능을 활성화해야 함
- 최근 35일 이내 어떤 시점으로든 테이블을 내보낼 수 있음
- 읽기 용량이나 성능에 영향 X
- 데이터 분석 수행 가능
- 감사 목적으로 스냅샷 확보 가능
- 데이터를 다시 DynamoDB로 가져오기 전에 데이터 ETL등 대규모 변경을 실행할 수 있음
- DynamoDB JSON 또는 ION 형식으로 내보내
- S3에서 가져오기 (Import from S3)
- S3에서 CSV, DynamoDB JSON 또는 ION 형식의 데이터를 가져와 DynamoDB에 새로운 테이블로 import
- 쓰기 용량을 소모하지 않음
- import 중 발생하는 오류는 모두 CloudWatch Logs에 기록
- S3로 내보내기 (Export to S3) - PITR 기능을 활성화해야 함
- DynamoDB Accelerator(DAX)
4. AWS API Gateway
- AWS Lambda + API Gateway: 완전 서버리스 애플리케이션이 구축되므로 인프라 관리가 필요 없음
- WebSocket 프로토콜 지원: 양방향 통신 가능
- API 버전 관리
- 환경 관리(dev, test, prod)
- 보안 관리
- API 키 생성, 요청 스트롤링
- Swagger/OpenAPI와 같은 공통 표준을 사용하여 신속히 API를 정의하여 가져올 수 있고 Swagger/OpenAPI로 내보낼 수 있음
- 요청 변환 및 유효성 검사
- API 응답 캐시
- Integrations High Level
- Lambda Function
- Lambda 함수를 호출하는 방식, 백엔드와의 통합 구성
- AWS Lambda를 백엔드로 사용하여 REST API를 간편하게 호출
- HTTP
- 백엔드에 있는 HTTP 엔드포인트를 노출하는 방식으로 통합 구성
- 온프레미스에 있는 내부 HTTP API나 Application Load Balancer와 같은 시스템 연결 가능
- 속도 제한, 캐싱, 사용자 인증, API 키 등의 기능을 추가 가능
- AWS Service
- API Gateway를 통해 어떤 AWS API라도 노출할 수 있음
- AWS Step Functions 워크플로우를 시작하거나 SQS에 메시지를 게시하는 등의 작업을 수행 가능
- 인증, API Public 배포, 특정 AWS 서비스에 속도 제한 추가 가능
- Lambda Function
- AWS Service Integration Kinesis Data Streams example
- Kinesis Data Stream에 사용자가 데이터를 전송할 수 있지만 AWS 자격증명은 가질 수 없도록 보안 설정 가능
- Kinesis Data Stream과 클라이언트 사이에 API Gateway를 둠
- 클라이언트가 API Gateway로 HTTP 요청을 보내면 Kinesis Data Stream에 전송하는 베시지로 구성해 전송 (따로 서버 관리 필요 X)
- Kinesis Data Stream에서 Kinesis Data Firehose로 레코드 전송
- 최종적으로 JSON 형식으로 Amazon S3 버킷에 저장
- Endpoint Types
- Edge-Optimized(default): 글로벌 클라이언트용
- 요청이 클라우드프론트 엣지 위치를 통해 라우팅(지연 시간 개선)
- API Gateway는 여전히 생성된 리전에 위치 - but 모든 CloudFront Edge Location에서 액세스 가능
- Regional
- 동일한 리전 내의 클라이언트용 - 모든 사용자는 API Gateway를 생성한 리전과 같은 리전에 있어야 함
- 수동으로 CloudFront와 결합 가능(캐싱 전략 및 배포에 대해 더 많은 제어 가능)
- Private
- 인터페이스 VPC 엔드포인트(ENI)를 사용하여 VPC 내에서만 액세스할 수 있음
- 리소스 정책을 사용하여 액세스 정의
- Edge-Optimized(default): 글로벌 클라이언트용
- Security
- User Authentication through
- IAM Roles - 내부 애플리케이션에서 유용
- Cognito - 외부 사용자를 위한 신원 확인(모바일 사용자)
- 사용자 지정 권한 부여 - 자체 로직 실행
- Custom Domain Name HTTPS security through integration with AWS Certificate Manager (ACM)
- Edge-Optimized 엔드포인트를 사용하는 경우 인증서는 us-east-1에 있어야 함
- regional 엔드포인트 사용 시에 인증서는 API Gateway 리전에 있어야 함
- Route 53에서 CNAME 또는 A-alias 레코드를 설정하여 도메인 및 API Gateway를 가리키도록 해야 함
- User Authentication through
5. AWS Step Functions
- Lambda 함수를 조율하기 위한 서버리스 워크플로우를 시각적으로 구축할 수 있는 서비스
- 기능: 시퀀스, 병렬처리, 조건부 실행, 타임아웃, 오류 처리 등
- Lambda 함수 뿐만 아니라 EC2, ECS, On-Premise Server, API Gateway, SQS Queue 등 다양한 AWS 서비스와 통합 가능
- 사람이 개입해서 승인을 해야만 진행되는 단계를 설정할 수 있음
- 주문 처리, 데이터 처리, 웹 애플리케이션 등 구성하기 복잡한 다양한 워크플로우를 시각적으로 구성하려고 할 때 사용
LIST
'develop > AWS' 카테고리의 다른 글
[SAA] Databases (0) | 2024.06.20 |
---|---|
[SAA] Serverless Architectures (1) | 2024.06.19 |
[SAA] Container: ECS, Fargate, ECR, EKS (0) | 2024.06.17 |
[SAA] Advanced Storage on AWS (1) | 2024.05.31 |
[SAA] Global Infrastructure (1) | 2024.05.10 |