발표 순서
- 서버리스로개발 시작하기
- 서버리스로 확장하기
- 서버리스로 기존 시스템과의 통합
- 좀 더 알아보기
- Q&A
3.
흔한 IT 업계의일상…
관리자
안녕하세요?
오늘부터 새로운 앱 개발을 시작해야하는데요, 빠르게 개발해야 되고요,
우리에게 주어진 예산이 적기 때문에 사용자가 적을때는 사용요금이
나오지 않으면 좋겠어요. 하지만 빠르게 성장할수도 있으니까
규모에 따라서 조절이 가능해야 하고요, 관리 및 운영도 쉬워야 되요.
그리고 가장 중요한건…
개발자
물론 가능합니다. 서버리스로 개발하겠습니다.
개발자는 당신 한명뿐이네요!!
어디서부터 시작해야할까요?
첫째. 먼저잘 동작하는 예제부터 찾아봅시다!!
우리에게 필요한건
• 기본적으로 서버리스 웹 앱으로 만들고 추가적으로…
• Amazon API Gateway 를 이용해서 호스팅되는 API 기능
• Amazon DynamoDB에 저장된 데이터에 접근
• Amazon S3 및 Amazon CloudFront에서 제공하는 정적컨텐츠
• Lambda 함수로 만들어진 동적 콘텐츠 혹은 비즈니스 로직
10.
Serverless Application Repository(Preview)
- 미리 만들어진 앱 및 샘플 검색
- 오픈 소스 애플리케이션을
사용자가 커스터마이징 해서
신속하게 시작 가능
- 앱을 제한적으로 또는 공개적으로
공유 가능
- AWS 마켓플레이스를 이용해서
API로 수익 창출
- AWS Serverless Application Model
(AWS SAM)으로 구동!
11.
람다 함수 에디터
-한번에 여러 파일 편집 가능!
- 기존 패키지에 대한 새 파일
만들기
- 편집기를 종료하지 않고도
테스트 실행, 결과 및 로그
- 테스트 입력값을 저장후
재사용 가능
- WYSIWYG 디자이너
12.
서버리스 앱의 새로운이점
- 아이디어로 시작해서 5분 안에 코딩 작업이 가능
- 또한 여러분의 앱이 단순한 프로토타입이 아닐 경우…
- 1,000개의 람다 함수 동시 실행(10K TPS)
- 모든 계정은 자동적으로 3배까지 자동 증설 가능!!!
13.
서버리스 앱의 새로운이점
- 1,000개의 람다 함수 동시 실행,
요청시 3배까지 자동 증가 더 빠르게 퍼포먼스
향상 – cold-start
최적화!!
큰 람다 함수일 경우 최대
80%까지 빨라짐
14.
서버리스 앱의 새로운이점
- 1,000개의 람다 함수 동시 실행,
요청시 3배까지 자동 증가
- 최대 80%까지 빨라진 콜드 스타트
시간
내장된 로깅 및
모니터링 사용 가능 :
“grab-n-go” 로그 기능이
람다 콘솔에 포함
15.
서버리스 앱의 새로운이점
- 1,000개의 람다 함수 동시 실행,
요청시 3배까지 자동 증가
- 최대 80%까지 빨라진 콜드 스타트
시간
- 람다 로그를 바로 검색
최대 메모리
사이즈가…
1.5GB
3GB
16.
서버리스 앱의 새로운이점
- 1,000개의 람다 함수 동시 실행,
요청시 3배까지 자동 증가
- 최대 80%까지 빨라진 콜드 스타트
시간
- 람다 로그를 바로 검색
- 최대 메모리 사이즈 3GB
서버리스로
가즈아!!
Gazuaaaa!!
변경사항이 발생했습니다. 어떻게해야할까요?
둘째. 커스터마이징과 배포
우리에게 필요한건
• 로컬에서 개발/테스트/디버깅 가능한 IDE
• 이전에 개발한 앱을 커스터마이징
• 팀을 위해서 지속적인 통합/지속적인 배포(CI/CD) 파이프라인 구성
• 배포하기 (안전하게!)
19.
AWS Cloud9
- 클라우드에서사용하기 쉬운 IDE
- Github 지원
- Lambda BluePrint 지원
- 내장 SAM Local : 로컬 환경에서
테스트 가능!
- Lambda에 직접 배포하거나
Github에 업데이트를 푸시가능
자세한 내용은 멋쟁이 사자처럼 김탁희님
세션을..
20.
자동화된 지속적인 통합/지속적인배포(CI/CD) 프로세스
- 공유할 준비가 완료되면
Cloud9에서 변경사항을 푸시
- 업데이트시 자동으로 빌드되도록
AWS CodePipeline 설정
Local Testing
21.
고객의 피드백
람다 함수를안전하게 배포하고 싶어요
두 버전의 API 간에 트래픽을 만들려면 어떻게 해야하나요?
자동으로 롤백 할 순 없나요?
다양한 함수와 API 를 조율해서 배포하는 방법은 없나요?
22.
안전하고 점차적으로 증가하는서버리스 배포
- Lambda : 가중치 별칭
- 동일한 기능의 두 버전간 트래픽 비율 설정
- API Gateway : 점차적인 배포를 위한 하위 스테이징
- 두 단계간의 트래픽 공유
- AWS CodeDeploy : 안전한 서버리스 배포를 위한 자동화 지원
- Amazon CloudWatch 메트릭 기반 롤아웃/롤백
30.
또 다른 어느날…
관리자
당신이만든 앱은 잘 작동하고 있는데요,
이번에는 VPC에 있는 관계형 데이터베이스 및 기존 서비스중
하나의 데이터를 포함시켜야 해요.
서버리스 아키텍쳐에서 이걸 처리할 수 있나요?
개발자
문제 없습니다.
레거시 환경과 통합해야합니다
셋째.엔터프라이즈 시스템과의 연결
우리에게 필요한건
• 람다 함수 동시 실행 모니터링
• 레거시 연결성에 대한 동시 실행 제한
• VPC 기반 서비에 대한 API 연결
• 모든 람다 함수 호출을 감사(Audit) 하고 로깅
33.
고객의 피드백
람다 함수에‘개발 모드’를 넣을순 없을까요?
람다가 너무 많이 실행되서 기존 시스템에서 에러가 발생합니다.
람다 함수의 용량을 다른 함수로부터 보호하고 싶습니다.
일시적으로 기능을 비활성화 하고 싶습니다.
통찰력 :
동시성 제어는 서버리스 앱에서
기능을 관리하는 핵심 요소.
34.
엔터프라이즈와의 연결
- Lambda: 동시성 메트릭 제공
- Lambda : 함수별 동시성 쓰로틀
할 수 있는일
1. 레거시 시스템에 대한 동시성 제한
2. 서버리스 프로덕션 서비스를 동일한
계정의 다른 기능에서 보호합니다
3. 일시적으로 기능 비활성화
4. 개발중인 함수에 대해서 제한된 요금 및
과도한 실행에 대해서 보호
35.
엔터프라이즈와의 연결
- VPC(PrivateLink) 통합
API에서 VPC의 서비스 및
데이터에 접근
- Regional EndPoint
빠른 지역별 API 엔드 포인트
서버리스 for everything
-Lambda and API Gateway in every commercial AWS
Region + AWS GovCloud
- 베이징 리전 출시!!
- Lambda@Edge 새로운 기능:
- 콘텐츠 기반 동적 오리진 선택
- 뷰어 이벤트에서 네트워크 호출
- 고급 응답 생성 기능
41.
서버리스 for everything
-Lambda and API Gateway in every commercial AWS
Region + AWS GovCloud
- 베이징 리전 출시!!
- Lambda@Edge 새로운 기능:
- 콘텐츠 기반 동적 오리진 선택
- 뷰어 이벤트에서 네트워크 호출
- 고급 응답 생성 기능
42.
서버리스 for everything
-국제 인증 : ISO, PC, HIPAA
- 현재 SOC 1, SOC 2 그리고 SOC 3 인증
- 디바이스를 위한 람다
- AWS Greengrass, AWS Snowball Edge
- 윈도우를 위한 람다 – CoreCLR 2.0
람다 함수 요청의생명주기
런타임
시동
코드
실행
Cold
start
Warm
start
작성한 코드
다운로드
컨테이너
새로 시작
AWS가 최적화 개발자가 최적화
50.
람다 함수 요청의생명주기
런타임
시동
코드
실행
Cold
start
Warm
start
작성한 코드
다운로드
컨테이너
새로 시작
AWS가 최적화 개발자가 최적화
51.
효율적인 코드 만들기
-덩치가 큰/모놀리식 함수 만들지 말것
- 람다 함수에 배포하는 패키지의 종속성을
제어하십시오
- 사용하는 언어에 맞게 최적화
- Node - Browserfy, Minify
52.
JAVA – POM파일에서 범위를 지정할것
<dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-bom</artifactId>
<version>2.10.10</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-s3</artifactId>
<version>1.10.5</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-dynamodb</artifactId>
<version>1.10.10</version>
</dependency>
<dependencies>
Maven Bill Of Materials
(BOM) module for AWS
SDK
Select service
dependencies only
aws-java-sdk 를 직접 사용하지 말것!!
53.
작은 변경, 큰변화 (S3 Select)
200 seconds and 11.2 cents
# Download and process all keys
for key in src_keys:
response =
s3_client.get_object(Bucket=src_bucket,
Key=key)
contents = response['Body'].read()
for line in contents.split('n')[:-1]:
line_count +=1
try:
data = line.split(',')
srcIp = data[0][:8]
….
95 seconds and costs 2.8 cents
# Select IP Address and Keys
for key in src_keys:
response =
s3_client.select_object_content
(Bucket=src_bucket, Key=key,
expression =
SELECT SUBSTR(obj._1, 1, 8),
obj._2 FROM s3object as obj)
contents = response['Body'].read()
for line in contents:
line_count +=1
try:
….
A f t e rB e f o r e
(https://github.com/awslabs/lambda-refarch-mapreduce)
54.
자원 배분을 효율적으로
128MB 11.722965sec $0.024628
256 MB 6.678945sec $0.028035
512 MB 3.194954sec $0.026830
1024 MB 1.465984sec $0.024638
Match resource allocation (up to 3 GB!) to logic
Stats for Lambda function that calculates 1000 times all prime numbers <=
1000000
55.
메모리 변경의 영향
50%메모리
증가시
95 퍼센트의
함수가 3초에서
2.1초로 성능 변화
https://blog.newrelic.com/2017/06/20/lambda-functions-xray-traces-custom-serverless-metrics/
56.
멀티쓰레딩
- 1.8G 아래는싱글 코어로 동작
- CPU bound 작업에서는 이익을 보지 못합니다 – 프로세스는
동일한 리소스를 공유합니다
- 1.8G 보다 크면 멀티 코어로 동작
- CPU bound 작업에서 이득을 얻지만, 멀티 쓰레드가
필요합니다
- I/O Bound 워크로드에서 이득을 얻을거로 예상됨
- 예 : 리턴값의 병렬 계산
57.
Go 언어 –피보나치 수열 테스트
출처 : https://hackernoon.com/aws-lambda-go-vs-node-js-performance-benchmark-
1c8898341982
Node.js, GO 언어의 성능 차이는 없지만, Node 재귀호출의 경우 훨씬 느림
58.
Go 언어 –S3 & Dynamo interaction
출처 : https://hackernoon.com/aws-lambda-go-vs-node-js-performance-benchmark-
1c8898341982
Go 언어로 작성할 경우 약 40% 이상 성능 향상
59.
결론
- 신규 업데이트로서버리스의 기능을 정말 강력하게
만들어줬음
- Serverless Application Repository Preview 신청하세요!!
- Cloud9 세션을 들어보세요!!
- 서버리스에 새로 나온 기능을 이용해서 개발해봅시다!
- 최적화에 대해서 좀 더 생각해봅시다! (X-RAY 이용
- Go 언어도 한번!?
60.
참고자료
- (SRV305) What’sNew in AWS Serverless
- https://www.youtube.com/watch?v=WrPOz2dx8XY
- (SRV401) Become a Serverless BlackBelt
- https://www.youtube.com/watch?v=oQFORsso2go