최근 입문용 혹은 개발 및 데이터 분석 용도로 파이썬을 사용하는 개발자들이 많이 늘고 있습니다. 본 세션에서는 파이썬을 활용하여 AWS에서 해 볼 수 있는 다양한 서비스와 기능을 소개하고자 합니다. 그 중에서도 Django 및 Flask 같은 웹 프레임워크를 AWS Elastic Beanstalk으로 손쉽게 배포하고 운영하는 방법, AWS Lambda를 통해 Python 기반 서버리스 애플리케이션을 제작하는 방법 그리고, Boto3와 AWS Python SDK를 통해 AWS의 다양한 서비스 API를 다루는 방법을 살펴 봅니다. Python으로 구성된 AWS 기반 인기 오픈 소스 프로젝트를 소개하여 직접 참여하는 방법을 안내합니다. 특히, 가상 서버 호스팅인 AWS re:Invent에서 새로 소개된 Amazon Lightsail 등도 함께 소개합니다.
3. 본 발표의 주요 주제
• Boto3 소개 및 Amazon Lightsail 활용
• AWS Elastic Beanstalk에서 Django 웹앱 배포
• AWS Lambda 기반 서버리스 앱 개발
• AWS Lambda 및 Flask ASK를 통한 음성 인식 앱 개발
• Amazon Greenglass 소개
4. 1. Boto 3 소개
§ 2006년에 처음 Mitch Garnaat가
Amazon S3용 파이선 클라이언트
로 시작
§ 2015년 6월 정식 공개한 후, 모든
AWS 서비스 지원
§ 데이터 모델 기반으로 작성되어,
JSON 기반 AWS API 모델 활용
§ 모델 업데이트만으로 신규 및
변경 API를 바로 바로 지원 가능
§ Python 2.6.5+, 2.7, 3.3, 3.4 버전
지원
Boto 3
Botocore
Session Resources ClientsConfig
Session
Credentials
Clients
Authentication
Serialization
HTTPS
5. Boto3 주요 기능
• Resources:
§ 고수준
객체 지향
인터페이스
• Collections:
§ 리소스
결과 처리
• Paginators:
§ 결과
페이지
처리
import boto3
# S3 버킷 목록 출력
S3 = boto3.resource('s3')
bucket = s3.Bucket('my-bucket')
for obj in bucket.objects.all():
print(obj.key, obj.last_modified)
# 버킷 내 객체 페이지 처리
paginator = s3.get_paginator('list_objects')
for page in paginator.paginate(Bucket='my-bucket'):
for obj in page['Contents']:
print(obj['Key'])
6. Boto3 주요 기능 (2)
• Clients:
§ 저 수준
서비스
연결
• Waiters
§ 특정
상태에
완료될때
까지 대기
import boto3
# SQS 클라이언트 연결
sqs = boto3.client('sqs')
response = sqs.list_queues(QueueNamePrefix='test')
print(response['QueueUrls'][0])
ec2 = boto3.client('ec2')
# 인스턴스 대기
waiter = ec2.get_waiter('instance_running')
waiter.wait(InstanceIds=['i-abc123'])
print('Instance is ready!')
8. Amazon Lightsail – 가상 사설 서버 호스팅
• 간편하고 이해하기 쉬운 AWS 서버 호스팅
• 확장성 및 고가용성을 그대로 활용하면서 손쉽게 서버 운영
Launch
VM
Attach SSD
Storage
Assign
Static IP
Configure
DNS
Create
Security Groups
Create Instance
GO!
Created By Amazon Lightsail
Manage
IAM
$5
Per month
9. Amazon Lightsail – 가상 사설 서버 호스팅
• 기존 AWS 서비스 연결 가능 및 API 및 CLI을 통한 제어 가능
• 사용한 만큼 종량 과금제 그대로 적용 (데이터 사용료 추가 가능)
• 1개월 프리티어 제공
12. Boto3을 이용한 Lightsail 인스턴스 연결
import boto3
# Lightsail 클라이언트 연결
client = boto3.client('lightsail')
response = client.create_instances(
instanceNames=[ 'my-instance',],
availabilityZone='us-east-1a',
blueprintId='app_lamp_70',
userData='apt-get –y update')
print(response['QueueUrls'][0])
waiter = client.get_waiter('instance_running')
waiter.wait(InstanceIds=['i-abc123'])
print('Instance is ready!')
13. 2. AWS Elastic Beanstalk을 통한 웹 앱 만들기
• AWS ElasticBeanstalk이란?
§ AWS 자원을 활용하여 손쉽게 웹 서비스를 구성 및 배포할
수 있는 무료 관리형 서비스
§ Amazon EC2 (VPC, Elastic Load Balancing, Auto Scaling,
Monitoring), Amazon RDS 및 앱 배포를 결합한 관리
서비스
• AWS EB 활용 방법
§ 단계1. 앱 플랫폼 선택
ü Ruby, Python, PHP, Java, NodeJS 기반 오픈소스
애플리케이션 프레임웍 지원
ü DB, 로드밸런싱 및 오토스케일링
§ 단계2. 애플리케이션 배포 및 운영
14. Djaongo 기반 웹 앱 개발하기
• Django란?
§ 파이썬으로 만들어진 가장 인기있는
무료 오픈소스 웹 애플리케이션
프레임워크
§ MVC(Model-View-Controller) 기반
ü https://www.djangoproject.com/
• DjangoGirls란?
§ Django를 통한 간단 블로그 제작
튜토리얼 제작 및 오프라인 교육 활동
§ DjangoGirls 서울
ü https://djangogirls.org/seoul/
18. Weeks
가상 컴퓨팅 기술의 변화
Minutes
Amazon EC2
Seconds
Amazon EC2
Containers Services
Milliseconds
AWS LambdaOn-Premises
19. Packaging Updates Execution Run time Unit of Cost
VMs AMI Patching
Multi-threaded,
multi-task
Hours to months Per VM per hour
Containers Container File Versioning
Multi-threaded,
single-task
Minutes to days Per VM per hour
Serverless Code Versioning
Single-threaded,
single-task
Microseconds to
seconds
Per memory/second
Per request
가상 컴퓨팅 기술의 변화
20. 3. AWS Lambda 기반 서버리스 앱 만들기
높은 확장성 및
빠른 서비스 연동
서버 필요 없이
코드만 배포
함수 실행 시
100ms 단위 과금
서버 없는, 이벤트 처리 방식의 컴퓨팅 서비스
AWS Lambda = 클라우드 함수 기반 마이크로서비스
21. AWS Lambda- 동작 원리
Bring your own code
• Node.js, Java, Python, C#
• Java = Scala Clojure 등의
어떠한 JVM기반 언어.
• Bring your own libraries
유연한 호출 경로
• Event 기반 호출 옵션 (여러
AWS 서비스들과 통합)
• REST API 호출 가능 (Amazon
API Gateway와 연동)
단순한 자원 모델
• 128MB부터 1.5GB까지 64MB
단위로 메모리 설정
• 할당된 메모리에 비례하여
CPU 및 네트웍 자원 할당
• 실제 사용량 내역 보고
효과적인 권한 통제
• VPC(Virtual Private Cloud)
연동 및 IAM (Identity and
Access Management) Role을
사용한 실행 권한 설정
• AWS 이벤트 소스에 대한
다양한 리소스 정책
22. AWS Lambda@Edge
• 기능 소개
§ CloudFront Edge 로케이션에서 람다
함수 실행 가능
§ Lambda@Edge는 HTTP 헤더를 분석하여
호출에 대한 간단한 응답 (라우팅 혹은
리다이렉션)을 처리할 수 있는 기능
§ 현재 Node.JS만 제공
• 주요 사용 사례
§ HTTP 헤더 검사, 접근 제어
§ 모바일 디바이스 탐지
§ A/B 테스트
§ 크롤러 또는 봇 신속 처리
§ 장애 시 사용자 친화적인 URL 리다이렉트
25. 서버리스 프레임웍의 등장
Serverless Apex ClaudiaJS Chalice
목표 Feature-rich solution
for multi-vendors
Simple and robust
solution
Serverless deployment
utility
Serverless micro-
framework for AWS
지원 런타임 NodeJS
Python
Java
Golang
NodeJS
Python
Java
NodeJS Python
CLI 지원 O O O O
자원 관리 O △
(Terraform)
X X
멀티 벤더 △
(AWS only)
X X X
플러그인 지원 O △
(User-defined handler)
△
(3rd party builders)
X
유닛 테스트 X X △
(Partial unit-test)
X
(Channy Yun’s Personal opinions in 2016 September)
26. Chalice
• Python Serverless
Microframework for AWS
• 앱 제작, 배포 및 관리는
간단한 커맨드라인으로
제작 가능
• Python 코드를 통해
선언적 API를 통해
손쉽게 개발 가능
• 현재 미리보기 제공 중
https://github.com/awslabs/chalice
29. Python 기반 Lambda 지원 프레임웍
• Zappa
• Facilitates the deployment of all Python WSGI applications on
AWS Lambda + API Gateway.
• Kappa
• A Python command line tool that (hopefully) makes it easier to
deploy, update, and test functions for AWS Lambda.
• Lambda-complex:
• A Node.js framework for applications that runs entirely within
Lambda, SQS, and other high abstraction layers AWS services.
• λambdify:
• A tool that turns any python callable into an AWS Lambda
function. Serverless Functional Reactive Programming
• Python-lambda:
• A toolset for developing and deploying serverless Python code
in AWS Lambda.
33. 4. AWS Lambda 기반 Alexa Skills 개발하기
Amazon
Alexa
Service
Developer’s
Application
Service
Amazon’s
Developer
Portal
애플리케이션, 사용자 의도,
샘플 데이터, 개발자 서비스
등 정보 전달
사용자 의도를
서비스로 전달
GUI 카드를
알렉사 앱에
전달
오디오를
서비스로 전송
오디오 결과를
렌더링해서
재생
텍스트 결과 및
GUI 카드 정보
전달
37. 5. Amazon Greengrass
스마트 홈 농업 현장 공장 지역
Embed Lambda Compute (& Other AWS Services) in Connected Devices
AWS 서버리스 프로그래밍 모델을 그대로 활용하여 원격지 컴퓨팅에서 활용
임베디드 기기 및 원격 대용량 데이터 처리에 용이
IoT 기기
제조
Greengrass
런타임 설치
= +
38. 로컬 컴퓨팅 로컬 데이터 캐싱기기간 보안 통신 로컬 메시징
AWS Greengrass: 로컬 컴퓨팅, 메시징, 데이터 캐싱
IoT 기기
제조
Greengrass
런타임 설치
로컬 Lambda
함수 지원
AWS 콘솔에서
관리 가능
클라우드 프로그래밍
모델 활용
로컬 통신 및
데이터 통합
=
=
Lambda Everywhere!