Share
Sign In

Lambda & Step Function & API Gateway

1. Lambda

💡
Lambda는 다른 서비스와 결합해서 사용하는 문제가 잘 나온다.
Timeout : 한 번에 최대 15분까지 동작한다.
DLQ resource : 오류가 난 요청을 DLQ로 보낸다.
X-Ray : 요청의 처리 과정을 추적한다.
동시성 : 동시에 최대 1000까지 처리할 수 있다. 더 필요하면 AWS에 요청해야 한다.
로그 : 요청별로 상세한 로그를 확인할 수 있다.
환경 변수 : 직접 입력하거나 SSM Parameter Store로 값을 주입할 수 있다. KMS 암호화도 가능하며, Secret Manager의 값을 주입할 수도 있다.

Source and Use Cases

API Gateway : 인증, 인가 등의 기능을 포함하는 HTTP/HTTPS 인터페이스를 제공
Application Load Balancer : HTTP/HTTPS 인터페이스를 제공
CW Events : AWS 내의 모든 이벤트 전송 가능. cron도 가능
CW Logs : 로그를 실시간으로 보낸다.
CodeCommit : 누가 commit하면 invoke
DynamoDB : DynamoDB stream을 실시간으로 처리 (인증, 이메일 전송 등)
Kinesis : 실시간 데이터 처리
S3 : 새로운 파일 추가 등의 이벤트를 비동기로 처리
SNS/SQS : Decoupling

Version & Alias

Version : 소스코드와 config가 스냅샷되어 저장된다. 버전은 변경되지 않는다.
$LATEST : 가장 최신 버전을 가리킨다.
Alias : 버전을 가리키는 커스텀 포인터다. 여러 버전을 가중치를 줘서 가리킬 수 있다.
CodeDeploy를 사용하면 Alias의 가중치를 자동으로 바꿔 업데이트를 진행할 수 있다.

SAM Framework

AWS에서 serverless app을 만들기 위한 프레임워크이다.
SAM CLI : SAM template을 CFN 형식으로 변환해주는 역할을 한다.
build 하면 도커 파일을 만든다.

CodeDeploy 연동

Resources: MyLambdaFunction: Type: AWS::Serverless::Function Properties: Handler: index.handler Runtime: nodejs12.x CodeUri: s3://bucket/code.zip AutoPublishAlias: live DeploymentPreference: Type: Canary10Percent10Minutes Alarms: # A list of alarms that you want to monitor Hooks: # Validation Lambda functions that are run before & after traffic shifting
AutoPublishAlias : 어느 alias를 새 버전으로 갱신할 것인가?
DeploymentPreference : 배포 설정
위 코드로만 수정하고 배포하면 자동으로 CodeDeploy의 배포 그룹이 생성된다. 따로 설정할 게 없다!

2. Step Functions

워크플로우를 시각적으로 보여주고 각 단계별로 Lambda 함수나 다른 서비스를 호출할 수 있는 서버리스 오케이스트레이션 서비스이다. Lambda와는 다르게 Step Functions은 최장 1년까지 하나의 작업을 수행할 수 있다.

3. API Gateway

API 요청을 람다 함수나 다른 AWS 서비스에 넘겨주는 서버리스 프록시 서비스이다.
API 버전(v1, v2, ...)과 스테이지(dev, test, prod)을 만들 수 있다.
인증과 권한 할당을 다룰 수 있다.
Swagger나 OpenAPI에서 정의한 API를 가져올 수 있다.
API 응답을 캐싱할 수 있고, API Key를 만들 수 있다.
CloudWatch Logs를 만들 수 있다.

Endpoint Type

Regional : 해당 리전에만 적용된다.
Private : VPC endpoint를 뚫어야만 쓸 수 있다.
Edge optimized : CloudFront edge에 API 배포해 레이턴시를 줄인다.

Lambda와 연동

alias를 가리킬 수 있기 때문에, Lambda가 수정되더라도 API Gateway는 수정할 필요가 없다.
Mapping Templates : 요청을 템플릿을 통해 수정한 후 Lambda로 보낼 수 있다.

Stage

stage : dev, prod 처럼 우리가 임의로 정하는 환경이다. API는 각 stage에 배포된다.
stage 변수 : stage별로 설정할 수 있는 일종의 환경 변수.
stage별로 각기 다른 Lambda alias를 설정할 수 있다. 이렇게 하면 Lambda 함수가 업데이트되어도 API Gateway는 수정할 필요가 없어진다.

Stage canary 배포

Lambda와 비슷하게 API Gateway도 canary 배포를 진행할 수 있다. 로그와 메트릭은 따로 저장된다.

Throttles

API Gateway는 한 계정에서 리전별로 초당 요청 수가 제한되어 있다. 따라서 이 요청을 세밀하게 제한할 필요가 있는데 이것이 쓰로틀링이다.
stage, method 별로 요청 수 제한
API Key를 지준으로 요청 수 제한
Lambda 레벨에서 동시 실행 함수 수 제한