AWS Kinesis, API Gateway, Lambda
AWS Kinesis 장점
- 실시간
- 사용 편의성
- 병렬 처리
- 탄력성 - 확장 가능
- 저렴한 비용 - 0.015 USD/h, 1M/sec
- 안정성 - AWS 리전 3개 시설에 복제
사용 사례
- 로그 및 이벤트 데이터 수집
- 모바일 데이타 캡처
- 실시간 분석
- 게임 데이타 피드
요금
- 샤드 시간 base로 청구
- 샤드 1개 초당 1MB의 데이터 입력 및 2MB의 데이터 출력 용량 제공
- 샤드 1개 초당 1000개의 레코드 지원
- 기본 보관 - 24시간
- 가격 : 샤드 시간(초당 1MB 수신, 초당 2MB 송신) - $0.015/h
AWS API Gateway
어떤 규모에서든 개발자가 API를 손쉽게 생성, 게시, 유지관리, 모니터링 및 보안할 수 있는 해주는 완전 관리형 서비스
- 트래픽 관리
- 권한 부여 및 액서스 제어
- 모니터링
- API 버전 관리
장점
- 낮은 비용과 효율성
- 어떤 규모에서도 뛰어난 성능
- API 작업을 간편하게 모니터링
- API 개발 간소화
- 유연한 보안 제어
- 기존 서비스를 위한 Restful 엔드포인트 생성
- 서버 없이 API 실행
요금
- 수신된 1백만 API 호출당 3.50 USD
- 기가바이트 데이타 전송 비용 추가
- 처음 10TB에 대해 0.09 USD/GB
- 캐시 메모리 크기 별 과금
- 0.5GB - 0.020 USD
Lambda
이벤트에 응답하여 코드를 실행하고 자동으로 기본 컴퓨터 리소스를 관리하는 서버 없는 컴퓨팅 리소스
- 커스텀 로직으로 다른 AWS 서비스 확장
- 커스텀 백엔드 서비스 구축
- 완전히 자동화된 관리
- 내결함성 기본 제공
- 자동 조정
- 통합된 보안 모델
- 자체 코드 사용 가능
요금
- 요청
- 매월 첫 요청 1백만 회까지 무료
- 이후 요청 1백만 회당 0.20 USD
- 기간
- 사용한 매 GB-초당 0.00001667 USD
Example
console.log('Loading function');
exports.handler = function(event, context) {
console.log('event:', JSON.stringify(event));
var name = event.myname || 'Anonymous';
context.succeed('Hello World, '+name);
};
Invocation
- Using Event Sources such as Amazon S3, Echo, DynamoDB, SNS, and etc
- On-demand Lambda Function Invocation: Over HTTPS
- On-demand Lambda Function Invocation: Building your Own Event Sources
Programming Model
-
Node.js, Java, Python
- Handler
- Context object
- Logging
- Exceptions
Node.js
- runtime v4.3
- runtime 0.10.42 (will be deprecated in October 2016)
Handler
exports.myHandler = function(event, context, callback) {
console.log("value1 = " + event.key1);
console.log("value2 = " + event.key2);
callback(null, "some success message");
// or
// callback("some error type");
}
- event - event data
- context - runtime information
- callback - return information to the caller
Logging
- console.log()
- console.error()
- console.warn()
- console.info()
Exceptions
console.log('Loading function');
exports.handler = function(event, context, callback) {
// This example code only throws error.
var error = new Error("something is wrong");
callback(error);
};
Best Practices
- Write your lambda function code in stateless style
- Avoid declaring any function variables outside the scope of handler
- Make sure you have set
+rx
permissions on your files in the uploaded ZIP - Lower costs and improve performance by minimizing the use of start up code
- Use the built-in CloudWatch monitoring of your lambda function to view and optimize request latencies
- Delete old Lambda functions that you are no longer using
Written on May 26, 2016