SlideShare a Scribd company logo
serverless frameworkでAWS
Lambda
PyCon Kyushu 2018 Fukuoka
2018/06/30@LINE Fukuoka
自己紹介
• Masato Nakamura
• twitter: masahito
• work at Nulab inc. Typetalk team
• Python Lover
Goal
• AWS LambdaをPythonで気軽にかけるように!
• 書いた後で改善しやすく!
説明しないこと
• AWS の各サービスの説明
• nodeの環境の作り方
Pythonお仕事で使ってる人? !
Pythonなんに使ってます?
• 自動化処理?
• デプロイ?
• Web開発?
• データ解析?
ここでは自動化処理についてフォーカ
スします
定期処理
• スポットで処理を行いたい
• Twitterでエゴサーチ
• 1日ごとのバッチの起動
• データ集計
定期処理
• Cron
• 外部サービス
• いわゆるServerless環境
• AWS Lambda
• Google Cloud Functions
• Microsoft Azule Functions
ここではAWS Lambdaを使うパター
ンを紹介します
Target
• Python初心者
• AWSLambdaは使ったことがある/使っている
Goal
• ! AWS LambdaをPythonで気軽にかけるように!
• 書いた後で改善しやすく!
AWSのコンソールから登録可能
• コード書く
• テスト実行
一回だけ使う場合は正直これで十分
• 例: 障害検知 -> チャットへの投稿
• 例: 障害検知 -> チャットへの投稿
• ! 3rd Partyライブラリ使いたくなってくる
• requests
• add requirements.txt
requests
• run
$ pip install -r requirements.txt -t vendor/
$ edit python-file
$ zip /path/to/service-dir
$ aws lambda ~~
 AWS コンソールでちょとやりづら
