SlideShare a Scribd company logo
1 of 21
Download to read offline
serverless frameworkで
お手軽Lambda運用
2017.10.14 nseg #93 於 GEEKLAB.NAGANO
自己紹介
にしざわこういち
@koty
GEEKLAB.NAGANO 管理人見習い
SIer(Javaとか.NETとか)→現職(Python/Django/AWS)
FaaS: Function as a Service
● 関数実行基盤
● 最近よく耳にする
AWS Lambda
● AWSのFaaS
● node/Java/C#(.NET Core)/Python を使用可能
● サーバーレス≒デーモンレス
● 状態を持たず、callされるたびにプロセスが上がっては落ちる(実際にはちょっと違う)
http://docs.aws.amazon.com/ja_jp/lambda/latest/dg/welcome.html
AWS Lambda
● https://aws.amazon.com/jp/lambda/pricing/
○ “リクエストのうち毎月最初の 1,000,000 件は無料”
○ “その後は 0.20 USD/1,000,000 件のリクエスト(0.0000002 USD/リクエスト)”
○ 安い
● http経由でcallしたい場合は、API-Gatewayを通す必要がある
AWS Lambda
● API Gatewayの他にも様々な起動トリガーを使える
● CloudWatch Eventsによるcron実行が便利
○ ちょっとした定期実行処理のための EC2が不要に
● RDBとの相性の悪さが言われていたが、最近は良く
なってきている
運用しているLambda
● http://b-sw.co/hokuto/index.html
○ 一日一回各サイトをクロールしてスクレイピング ←これがLambda関数
○ 結果をjsonでS3に保存
○ 上記静的サイトでjsonを読み取り
○ https://github.com/koty/hokuto_program_scraper
● https://twitter.com/glnagano/
○ GEEKLAB.NAGANO関連のイベント情報を定期的に tweet
○ https://github.com/geeklabnagano/glnagano-lambda-bot
● 社内で使っているシステムと Slackとの連携いろいろ
deployが面倒
● 簡単な処理(EC2を起動するとか)であれば、AWS管理コンソールに直接処理を書
けば良いが、、、
● 外部パッケージを使うときは、当該パッケージを含むzipを作る必要がある
● →面倒。herokuのようにrequirements.txt(rubyで言うgemfile)をプラットフォーム
側でダウンロードしてほしい
deployツールを使う
https://serverless.com
“The Serverless Framework is a CLI tool that
allows users to build & deploy auto-scaling,
pay-per-execution, event-driven functions.”
install〜deploy
npm install -g serverless
serverless create -t aws-python3 -p serverless-test
vim ~/.aws/credentials
serverless deploy --aws-profile koty
実行してみる
serverless invoke -f hello --aws-profile koty
/tmp に書き込んでみる
サーバーはあった
Amazon Linux ベースのコンテナ上で動くホストプロセスがいるらしい
requirements.txt を含むアプリのdeploy
● pip install時にコンパイルが走るパッケージはAmazon Linux上でzipを作る必
要がある
● Serverless Python Requirementsというプラグインを使うとlambdaのdockerコ
ンテナ上でzipを作ってくれる
参考:https://qiita.com/mkisono/items/f04297775275c6b50774
5275c6b50774
dockerコンテナ上でzipを作ってくれる利点
● プラグイン内で以下のdockerイメージを利用
  https://github.com/lambci/docker-lambda
pip install時にビルドが行われるパッケージ(lxmlとか)も安心。これまではEC2上で
Lambdaにdeployするzipを作る必要があった。
5275c6b50774
cronの登録
serverless.yml
functions:
hello:
handler: handler.handle
- schedule: cron(50 * ? * * *)
参考:https://github.com/geeklabnagano/glnagano-lambda-bot/blob/master/serverless.yml
環境変数の設定
serverless.yml
provider:
environment:
CONSUMER_KEY: ${file(./serverless.env.yml):CONSUMER_KEY}
CONSUMER_SECRET: ${file(./serverless.env.yml):CONSUMER_SECRET}
ACCESS_TOKEN: ${file(./serverless.env.yml):ACCESS_TOKEN}
ACCESS_TOKEN_SECRET: ${file(./serverless.env.yml):ACCESS_TOKEN_SECRET}
DOCO_API_KEY: ${file(./serverless.env.yml):DOCO_API_KEY}
AWS_S3_BUCKET_NAME: ${file(./serverless.env.yml):AWS_S3_BUCKET_NAME}
参考:https://github.com/geeklabnagano/glnagano-lambda-bot/blob/master/serverless.yml
ヒミツの値はGit管理外のファイルから読み込み
(もっとスマートな書き方あれば教えてください。。)
API Gateway の設定
serverless.yml
functions:
create:
handler: todos/create.create
events:
- http:
path: todos
method: post
cors: true
参考: https://github.com/serverless/examples/blob/master/aws-python-rest-api-with-dynamodb/serverless.yml
Djangoを動かしてみる
● serverless-wsgi というプラグインを利用
https://github.com/logandk/serverless-wsgi
functions:
api:
handler: wsgi.handler
events:
- http: ANY /
- http: ANY {proxy+}
参考:https://github.com/koty/dj-lambda-sample
ルーティングはDjango側に委譲
Djangoを動かしてみる
● ↓進捗。。。
ここまでできればまあ動きそう。
おしまい
● いろんな事例を聞きたい

