일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- coursera
- scala 2.10
- springboot
- Elk
- 한빛미디어
- Elasticsearch
- statestore
- gradle
- confluent
- Logstash
- kafka interactive query
- avo
- kafkastreams
- RabbitMQ
- spring-batch
- aws
- Slick
- 카프카
- schema registry
- kafkastream
- spring-cloud-stream
- scala
- enablekafkastreams
- play framework
- spring-kafka
- Spring
- Kafka
- kafka streams
- reactive
- 플레이 프레임워크
- Today
- Total
b
aws lambda 에 대한 몇 가지 본문
* lambda function 이 실행되는 storage 환경에 접근 가능하다.
1 2 3 4 5 6 | var sp = require( 'child_process' ).spawn; var ls = sp( 'df' , [ '-h' ] ); ls.stdout.on( 'data' , function (data) { console.log( 'stdout : ' + data); }); |
Cloudwatch를 보면 아래처럼 로그가 남는다.
1 2 3 | Filesystem Size Used Avail Use% Mounted on /dev/xvda1 30G 2.8G 27G 10% / /dev/loop5 526M 440K 514M 1% /tmp |
* lambda 의 로그가 cloudwatch에 쌓이는 데 ‘즉시’ 쌓이지는 않는다.
* lambda + S3을 이용하려면 반드시 같은 리전에 있어야 하고 , S3 권한이 필요하다.
* 장시간 수행된다면 EC2에 비해 유리한 요금체계가 아니다 (1GB메모리/1달 기준 ec2는 9$, lambda는 37$)
lambda는 메모리가 낮을수록, 실행시간이 짧을수록 ec2에 비해 가격 효율이 좋다. 잘 비교해서 써야 비용 절감
* aws lambda 의 내부 구조에 대해서는 언급 된 적이 없다. https://aws.amazon.com/ko/lambda/
다만 컨테이너에 zip 소스코드가 실행 된다는 정도로 생각 해 볼 수 있는데,
대략 10~ 15분이 지나면 이 코드가 컨테이너에서 제거된다. 이후에 다시 function을 수행해면 어느 정도의 delay가 생긴다.
https://forums.aws.amazon.com/thread.jspa?threadID=181348 처럼 VM을 올려야 하는 java , upload size가 클수록 이 지연시간이 크다고 한다.
이러한 재시작 (cold start)를 효율적으로 대비 하는 방법은?
1. zip file을 가능한 작게 만든다
2. 10분 이하로 강제로 한번씩 실행하여 상태를 유지하도록 한다 (이 경우 한달에 4800번 정도가 추가로 호출된다)
* lambda 는 스케일링 세부 정책을 발표하지 않고 ‘자동으로 스케일링 요구사항에 맞춰 한다’ 라고만 한다. 즉, 개발자에게는 현재 스케일링에 관한 권한이 없다. 어플리케이션이 엄격한 지연시간등이 필요하다면 서비스 전에 많은 스트레스 테스트를 해봐야 할 것이다.
(app이 100ms의 지연시간까지 허용해야할 때 실제로 lambda가 200ms이 걸리더라도, lambda의 스케일링 조건이 아니라면 여전히 200ms가 걸릴 것이다)
* 현재 (2017/02/03) 최대 Timeout은 5분. 즉 5분 이상 넘어가는 function은 사용X
* lambda는 최대 1.5GB 메모리만 지원
* AWS lambda 를 사용하기 위해서 추가해야하는 lib들은 다음과 같다
‘com.amazonaws:aws-lambda-java-core:1.1.0’
‘com.amazonaws:aws-lambda-java-events:1.3.0’
‘com.amazonaws:aws-lambda-java-log4j:1.0.0’출처 : https://github.com/aws/aws-lambda-java-libs (2017년 1월 기준)
* aws-lambda-java-log4j 는 이름 그대로 로깅을 위한 log4j 어댑터이다.
내부적으로는 log4j:1.2.17버전을 사용하고 있고 log4j의 AppenderSkeleton 를 확장한 LambdaAppender 와 log4j.properties를 사용한다.
( http://docs.aws.amazon.com/lambda/latest/dg/java-logging.html)
* aws-lambda-java-events 는 S3, SNS, DynamoDB등을 이용하기 위한 extension library이다.
1.3.0 기준으로 aws 서비스 중 S3, SNS, kinesis, Cognito,dynamodb 등의 솔루션을 지원하고 AWS-SDK 1.11.0 에 의존성이 걸려 있다
* aws-lambda-java-core 는 기본적인 lambda를 쓰기 위한 라이브러리 이다.
2017/1월에 쓴 글을 옮겨옴