SlideShare a Scribd company logo
Serverless Frameworkを
本番環境に投⼊するために
.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)
Serverless Frameworkを本番環境に投入するために
DreeVee (動画広告プラットフォーム) 等
サーバーサイドエンジニア
Serverless
Architecture
FaaS
Serverless
Framework
Case
Study
Serverless
Architecture
FaaS
Serverless
Framework
Case
Study
サーバーレスアーキテクチャとは?
サーバー (レスアーキテクチャ) とは?
Client
常駐
Process
Client
Event
常駐
Process
Client
狀態
Event
常駐
Process
Client
狀態
Client Client Client ClientClient ClientClient Client Client Client
常駐
Process
Client
狀態
Client Client Client ClientClient ClientClient Client Client Client
常駐
Process
常駐
Process
狀態 狀態
常駐
Process
Client
狀態
Client Client Client ClientClient ClientClient Client Client Client
常駐
Process
常駐
Process
狀態 狀態
管理
管理すべき事
↓
Eventの振り分け (Load balancing)
処理能⼒の割り當て (Scale up)
Process數の増減 (Scale out)
死活監視
Ver.更新
管理すべき事
↓
Eventの振り分け (Load balancing)
処理能⼒の割り當て (Scale up)
Process數の増減 (Scale out)
死活監視
Ver.更新
(╯°□°)╯︵ ┻━┻
サーバーレスアーキテクチャとは?
常駐
Process
Client
狀態
Client Client Client ClientClient ClientClient Client Client Client
常駐
Process
常駐
Process
狀態 狀態
管理
Client Client Client Client ClientClient ClientClient Client Client Client
狀態
サーバーレスアーキテクチャ
管理
Fun
Fun
Fun
Fun
Fun
Fun
サーバーレスアーキテクチャ
↓
BaaS (Backend as a Service)
FaaS (Function as a Service)
S3, Cognito, Pusher, Auth0, Algolia, …
サーバーレスアーキテクチャ
↓
Functionを第⼀級市⺠として扱ふインフラ設計。
Application serverの、出來る事を殆ど減らさず
管理costを無くせる。
Awesome
↓
https://github.com/anaibol/awesome-serverless
Tips:「serverless」でググってはいけない(☍﹏⁰)
(Serverless Framework (後述) の事しか
出て來ない)
Serverless
Architecture
FaaS
Serverless
Framework
Case
Study
FaaS ?
FaaS ?
↓
AWS Lambda
Google Cloud Functions
Azure Functions
IBM OpenWhisk
FaaS (Function as a Service) ?
FaaS (Function as a Service) ?
FaaS (函數 as a Service) ?
Function (函數, 働き)
P Q
f
Function
↓
函數: ⼊⼒と出⼒の對
働き: 狀態遷移
(⾮形式的に) ⾔葉のイメージとしては、
Function=函數∪働き
Function
↓
1つの⼊⼒と1つの出⼒を持ち、狀態を變更する
FaaS ?
Event
source
狀態Function
變更
結果
Event
Event
source
狀態Function
變更
結果
Event
Function
狀態Function
變更
Function
Event
source
Event
source
Event
source
Event
source
狀態
Function
Event
source
Event
source
Function
Function
Function
Function
Function
Function
Event
Event
source
狀態
Function
Event
source
Event
source
Function
Function
Function
Function
Function
Function
Event
Eventと
Functionが
1對1
FaaS
↓
Functionを實⾏するインフラを提供する
FaaS
↓
「 1つの⼊⼒と1つの出⼒を持ち、狀態を變更す
る」ものを實⾏するインフラを提供する
管理すべきだった事
↓
Eventの振り分け (Load balancing)
処理能⼒の割り當て (Scale up)
Process數の増減 (Scale out)
死活監視
Ver.更新
FaaSで管理すべき事
↓
Eventの振り分け (Load balancing)
処理能⼒の割り當て (Scale up)→設定する
Process數の増減 (Scale out)
死活監視→Log監視
Ver.更新→⾃然なBlue-Green
FaaSで管理すべき事
↓
Eventの振り分け (Load balancing)
処理能⼒の割り當て (Scale up)→設定する
Process數の増減 (Scale out)
死活監視→Log監視
Ver.更新→⾃然なBlue-Green
♪(*>ω<)o∀*∀o(>ω<*)♪カンパーイ
Tips:「FaaS」でググってはいけない(☍﹏⁰)
(Fraud as a Service: 詐欺代⾏
named by RSA Security@2008の事しか
出て來ない)
Serverless
Architecture
FaaS
Serverless
Framework
Case
Study
https://serverless.com/
Serverless Framework
↓
FaaSを中⼼として、サーバーレスアーキテクチャ
でserviceを構築する爲のframework
(〃l _ l)<でもFaaSは樂だし、framework要らな
くない?
(まぁFaaSは樂だよ。FaaSは)Oo。.(l _ l〃)
Event
source
狀態Function
變更
結果
Event
Function
Event
source
狀態Function
變更
結果
Event
Function
Event sourceって
具體的には何?
Evet source
↓
Storageの更新/cron/HTTP access/MQTT access
等
例へばAWS Lambdaに對するAPI Gateway
API Gateway
↓
何かに對するREST interfaceを作成する
どうやって?
Terraformで剥き出しのAWS resourceを
管理する例
API GatewayとLambdaの組み合はせでリリースするバージョンを制御する - c4se記:さっちゃんですよ☆
http://c4se.hatenablog.com/entry/2016/07/26/122508
Terraformで剥き出しのAWS resourceを管理する例API GatewayとLambdaの組み合はせでリリースするバージョンを制御する - c4se記:さっちゃんですよ☆ http://c4se.hatenablog.com/entry/2016/07/26/122508
管理するもの
↓
aws_lambda_function/aws_lambda_alias/aws_lambda_alias/aws_lam
bda_permission/aws_lambda_permission/aws_api_gateway_rest_api/
aws_api_gateway_deployment/aws_api_gateway_deployment/aws_ap
i_gateway_resource/aws_api_gateway_resource/aws_api_gateway_m
ethod/aws_api_gateway_method/aws_api_gateway_integration/aws_
api_gateway_integration/aws_api_gateway_method_response/aws_ap
i_gateway_method_response/aws_api_gateway_method_response/aw
s_api_gateway_method_response/aws_api_gateway_method_respons
e/aws_api_gateway_method_response/aws_api_gateway_integration_
response/aws_api_gateway_integration_response/aws_api_gateway_i
ntegration_response/aws_api_gateway_integration_response/aws_api
_gateway_integration_response/aws_api_gateway_integration_respon
se
Terraformで剥き出しのAWS resourceを管理する例API GatewayとLambdaの組み合はせでリリースするバージョンを制御する - c4se記:さっちゃんですよ☆ http://c4se.hatenablog.com/entry/2016/07/26/122508
deploy⼿順
↓
1. aws_lambda_alias.prodのfunction_versionを
"$LATEST" にしておく。Lambda函數作成前で、
publish_versionもしてゐずバージョンが未だ無い爲。
2. LambdaとAPI Gatewayをデプロイ。
3. API Gatewayをstagingステージにデプロイ。
4. stagingで検証。
5. Lambdaをpublish_versionして、Versionをメモする。
6. aws_lambda_alias.prodのfunction_versionを 上でメ
モしたバージョンに書き換へる。
7. Lambdaをデプロイ。
8. API Gatewayをprodステージにデプロイ。
Terraformで剥き出しのAWS resourceを管理する例API GatewayとLambdaの組み合はせでリリースするバージョンを制御する - c4se記:さっちゃんですよ☆ http://c4se.hatenablog.com/entry/2016/07/26/122508
deploy⼿順
↓
1. aws_lambda_alias.prodのfunction_versionを
"$LATEST" にしておく。Lambda函數作成前で、
publish_versionもしてゐずバージョンが未だ無い爲。
2. LambdaとAPI Gatewayをデプロイ。
3. API Gatewayをstagingステージにデプロイ。
4. stagingで検証。
5. Lambdaをpublish_versionして、Versionをメモする。
6. aws_lambda_alias.prodのfunction_versionを 上でメ
モしたバージョンに書き換へる。
7. Lambdaをデプロイ。
8. API Gatewayをprodステージにデプロイ。
(╯°□°)╯︵ ┻━┻
Terraformで剥き出しのAWS resourceを管理する例API GatewayとLambdaの組み合はせでリリースするバージョンを制御する - c4se記:さっちゃんですよ☆ http://c4se.hatenablog.com/entry/2016/07/26/122508
deploy⼿順
↓
1. aws_lambda_alias.prodのfunction_versionを
"$LATEST" にしておく。Lambda函數作成前で、
publish_versionもしてゐずバージョンが未だ無い爲。
2. LambdaとAPI Gatewayをデプロイ。
3. API Gatewayをstagingステージにデプロイ。
4. stagingで検証。
5. Lambdaをpublish_versionして、Versionをメモする。
6. aws_lambda_alias.prodのfunction_versionを 上でメ
モしたバージョンに書き換へる。
7. Lambdaをデプロイ。
8. API Gatewayをprodステージにデプロイ。
Event sourceの管理とEvent sourceとFunctionの
對應の管理には、温かみの在る⾮⼈間的な作業が
⼀杯!
Serverless Frameworkで管理する例
↓
provider:
stage: staging
functions:
example:
handler: handler.handler
events:
- http:
path: "example/example”
method: get
integration: lambda
- http:
path: "example/example”
method: put
integration: lambda
Serverless Frameworkで管理する例
↓
`sls deploy ‒s prod`
Serverless Frameworkで管理する例
↓
`sls deploy ‒s prod`
♪(*>ω<)o∀*∀o(>ω<*)♪カンパーイ
Serverless Frameworkとは
↓
FaaSに對して、Function/Event source/狀態を保
持するserviceをdeployするtool
AWSに對するServerless Frameworkとは
↓
Cloud Formation + Lambda
Suuuuuuuuuuuuuuuuper simple!
Tips:「Serverless Framework」で
ググってもよいです(〃l _ l)
Serverless
Architecture
FaaS
Serverless
Framework
Case
Study
⼩さなHTTP serviceを作った話
Serverless Frameworkをv0.5→v1.0に更新した話
RDSのslow queryを監視する話
⼩さなHTTP serviceを作った話
Serverless Frameworkをv0.5→v1.0に更新した話
RDSのslow queryを監視する話
RDSが1時
間毎に作る
slowquery
log
RDSが1時
間毎に作る
slowquery
log
RDSが1時間
毎に作る
slowquery
log
CloudWatch
Schedule
Lambda
Chat
room
1回/1 hour
取得
投稿
service: xxx-export-slow-query
provider:
name: aws
region: ap-northeast-1
stage: prod
runtime: python2.7
iamRoleStatements:
- Effect: Allow
Action:
- rds:DescribeDBLogFiles
- rds:DownloadDBLogFilePortion
Resource:
- arn:aws:rds:*
package:
exclude:
- tasks.py
- tests
functions:
exportToChat:
handler: handler.export_to_chat
memorySize: 512
timeout: 6
events:
- schedule: rate(1 hour)
⼀番難しかったところ
↓
slowquery.logを取得する最⼩のIAM roleを確かめるところ
⼩さなHTTP serviceを作った話
Serverless Frameworkをv0.5→v1.0に更新した話
RDSのslow queryを監視する話
問題は簡單
↓
ユーザーの⾏動に依って増減する或るもの個數を管理せよ
増減履歴も保存する
半年間増減しなければ0個にする
解決は難しい
↓
ユーザー數がそこそこ多い
増減囘數もわりと多い
參照囘數はかなり多い
増減履歴は凄く多い
Access數が突然増える
個數がおかしくなったらコ◯スよ
既存のsystemがかなり複雜
既存のsystemが複雜だね
↓
でもmicro serviceに出來るね
インフラが難しいね
↓
でもAPI Gateway + Lambda + DynamoDBなら簡單だね!
API
Gateway
Lambda
取得/増減 Dynamo
DB
(個數)
Dynamo
DB
(履歴)
GET/PUT
追記
GET/PUT
⼀番難しかったところ
↓
DynamoDBでtransactionっぽい事が出來るのを確かめるところ
(+ 途中迄Terraformで組んでたので、Terraformが難しかった)
⼩さなHTTP serviceを作った話
Serverless Frameworkをv0.5→v1.0に更新した話
RDSのslow queryを監視する話
前記の⼩さなHTTP serviceは
Serverless Framework v0.5で作ってゐた
↓
v1.0がreleaseされたので、更新した
v0.5
/
s-project.json
functions/
fun-a/
s-function.json
aʼs code
fun-b/
s-function.json
bʼs code
v1.0
/
serverless.yml
fun-a&fun-bʼs code
v0.5→v1.0
↓
設定が抽象化された (AWSに依存した記法が殆ど無くなった)
設定が短くなった
Function毎にcodeを分けなくなった
AWSに作るresourceの命名法が變はった
v0.5→v1.0
↓
AWSに作るresourceの命名法が變はった事を利⽤して、
無停⽌でupgradeした
舊Lambda
API
Gateway
custome
domain
舊API
Gateway
resource
舊Lambda
API
Gateway
custome
domain
舊API
Gateway
resource
新Lambda
新API
Gateway
resource
API
Gateway
custome
domain
新Lambda
新API
Gateway
resource
⼀番難しかったところ
↓
檢證して、インフラを變更する恐怖を乘り越えろ
纏め
What?/Why?
サーバーレスアーキテクチャ→
Functionを第⼀級市⺠として扱ふインフラ設計
Function→
1つの⼊⼒と1つの出⼒を持ち、狀態を變更する
Serverless Framework→
FaaSと周邊serviceをdeployするtool
What?/Why?
サーバーレスアーキテクチャ→
インフラ管理costが激減する
FaaS→
Applicationとインフラ管理を分離出來る
Serverless Framework→
FaaSへのdeployが凄く簡單になる