More Related Content

What's hot

What's hot (20)

エンジニアのための勉強会 #4 『Serverless』
エンジニアのための勉強会 #4 『Serverless』エンジニアのための勉強会 #4 『Serverless』
エンジニアのための勉強会 #4 『Serverless』
 
Leap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみるLeap MotionとLambdaで「第九」を鳴らしてみる
Leap MotionとLambdaで「第九」を鳴らしてみる
 
SQLによるDynamoDBの操作
SQLによるDynamoDBの操作SQLによるDynamoDBの操作
SQLによるDynamoDBの操作
 
画像処理をAWS LambdaのPythonで!
画像処理をAWS LambdaのPythonで!画像処理をAWS LambdaのPythonで!
画像処理をAWS LambdaのPythonで!
 
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化するAWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
AWS Step FunctionとLambdaでディープラーニングの訓練を全自動化する
 
Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装Lambdaによるクラウド型言語の実装
Lambdaによるクラウド型言語の実装
 
node.jsでS3にバックアップを送り続けるコードを書いてみた話。Node s3maの紹介-jawsugさいたま
node.jsでS3にバックアップを送り続けるコードを書いてみた話。Node s3maの紹介-jawsugさいたまnode.jsでS3にバックアップを送り続けるコードを書いてみた話。Node s3maの紹介-jawsugさいたま
node.jsでS3にバックアップを送り続けるコードを書いてみた話。Node s3maの紹介-jawsugさいたま
 
Serverless Framework 使ってる話(node.js)
Serverless Framework 使ってる話(node.js)Serverless Framework 使ってる話(node.js)
Serverless Framework 使ってる話(node.js)
 
速習 AWS Lambda
速習 AWS Lambda速習 AWS Lambda
速習 AWS Lambda
 
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
体で覚えるSQS! DEVIO-MTUP11-TOKYO-007
 
What's new with Serverless
What's new with ServerlessWhat's new with Serverless
What's new with Serverless
 
20140930 anything as_code
20140930 anything as_code20140930 anything as_code
20140930 anything as_code
 
サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方サーバーレスアプリケーションの作り方
サーバーレスアプリケーションの作り方
 
lambda-lgtm
lambda-lgtmlambda-lgtm
lambda-lgtm
 
サーバレスアーキテクチャを実戦投入するにあたって知るべきこと
サーバレスアーキテクチャを実戦投入するにあたって知るべきことサーバレスアーキテクチャを実戦投入するにあたって知るべきこと
サーバレスアーキテクチャを実戦投入するにあたって知るべきこと
 
serverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Pythonserverless framework + AWS Lambda with Python
serverless framework + AWS Lambda with Python
 
AWSエンジニアが、 経理部門と仲良くなれるTips
AWSエンジニアが、 経理部門と仲良くなれるTipsAWSエンジニアが、 経理部門と仲良くなれるTips
AWSエンジニアが、 経理部門と仲良くなれるTips
 
当社のawsへの取組
当社のawsへの取組当社のawsへの取組
当社のawsへの取組
 
DynamoDBのまえにキャッシュおく奴
DynamoDBのまえにキャッシュおく奴DynamoDBのまえにキャッシュおく奴
DynamoDBのまえにキャッシュおく奴
 
コンテナで作れるFaaS
コンテナで作れるFaaSコンテナで作れるFaaS
コンテナで作れるFaaS
 

Similar to Serverless frameworkでお手軽lambda運用 at #nseg #93

Similar to Serverless frameworkでお手軽lambda運用 at #nseg #93 (20)

AWS Lambda を使ってみた話 at づや会Vol.3
AWS Lambda を使ってみた話 at  づや会Vol.3AWS Lambda を使ってみた話 at  づや会Vol.3
AWS Lambda を使ってみた話 at づや会Vol.3
 
AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発AWS SAMで始めるサーバーレスアプリケーション開発
AWS SAMで始めるサーバーレスアプリケーション開発
 
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
Anchors Aweigh!! - re:Invent報告@re:Port 2016 大阪
 
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
20180508 AWS Black Belt Online Seminar AWS Greengrassで実現するエッジコンピューティング
 
AWS Lambda with Java/Scala #渋谷Java 第十二回
AWS Lambda with Java/Scala #渋谷Java 第十二回AWS Lambda with Java/Scala #渋谷Java 第十二回
AWS Lambda with Java/Scala #渋谷Java 第十二回
 
LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係LambdaとMobileの美味しいかもしれない関係
LambdaとMobileの美味しいかもしれない関係
 
May the FaaS be with us!!
May the FaaS be with us!!May the FaaS be with us!!
May the FaaS be with us!!
 
AWS Lambda + Go
AWS Lambda + GoAWS Lambda + Go
AWS Lambda + Go
 
re:invent2018 総ざらえ
re:invent2018 総ざらえre:invent2018 総ざらえ
re:invent2018 総ざらえ
 
AWSのNoSQL入門
AWSのNoSQL入門AWSのNoSQL入門
AWSのNoSQL入門
 
失敗から学ぶAWSの監視
失敗から学ぶAWSの監視失敗から学ぶAWSの監視
失敗から学ぶAWSの監視
 
インフラ系自主トレするならAWS
インフラ系自主トレするならAWSインフラ系自主トレするならAWS
インフラ系自主トレするならAWS
 
サーバーレスの今とこれから
サーバーレスの今とこれからサーバーレスの今とこれから
サーバーレスの今とこれから
 
Lambda勉強会
Lambda勉強会Lambda勉強会
Lambda勉強会
 
AWSCLI Lambda
AWSCLI LambdaAWSCLI Lambda
AWSCLI Lambda
 
これからのクラウドネイティブアプリケーションの話をしよう
これからのクラウドネイティブアプリケーションの話をしようこれからのクラウドネイティブアプリケーションの話をしよう
これからのクラウドネイティブアプリケーションの話をしよう
 
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデートAWS Black Belt Techシリーズ  AWS re:Invent 2014 最新情報のアップデート
AWS Black Belt Techシリーズ AWS re:Invent 2014 最新情報のアップデート
 
Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -Architecting on Alibaba Cloud - 超基礎編 -
Architecting on Alibaba Cloud - 超基礎編 -
 
AWS re:Invent2019 Overview & New Releases Summary for Game
AWS re:Invent2019 Overview &New Releases Summary for GameAWS re:Invent2019 Overview &New Releases Summary for Game
AWS re:Invent2019 Overview & New Releases Summary for Game
 
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
20180710 AWS Black Belt Online Seminar AWS入門者向け: AWSで実現するウェブサイトホスティング
 

More from ko ty

NSEG第25回勉強会
NSEG第25回勉強会NSEG第25回勉強会
NSEG第25回勉強会
ko ty
 
Tddbc nagano0.1(nseg第20回勉強会)
Tddbc nagano0.1(nseg第20回勉強会)Tddbc nagano0.1(nseg第20回勉強会)
Tddbc nagano0.1(nseg第20回勉強会)
ko ty
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会
ko ty
 
第2回nseg slideshare
第2回nseg slideshare第2回nseg slideshare
第2回nseg slideshare
ko ty
 

More from ko ty (13)

DjangoのORMことはじめ
DjangoのORMことはじめDjangoのORMことはじめ
DjangoのORMことはじめ
 
普段Djangoを使っている人間がruby on railsを勉強してみた話
普段Djangoを使っている人間がruby on railsを勉強してみた話普段Djangoを使っている人間がruby on railsを勉強してみた話
普段Djangoを使っている人間がruby on railsを勉強してみた話
 
データベース実践入門読書会スペシャル #nseg
データベース実践入門読書会スペシャル #nsegデータベース実践入門読書会スペシャル #nseg
データベース実践入門読書会スペシャル #nseg
 
Open data とは in open data day
Open data とは in open data dayOpen data とは in open data day
Open data とは in open data day
 
Source treeの紹介
Source treeの紹介Source treeの紹介
Source treeの紹介
 
NSEG第33回勉強会
NSEG第33回勉強会NSEG第33回勉強会
NSEG第33回勉強会
 
Nseg第32回勉強会
Nseg第32回勉強会Nseg第32回勉強会
Nseg第32回勉強会
 
NSEG第25回勉強会
NSEG第25回勉強会NSEG第25回勉強会
NSEG第25回勉強会
 
Tddbc nagano0.1(nseg第20回勉強会)
Tddbc nagano0.1(nseg第20回勉強会)Tddbc nagano0.1(nseg第20回勉強会)
Tddbc nagano0.1(nseg第20回勉強会)
 
NSEG第11回勉強会
NSEG第11回勉強会NSEG第11回勉強会
NSEG第11回勉強会
 
nseg第5回勉強会
nseg第5回勉強会nseg第5回勉強会
nseg第5回勉強会
 
NSEG第3回勉強会
NSEG第3回勉強会NSEG第3回勉強会
NSEG第3回勉強会
 
第2回nseg slideshare
第2回nseg slideshare第2回nseg slideshare
第2回nseg slideshare
 

Serverless frameworkでお手軽lambda運用 at #nseg #93