いこと
! 3rd party ライブラリ使ったりとか
! 特にC-APIが絡むとき
! コードのバージョン管理(gitとか)
AWSへのデプロイ
• zipファイルでのデプロイが可能
! コードのバージョン管理
• zipファイルでのデプロイが可能
$ aws lambda create-function 
--function-name AccessMemCache 
--region us-east-1 
--zip-file fileb://path-to/app.zip 
--role execution-role-arn 
--handler app.handler 
--runtime python3.6 
--timeout 30 
--vpc-config SubnetIds=comma-separated-vpc-subnet-ids,SecurityGroupIds=default-security-group-id 
--memory-size 1024
https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/vpc-ec-
upload-deployment-pkg.html
うーんもうちょい楽にしたい
! 変更するたびに自力でzip -> deploy
! ローカルでのテスト実行
• 今のところ必要な処理
$ edit python-file
$ (pip install ~~)
$ zip /path/to/service-dir
$ aws lambda ~~
Serverless frameworkの紹介
Serverlessframework?
• http://www.serverless.com
Serverless Framework – Build web, mobile and IoT applications
with serverless architectures using AWS Lambda, Azure Functions,
Google CloudFunctions & more!
• AWS Lambda, Azure Functions, Google CloudFunctions を
使ってサーバレスアーキテクチャでweb, Mobile IoT アプリケ
ーションを作ろう
serveless frameworkの説明
• pros !
! git/svn/hgでのファイル管理が可能
! zip -> deployがコマンド一発
! CloudWatch/ AWS IAMの制御とかもできる
serverless frameworkの利用
環境の作り方.
$ npm install serverless -g
$ sls -v
1.27.3
serverless frameworkでサービス作成
$ sls create -t aws-python3 -p py3-hello
Serverless: Generating boilerplate...
Serverless: Generating boilerplate in "/Users/masahito-nulab/src/jobs/typetalk-serverless-internal/py3-hello"
_______ __
| _ .-----.----.--.--.-----.----| .-----.-----.-----.
| |___| -__| _| | | -__| _| | -__|__ --|__ --|
|____ |_____|__| ___/|_____|__| |__|_____|_____|_____|
| | | The Serverless Application Framework
| | serverless.com, v1.27.3
-------'
Serverless: Successfully generated boilerplate for template: "aws-python3"
$ tree py3-hello/
py3-hello/
├── handler.py
└── serverless.yml
• handler.py
import json
def hello(event, context):
body = {
"message": "Go Serverless v1.0! Your function executed successfully!",
"input": event
}
response = {
"statusCode": 200,
"body": json.dumps(body)
}
return response
• serverless.yml
service: py3-hello
provider:
name: aws
runtime: python3.6
functions:
hello:
handler: handler.hello
ローカルでのテスト実行
$ cd py3-hello
$ sls invoke local -f hello
{
"statusCode": 200,
"body": "{"message": "Go Serverless v1.0! Your function executed successfully!", "input": {}}"
}
AWS Lambdaへのデプロイ
! IAM/Roleの設定が終わればdeployコマンドがシンプルに
$ sls deploy
ライブラリインストールの手間も減らしたい
! 3rd-party ライブラリのインストールが必要
# ! ここを忘れがち
$ pip install -r requirement.txt -t vendor/
$ sls deploy
ライブラリインストールの手間も減らしたい
serverless-frameworkのpluginを使う
• UnitedIncome/serverless-python-requirements
• serverless >= v1.12
プラグインの導入
$ sls plugin install -n serverless-python-requirements
service: py3-hello
provider:
name: aws
runtime: python3.6
cfLogs: true
plugins:
- serverless-python-requirements
functions:
hello:
handler: handler.hello
デプロイ
($ sls requirements install)
$ sls deploy
やったコマンド一発!
非Pure Pythonなモジュール
• 開発環境はWindows/OSXなことが多い
• Python CAPIで書かれたライブラリは結構ある
• numpy
• 画像ライブラリ: pillow etc
• ローカルで固めるとLambdaで動かない !
• Amazon LambdaはLinux環境のため
dockerize pip
docker環境でcross-compile可能
* 裏でdocker image lambci/docker-lambdaを使っている
service: py3-hello
provider:
name: aws
runtime: python3.6
cfLogs: true
plugins:
- serverless-python-requirements
custom:
pythonRequirements:
dockerizePip: true
functions:
hello:
handler: handler.hello
この先は管理してくときの話をします
Goal
• AWS LambdaをPythonで気軽にかけるように!
• ! 書いた後で改善しやすく!
デバッグがしんどい問題
ロギング
まずはロギング
print と logging.* 関数はどちらも CloudWatch Logs にログ
を書き込み
import logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)
def my_logging_handler(event, context):
logger.info('got event{}'.format(event))
logger.error('something went wrong')
return 'Hello from Lambda!'
何の処理なのか忘れる問題
AWS Lambdaの処理は増えがち
• AWS Lambda TAG
• わかりやすい関数名をつける
• AWS Lambda のdescription(説明)をきちんと書く
AWS Lambdaの処理を削除するときにも使える
• 後で数が増えたときにどの処理を残していくべきかわかりや
すい
コードで何やってたか忘れる問題
コメントを書こう
• 何を実装しようとしてたか忘れるよね
• Whyとかを書いとくと後々思い出しやすくなりますよね
def _service_json_to_dict(service_dict) -> Dict[TypetalkPlan, int]:
# service_json format is too strange, I'd like to change simple Dict
# e.g. [{"key": [“ham”], "value": 7}, {"key": [“spam”], "value": 1}]
result: Dict[TypetalkPlan, int] = dict()
for m in mixpanel_dict:
key = m['key'][0]
value = m['value']
result[key] = value
return result
unittestを書こう
• 集計スクリプトを回す時とか、ちゃんとチェックしておきた
いよね
• python にはdoctestっていう良いものがありますし!
def hello(name: str) -> str:
"""
>>> from hello import hello
>>> hello('test')
'hello, test'
"""
return f'hello {name}'
run unites
• nose, pytestとかのrunnerを使うと便利
変数見ても何やってるかわからない問題
• 引数だけ読んでもすぐに処理を思い出せないとかありますよ
ね
def ham(ipadresses):
return ','.join(buffer)
TypeHintsを使うとわかりやすく(Python3 later)
from typing import List
def ham(ipadresses: List[str]) -> str:
return ','.join(buffer)
TypeHintsを使うとわかりやすく(Python2)
** あんまりPython2で書くことはないかもしれませんが**
from typing import List
def ham(ipadresses): # type: List[str] -> str
return ','.join(buffer)
静的解析もかけたい時はmypyを使うと便利
まとめ
• serverlessを使うことで気軽にかけるように!
• 処理を書くことに集中できる
• 重要なのは書くときより、書いた後
• UnitTest/Comment/Type Hints
• 後で思い切って捨てるがより簡単に!
Thanks
Q&A

