EC2에서는 컴퓨터 한대를 인스턴스라고 함
S3라는 파일서버에서는 버킷이라고 함
람다에서는 함수라고 함
Lambda
- 사실상 모든 유형의 애플리케이션이나 백엔드 서비스에 대한 코드를 별도의 관리 없이 실행할 수 있도록 도와주는 Serverless 서비스
- 람다 함수를 실행할 수 있는 이벤트 ( = 트리거가 되는 )
--> 데이터변화: DB 데이터가 바뀌면 람다 함수 실행
--> API Endpoint와 결합을 시켜서 직접 또는 Endpoint로 호출
--> 리소스 상태 변화: (CloudWatch를 통해) 리소스 상태가 어떻게 변화가 되었다면 람다 함수를 실행해서 이벤트에 대응 할 수O
--> Cron 주기별로 실행: 정기적인 작업이 있을 경우 람다 활용O
- API로 접근 가능한 모든 서비스/기능 호출 가능하기 때문에 외부 서비스 호출 가능
Lambda의 Execution Model
- 동기식
- 람다 함수 앞단에다가 API Gateway Endpoint를 결합시켜놓으면
myapi.com/call 이런식으로 URL을 호출시에 람다함수를 실행 할 수 O
- 비동기식
- SNS, CloudWatch, S3를 트리거로 사용을 하면 람다함수를 실행 할 수 O
- 스트림 베이스
- Kinesis(실시간으로 데이터 스트림을 수집, 처리, 분석해주는 서비스)나 dynamodb와도 함께 사용 가능
Use Case
1. Operation Automation(시스템 운영 자동화)
- CloudWatch Alarm을 모든 리소스에 걸어둔다.
- Memory Full 이나 CPU가 높아져서 대응이 필요할 때, 즉 리소스 상태불량 일 때 CloudWatch Alarm이 실행되면 람다 함수 실행 됨
- 람다 함수가 Email이나 Slack Notification으로 관련자들에게 알려줌
- 람다 함수가 Ansible과 결합해서 Memory Full났을 때 로컬 인스턴스에서 메모리를 리셋해준다던지...
- 로컬에서 Ansible이 안되는 경우 리소스를 교체
==> 장애 발생 시 automatic하게 복구되게 사용
2.Web application
- 클라이언트가 접속을 했을 때 정적 컨텐츠(이미지 등)는 S3에 저장
- S3 앞단에 CloudFront 달아서 전세계 어디서든 빠르게 서빙할수있음
- 인증으로는 Cognito를 별도로 사용할 수O
- Danamic Contents, 프로그램 작업이 필요한 경우에는 Lambda와 API Gateway로 서비스를 하고 백단에서는 DB로 DynamoDB를 운영할 수O
3. Serverless batch processing
- S3에 어떤 Object 같은게 들어왔을 경우 Lambda Splitter가 Mapper에다가 작업을 분배를 하고 Mapper들은 작업이 끝난 후 DynamoDB에 저장
- Lambda Reducer가 S3로 다시 아웃풋
Lambda의 장점
Lambda SLA 와 가격정책
실습
1. Lambda의 생성
- 함수생성 버튼 눌러, 새로작성으로 함수이름 적음
- 런타임은 어떤 언어로 람다 함수를 만들거냐에 따라 달라짐
- 언어를 선택하고 생성을 하면 작성할 코드를 저장할 공간이 만들어짐
2. 코드 작성
- 함수코드로 가보면 샘플코드가 들어가있음
- lambda_handler라는 약속된 이름의 디폴트 함수가 있는데, 람다를 실행했을 때 lambda_handler가 실행 됨
- 이 함수는 event와 context라는 두개의 파라미터를 받는다.
3. 실행
- 코드를 저장 후 Deploy 버튼 클릭하면 실행가능한 상태가 됨
- 실행 방법은 다양함
(1) 클라우드 콘솔
- 테스트 버튼을 클릭하면 실행 됨
- 그전에 테스트 이벤트를 선택해서, 이 함수가 실행될 때 어떠한 값들을 입력할 것인가를 세팅
- 그러면 아래의 화면이 나옴, 샘플 json이 들어있음
- 이벤트 이름과 입력값을 작성하고 저장 버튼을 누르면 이벤트가 생성이 됨
- 이벤트를 체크하고 테스트 버튼을 누르면 작성했던 람다 함수가 실행이 됨
- 리턴값, 실행시간, 로그 등이 찍혀나옴
(2) 커맨드 라인
(3) 트리거를 통해 다른 서비스에서 변화가 생겼을 때 람다 실행
4. 디버깅
- print문으로 찍은 것은 클라우드 콘솔에서 실행할 때마 로그를 볼수 있음
- 다른 서비스와 연동해서, 자동으로 실행되게 하면 이 로그를 볼 수 X
- 그럼 어떻게 확인을 하지?
--> 모니터링을 눌러서 'CloudWatch에서 로그보기'를 클릭
--> 로그 그룹이라는 서비스로 들어가짐
--> 로그 스트림이라는 것이 있는데 가장 위에 있는 것이 최신 로그 데이터를 담고 있음
- 람다 코드를 수정을 하고 저장을 하면 새로운 로그스트림이 생긴다.
- 코드 수정을 안하고 람다를 실행시키면 로그스트림 안에 로그가 쌓인다.
5. Trigger
- 람다가 파워풀 한 이유는 다른 AWS 서비스들과 연동 된다는 것
- Trigger: 방아쇠 --> 람다 함수를 실행시키는 방아쇠
- 트리거 추가 버튼을 누르면 AWS의 다른 서비스들을 선택 할 수 있다.
- API 게이트웨이는 어떤 URL로 접속했을 때 람다가 실행되도록 하는 것
- DynamoDB는 DynamoDB에 어떤 일이 발생 했을 때 람다 함수를 호출하는 것
- S3는 파일이 업로드 되었을 때 람다함수를 실행시킬 수 O
6. S3 + Lambda
- S3: 파일 서버 서비스
- S3 버킷 안에 파일을 업로드 했을 때 람다함수가 실행되게 해보자.
그리고 실행 되면서 업로드한 파일의 이름을 알아보자
- 트리거에 S3를 선택하고 생성한 버킷을 지정한다.
- 이벤트 유형은 파일이 업로드되거나 카피되거나 하는 경우에 람다함수가 호출되도록 '모든 객체 생성 이벤트'를 선택
- 재귀 호출을 체크 하고, 추가 버튼 클릭
- S3의 속성에 들어가보면 '이벤트 알림'에 람다함수가 추가되어있다.
- S3에 파일을 업로드 시킨 후, 람다함수가 실행되는지 확인해보고 이벤트에 어떤 데이터가 들어오는지 찍어보자
7. 성능과 가격정책
- 람다 기본설정 편집에 들어가보면 128MB ~ 3008MB 메모리의 컴퓨터 까지 빌릴 수 있다.
- 메모리에 비례해서 CPU가 할당 됨
- 메모리에 따른 가격정책을 보자
--> 람다는 함수 요청 수 와 기간에 따라 요금이 책정된다.
참고