More Related Content

PDF
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
PPTX
イノベーションエッグLt資料
PDF
private-values
PDF
哲學を學ぶ為に一冊目に何を讀むべきか?
PDF
Crystalで殺せ
PDF
Serverless
PDF
OCamlでJavaScriptが幸せ
PDF
J言語を讃えた
Xamarin in Microsoft Build 2018 - JXUG Fukuoka May-25-2018
イノベーションエッグLt資料
private-values
哲學を學ぶ為に一冊目に何を讀むべきか?
Crystalで殺せ
Serverless
OCamlでJavaScriptが幸せ
J言語を讃えた

Similar to Serverless Frameworkを本番環境に投入するために (20)

PDF
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
PDF
[20171116 三木会] AWSを利用したサーバーレス開発の実践 by アイレット株式会社 cloudpack事業部 高橋 直樹 氏
PDF
Serverless Anti-Patterns
PPTX
Serverless frameworkを使ってみた話 at #nseg #90
PDF
AWSによるサーバーレスアーキテクチャ
PDF
Serverless Meetup Japan Virtual #6
PDF
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
PPTX
Wem #14
PDF
serverless
PDF
Serverless Architecture Overview #cdevc
PDF
サーバーレスアーキテクチャのすすめ(公開版)
PPTX
エンジニアのための勉強会 #4 『Serverless』
PDF
Serverless frameworkでお手軽lambda運用 at #nseg #93
PDF
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
PDF
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
PDF
サーバーレスの今とこれから
PDF
AWS Black Belt Online Seminar 2016 AWS上でのサーバーレスアーキテクチャ入門
PDF
担当Pjのciにserverless frameworkを導入した話
PPTX
[D3]サーバーレスでサービスを作ってみた話
PDF
Growing up serverless
20201118 AWS Black Belt Online Seminar 形で考えるサーバーレス設計 サーバーレスユースケースパターン解説
[20171116 三木会] AWSを利用したサーバーレス開発の実践 by アイレット株式会社 cloudpack事業部 高橋 直樹 氏
Serverless Anti-Patterns
Serverless frameworkを使ってみた話 at #nseg #90
AWSによるサーバーレスアーキテクチャ
Serverless Meetup Japan Virtual #6
JAWS-UGアーキテクチャ専門支部 ServerlessConfレポート
Wem #14
serverless
Serverless Architecture Overview #cdevc
サーバーレスアーキテクチャのすすめ(公開版)
エンジニアのための勉強会 #4 『Serverless』
Serverless frameworkでお手軽lambda運用 at #nseg #93
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
AWS Lambdaによるサーバレスアーキテクチャの基本に触れてみよう!【kintone & AWS ハンズオン祭り2015秋 B-2】
サーバーレスの今とこれから
AWS Black Belt Online Seminar 2016 AWS上でのサーバーレスアーキテクチャ入門
担当Pjのciにserverless frameworkを導入した話
[D3]サーバーレスでサービスを作ってみた話
Growing up serverless
Ad