More Related Content

What's hot (20)

PDF
FluentdとRedshiftの素敵な関係
moai kids
 
PDF
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Yoshihiro Ohsuka
 
PDF
わかってるフレームワーク Laravel
Masashi Shinbara
 
PDF
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
都元ダイスケ Miyamoto
 
PDF
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
 
PDF
Heroku で作る
スケーラブルな 
PHP アプリケーション
Masashi Shinbara
 
PPTX
同じサービスを ECSとOpsWorksで 運用してみた
Jun Ichikawa
 
PDF
Vagrant体験入門
Masashi Shinbara
 
PDF
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
matsu_chara
 
PDF
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
YASUKAZU NAGATOMI
 
PDF
JAWSUG版 PostgreSQL on Amazon EC2の可能性
Serverworks Co.,Ltd.
 
PDF
Kafka logをオブジェクトストレージに連携する方法まとめ
Keigo Suda
 
PDF
開発現場で活用するVagrant
Masashi Shinbara
 
KEY
Shelly
fukamachi
 
PDF
Active job meets kubernetes
Yasutomo Uemori
 
PDF
Ruby/Rails Benchmarking and Profiling with TDD
Yasutomo Uemori
 
PDF
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Takeshi Mikami
 
PDF
Vagrant で作る PHP 開発環境 [実践編]
Masashi Shinbara
 
PPT
Scala on Hadoop
Shinji Tanaka
 
PDF
CFの便利機能を他の環境でも。Open Service Broker
Kazuto Kusama
 
FluentdとRedshiftの素敵な関係
moai kids
 
PHPという概念が存在しない退屈な世界 - AWS LambdaでWebAPP編
Yoshihiro Ohsuka
 
わかってるフレームワーク Laravel
Masashi Shinbara
 
20150908 ”時間の流れ” という無限リストを扱うAWS Lambda
都元ダイスケ Miyamoto
 
PHPコードではなく PHPコードの「書き方」を知る
Masashi Shinbara
 
Heroku で作る
スケーラブルな 
PHP アプリケーション
Masashi Shinbara
 
同じサービスを ECSとOpsWorksで 運用してみた
Jun Ichikawa
 
Vagrant体験入門
Masashi Shinbara
 
Kafkaを使った マイクロサービス基盤 part2 +運用して起きたトラブル集
matsu_chara
 
Webアプリ開発向け ゆるふわDocker使いが Cloud Naive開発に必要なetc.
YASUKAZU NAGATOMI
 
JAWSUG版 PostgreSQL on Amazon EC2の可能性
Serverworks Co.,Ltd.
 
Kafka logをオブジェクトストレージに連携する方法まとめ
Keigo Suda
 
開発現場で活用するVagrant
Masashi Shinbara
 
Shelly
fukamachi
 
Active job meets kubernetes
Yasutomo Uemori
 
Ruby/Rails Benchmarking and Profiling with TDD
Yasutomo Uemori
 
Apache Airflow入門 (マーケティングデータ分析基盤技術勉強会)
Takeshi Mikami
 
Vagrant で作る PHP 開発環境 [実践編]
Masashi Shinbara
 
Scala on Hadoop
Shinji Tanaka
 
CFの便利機能を他の環境でも。Open Service Broker
Kazuto Kusama
 

Similar to serverless framework + AWS Lambda with Python (20)

PPTX
Serverless frameworkを使ってみた話 at #nseg #90
ko ty
 
PDF
Serverless frameworkでお手軽lambda運用 at #nseg #93
ko ty
 
PPTX
serverless
Kohei Misu
 
PPTX
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
 
PPTX
サーバーレスアプリケーションの作り方
Yoichi Toyota
 
PDF
AWS Black Belt Online Seminar 2016 AWS上でのサーバーレスアーキテクチャ入門
Amazon Web Services Japan
 
PPTX
aws lambdaでpythonを実行するときのチューニング案を試してみた!
Shun Fukazawa
 
PDF
画像処理をAWS LambdaのPythonで!
Tomotsune Murata
 
PDF
担当Pjのciにserverless frameworkを導入した話
masaya tawata
 
