[Architecting on AWS] Serverless
Lambda
- 람다 함수 생성에 필요한 것.
- 함수 이름
- 런타임 (Python, JVM 등)
- application code
- 람다 프로세스는 항상 떠 있는 게 아니고 이벤트 트리거를 받으면 프로세스가 떠서 실행되는 구조. (최대 15분까지 떠 있을 수 있다.)
- 이벤트 트리거 주체는 SNS/S3/eventbridge 등 다양하다.
- CPU/memory 자원 점유 양에 따라 알아서 자원을 할당해준다. 대신 최소/최대 범위는 지정 필요.
- 이벤트 트리거 주체가 lambda 에 접근하도록 이벤트 트리거 주체에게 resource-based policy 를 자동으로 생성한다.
- 람다로 실행할 코드가 다른 서비스에 접근 권한이 필요하다면 람다 함수에게 해당 서비스 접근에 대한 role 을 부여해야 한다.
API Gateway
- lambda 으로 비즈니스를 구현하면 API Gateway 에서 REST API 스펙을 정의 & 람다 함수와 매핑.
- end-user 인증 담당 가능. (with Cognito)
SQS
- 컨수머가 메세지를 polling 해야 하는 구조.
- Type
- Standard
- 순서를 보장하지 않음
- 최소 한번 보장 (메세지를 중복으로 가지고 있을 수 있다.)
- 초당 호출 횟수에 제한 없음.
- FIFO
- 순서를 보장함.
- 최대 한번 보장 (메세지를 중복으로 가지고 있지 않으나 누락 가능?)
- 초당 300번까지 큐 호출 허용.
- visuality timeout (가시성 제한 시간)
- 메세지가 중복으로 처리되는 것을 방지하는 수단.
- visuality timeout 을 설정 → 어떤 컨수머가 메세지를 한번 polling 하면 해당 타임아웃이 세팅되고 타임아웃 될 때 까지 다른 컨수머들이 메세지를 읽어들일 수 없음.
- DLQ(Dead Letter Queue) 옵션 지원.
SNS
- service that fans out messages to multiple consumers.
- SNS 가 컨수머에게 메세지를 push 하는 구조.
Step Function
- service that orchestrates workflow with multiple steps.
- 여러 state 를 정의하고 각 state 에서 수행할 태스크를 람다 함수로 정의 가능.