More from Sachirou Inoue (20)

PDF
Elixir on Containers
PDF
發言の超越論的な根拠
PDF
faastCrystal
PDF
人工言語作成を樂しむ者の爲の言語學
PDF
人工言語を作るゆるやかな道
PDF
FaaStRuby
PDF
DI is for us?
PDF
How to make a spaghetti
PDF
Why we update our oss dependencies.
PDF
Test like a team.
PDF
Phoenix at scale
PDF
Vivaldi #cd3437
PDF
外傷的Elixir
PDF
勝手に作ったものたち
PDF
PDF
ActiveHash
PDF
boilerplate react
PDF
ElixirでNode.jsを倒す
PDF
大勢でピンポンできるのは、だれ?
PDF
最速で最速のRuby擴張を作る
Elixir on Containers
發言の超越論的な根拠
faastCrystal
人工言語作成を樂しむ者の爲の言語學
人工言語を作るゆるやかな道
FaaStRuby
DI is for us?
How to make a spaghetti
Why we update our oss dependencies.
Test like a team.
Phoenix at scale
Vivaldi #cd3437
外傷的Elixir
勝手に作ったものたち
ActiveHash
boilerplate react
ElixirでNode.jsを倒す
大勢でピンポンできるのは、だれ?
最速で最速のRuby擴張を作る
Ad

Serverless Frameworkを本番環境に投入するために