PDF
serverless
Akira Otsuka
 
PDF
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Takashi Makino
 
PPTX
はじめてのAws lambda
dcubeio
 
PPTX
はじめてのAWS Lambda
Masaki Misawa
 
PDF
AWS Black Belt Techシリーズ AWS Lambda
Amazon Web Services Japan
 
PDF
20190619 AWS Black Belt Online Seminar Dive Deep into AWS Chalice
Amazon Web Services Japan
 
PDF
Serverlessでサイト監視
shigeyuki azuchi
 
PDF
コンテナで始める柔軟な AWS Lambda 生活
Drecom Co., Ltd.
 
PDF
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
JOYZO
 
PDF
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
Ryu Yamashita
 
PPTX
初めてのLambda(ラムダ)
Fumitaka Nishiyama
 
Serverless frameworkを使ってみた話 at #nseg #90
ko ty
 
Serverless frameworkでお手軽lambda運用 at #nseg #93
ko ty
 
serverless
Kohei Misu
 
サーバーレスで ガチ本番運用までやってるお話し
Akira Nagata
 
サーバーレスアプリケーションの作り方
Yoichi Toyota
 
AWS Black Belt Online Seminar 2016 AWS上でのサーバーレスアーキテクチャ入門
Amazon Web Services Japan
 
aws lambdaでpythonを実行するときのチューニング案を試してみた!
Shun Fukazawa
 
画像処理をAWS LambdaのPythonで!
Tomotsune Murata
 
担当Pjのciにserverless frameworkを導入した話
masaya tawata
 
serverless
Akira Otsuka
 
AWS LambdaとAPI Gatewayでサーバレスなシステム構築に踏み出してみる
Takashi Makino
 
はじめてのAws lambda
dcubeio
 
はじめてのAWS Lambda
Masaki Misawa
 
AWS Black Belt Techシリーズ AWS Lambda
Amazon Web Services Japan
 
20190619 AWS Black Belt Online Seminar Dive Deep into AWS Chalice
Amazon Web Services Japan
 
Serverlessでサイト監視
shigeyuki azuchi
 
コンテナで始める柔軟な AWS Lambda 生活
Drecom Co., Ltd.
 
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
JOYZO
 
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
Ryu Yamashita
 
初めてのLambda(ラムダ)
Fumitaka Nishiyama
 
Ad

More from masahitojp (16)

PDF
Python と型ヒントとその使い方
masahitojp
 
PDF
Enjoy Type Hints and its benefits
masahitojp
 
PDF
Build a RESTful API with the Serverless Framework
masahitojp
 
PDF
Presentation kyushu-2018
masahitojp
 
PDF
The Benefits of Type Hints
masahitojp
 
PDF
20170131 python3 6 PEP526
masahitojp
 
PDF
chat bot framework for Java8
masahitojp
 
PDF
Akka meetup 2014_sep
masahitojp
 
PDF
Pyconjp2014_implementations
masahitojp
 
PDF
Pyconsg2014 pyston
masahitojp
 
PDF
Pykonjp2014
masahitojp
 
PDF
Riak map reduce for beginners
masahitojp
 
KEY
Play2 translate 20120714
masahitojp
 
KEY
Play2の裏側
masahitojp
 
KEY
Play!framework2.0 introduction
masahitojp
 
ZIP
5分で説明する Play! scala
masahitojp
 
Python と型ヒントとその使い方
masahitojp
 
Enjoy Type Hints and its benefits
masahitojp
 
Build a RESTful API with the Serverless Framework
masahitojp
 
Presentation kyushu-2018
masahitojp
 
The Benefits of Type Hints
masahitojp
 
20170131 python3 6 PEP526
masahitojp
 
chat bot framework for Java8
masahitojp
 
Akka meetup 2014_sep
masahitojp
 
Pyconjp2014_implementations
masahitojp
 
Pyconsg2014 pyston
masahitojp
 
Pykonjp2014
masahitojp
 
Riak map reduce for beginners
masahitojp
 
Play2 translate 20120714
masahitojp
 
Play2の裏側
masahitojp
 
Play!framework2.0 introduction
masahitojp
 
5分で説明する Play! scala
masahitojp
 
Ad

serverless framework + AWS Lambda with Python