Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)

Slide 3

Slide 3 text

No content

Slide 4

Slide 4 text

DreeVee (動画広告プラットフォーム) 等

Slide 5

Slide 5 text

サーバーサイドエンジニア

Slide 6

Slide 6 text

Serverless Architecture FaaS Serverless Framework Case Study

Slide 7

Slide 7 text

Serverless Architecture FaaS Serverless Framework Case Study

Slide 8

Slide 8 text

サーバーレスアーキテクチャとは?

Slide 9

Slide 9 text

サーバー (レスアーキテクチャ) とは?

Slide 10

Slide 10 text

Client

Slide 11

Slide 11 text

常駐 Process Client Event

Slide 12

Slide 12 text

常駐 Process Client 狀態 Event

Slide 13

Slide 13 text

常駐 Process Client 狀態 Client Client Client Client Client Client Client Client Client Client

Slide 14

Slide 14 text

常駐 Process Client 狀態 Client Client Client Client Client Client Client Client Client Client 常駐 Process 常駐 Process 狀態 狀態

Slide 15

Slide 15 text

常駐 Process Client 狀態 Client Client Client Client Client Client Client Client Client Client 常駐 Process 常駐 Process 狀態 狀態 管理

Slide 16

Slide 16 text

管理すべき事 ↓ Eventの振り分け (Load balancing) 処理能⼒の割り當て (Scale up) Process數の増減 (Scale out) 死活監視 Ver.更新

Slide 17

Slide 17 text

管理すべき事 ↓ Eventの振り分け (Load balancing) 処理能⼒の割り當て (Scale up) Process數の増減 (Scale out) 死活監視 Ver.更新 (╯°□°)╯︵ ┻━┻

Slide 18

Slide 18 text

サーバーレスアーキテクチャとは?

Slide 19

Slide 19 text

常駐 Process Client 狀態 Client Client Client Client Client Client Client Client Client Client 常駐 Process 常駐 Process 狀態 狀態 管理

Slide 20

Slide 20 text

Client Client Client Client Client Client Client Client Client Client Client 狀態 サーバーレスアーキテクチャ 管理 Fun Fun Fun Fun Fun Fun

Slide 21

Slide 21 text

サーバーレスアーキテクチャ ↓ BaaS (Backend as a Service) FaaS (Function as a Service) S3, Cognito, Pusher, Auth0, Algolia, …

Slide 22

Slide 22 text

サーバーレスアーキテクチャ ↓ Functionを第⼀級市⺠として扱ふインフラ設計。 Application serverの、出來る事を殆ど減らさず 管理costを無くせる。

Slide 23

Slide 23 text

Awesome ↓ https://github.com/anaibol/awesome-serverless

Slide 24

Slide 24 text

Tips:「serverless」でググってはいけない(☍﹏⁰) (Serverless Framework (後述) の事しか 出て來ない)

Slide 25

Slide 25 text

Serverless Architecture FaaS Serverless Framework Case Study

Slide 26

Slide 26 text

FaaS ?

Slide 27

Slide 27 text

FaaS ? ↓ AWS Lambda Google Cloud Functions Azure Functions IBM OpenWhisk

Slide 28

Slide 28 text

FaaS (Function as a Service) ?

Slide 29

Slide 29 text

FaaS (Function as a Service) ?

Slide 30

Slide 30 text

FaaS (函數 as a Service) ?

Slide 31

Slide 31 text

Function (函數, 働き)

Slide 32

Slide 32 text

P Q f

Slide 33

Slide 33 text

Function ↓ 函數: ⼊⼒と出⼒の對 働き: 狀態遷移 (⾮形式的に) ⾔葉のイメージとしては、 Function=函數∪働き

Slide 34

Slide 34 text

Function ↓ 1つの⼊⼒と1つの出⼒を持ち、狀態を變更する

Slide 35

Slide 35 text

FaaS ?

Slide 36

Slide 36 text

Event source 狀態 Function 變更 結果 Event

Slide 37

Slide 37 text

Event source 狀態 Function 變更 結果 Event Function

Slide 38

Slide 38 text

狀態 Function 變更 Function Event source Event source Event source

Slide 39

Slide 39 text

Event source 狀態 Function Event source Event source Function Function Function Function Function Function Event

Slide 40

Slide 40 text

Event source 狀態 Function Event source Event source Function Function Function Function Function Function Event Eventと Functionが 1對1

Slide 41

Slide 41 text

FaaS ↓ Functionを實⾏するインフラを提供する

Slide 42

Slide 42 text

FaaS ↓ 「 1つの⼊⼒と1つの出⼒を持ち、狀態を變更す る」ものを實⾏するインフラを提供する

Slide 43

Slide 43 text

管理すべきだった事 ↓ Eventの振り分け (Load balancing) 処理能⼒の割り當て (Scale up) Process數の増減 (Scale out) 死活監視 Ver.更新

Slide 44

Slide 44 text

FaaSで管理すべき事 ↓ Eventの振り分け (Load balancing) 処理能⼒の割り當て (Scale up)→設定する Process數の増減 (Scale out) 死活監視→Log監視 Ver.更新→⾃然なBlue-Green

Slide 45

Slide 45 text

FaaSで管理すべき事 ↓ Eventの振り分け (Load balancing) 処理能⼒の割り當て (Scale up)→設定する Process數の増減 (Scale out) 死活監視→Log監視 Ver.更新→⾃然なBlue-Green ♪(*>ω<)o∀*∀o(>ω<*)♪カンパーイ

Slide 46

Slide 46 text

Tips:「FaaS」でググってはいけない(☍﹏⁰) (Fraud as a Service: 詐欺代⾏ named by RSA Security@2008の事しか 出て來ない)

Slide 47

Slide 47 text

Serverless Architecture FaaS Serverless Framework Case Study

Slide 48

Slide 48 text

https://serverless.com/

Slide 49

Slide 49 text

Serverless Framework ↓ FaaSを中⼼として、サーバーレスアーキテクチャ でserviceを構築する爲のframework

Slide 50

Slide 50 text

(〃l _ l)<でもFaaSは樂だし、framework要らな くない?

Slide 51

Slide 51 text

(まぁFaaSは樂だよ。FaaSは)Oo。.(l _ l〃)

Slide 52

Slide 52 text

Event source 狀態 Function 變更 結果 Event Function

Slide 53

Slide 53 text

Event source 狀態 Function 變更 結果 Event Function Event sourceって 具體的には何?

Slide 54

Slide 54 text

Evet source ↓ Storageの更新/cron/HTTP access/MQTT access 等 例へばAWS Lambdaに對するAPI Gateway

Slide 55

Slide 55 text

API Gateway ↓ 何かに對するREST interfaceを作成する どうやって?

Slide 56

Slide 56 text

Terraformで剥き出しのAWS resourceを 管理する例 API GatewayとLambdaの組み合はせでリリースするバージョンを制御する - c4se記:さっちゃんですよ☆ http://c4se.hatenablog.com/entry/2016/07/26/122508

Slide 57

Slide 57 text

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

Slide 58

Slide 58 text

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ステージにデプロイ。

Slide 59

Slide 59 text

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ステージにデプロイ。 (╯°□°)╯︵ ┻━┻

Slide 60

Slide 60 text

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の 對應の管理には、温かみの在る⾮⼈間的な作業が ⼀杯!

Slide 61

Slide 61 text

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

Slide 62

Slide 62 text

Serverless Frameworkで管理する例 ↓ `sls deploy ‒s prod`

Slide 63

Slide 63 text

Serverless Frameworkで管理する例 ↓ `sls deploy ‒s prod` ♪(*>ω<)o∀*∀o(>ω<*)♪カンパーイ

Slide 64

Slide 64 text

Serverless Frameworkとは ↓ FaaSに對して、Function/Event source/狀態を保 持するserviceをdeployするtool

Slide 65

Slide 65 text

AWSに對するServerless Frameworkとは ↓ Cloud Formation + Lambda Suuuuuuuuuuuuuuuuper simple!

Slide 66

Slide 66 text

Tips:「Serverless Framework」で ググってもよいです(〃l _ l)

Slide 67

Slide 67 text

Serverless Architecture FaaS Serverless Framework Case Study

Slide 68

Slide 68 text

⼩さなHTTP serviceを作った話 Serverless Frameworkをv0.5→v1.0に更新した話 RDSのslow queryを監視する話

Slide 69

Slide 69 text

⼩さなHTTP serviceを作った話 Serverless Frameworkをv0.5→v1.0に更新した話 RDSのslow queryを監視する話

Slide 70

Slide 70 text

RDSが1時 間毎に作る slowquery log RDSが1時 間毎に作る slowquery log RDSが1時間 毎に作る slowquery log CloudWatch Schedule Lambda Chat room 1回/1 hour 取得 投稿

Slide 71

Slide 71 text

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)

Slide 72

Slide 72 text

⼀番難しかったところ ↓ slowquery.logを取得する最⼩のIAM roleを確かめるところ

Slide 73

Slide 73 text

⼩さなHTTP serviceを作った話 Serverless Frameworkをv0.5→v1.0に更新した話 RDSのslow queryを監視する話

Slide 74

Slide 74 text

問題は簡單 ↓ ユーザーの⾏動に依って増減する或るもの個數を管理せよ 増減履歴も保存する 半年間増減しなければ0個にする

Slide 75

Slide 75 text

解決は難しい ↓ ユーザー數がそこそこ多い 増減囘數もわりと多い 參照囘數はかなり多い 増減履歴は凄く多い Access數が突然増える 個數がおかしくなったらコ◯スよ 既存のsystemがかなり複雜

Slide 76

Slide 76 text

既存のsystemが複雜だね ↓ でもmicro serviceに出來るね インフラが難しいね ↓ でもAPI Gateway + Lambda + DynamoDBなら簡單だね!

Slide 77

Slide 77 text

API Gateway Lambda 取得/増減 Dynamo DB (個數) Dynamo DB (履歴) GET/PUT 追記 GET/PUT

Slide 78

Slide 78 text

⼀番難しかったところ ↓ DynamoDBでtransactionっぽい事が出來るのを確かめるところ (+ 途中迄Terraformで組んでたので、Terraformが難しかった)

Slide 79

Slide 79 text

⼩さなHTTP serviceを作った話 Serverless Frameworkをv0.5→v1.0に更新した話 RDSのslow queryを監視する話

Slide 80

Slide 80 text

前記の⼩さなHTTP serviceは Serverless Framework v0.5で作ってゐた ↓ v1.0がreleaseされたので、更新した

Slide 81

Slide 81 text

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

Slide 82

Slide 82 text

v0.5→v1.0 ↓ 設定が抽象化された (AWSに依存した記法が殆ど無くなった) 設定が短くなった Function毎にcodeを分けなくなった AWSに作るresourceの命名法が變はった

Slide 83

Slide 83 text

v0.5→v1.0 ↓ AWSに作るresourceの命名法が變はった事を利⽤して、 無停⽌でupgradeした

Slide 84

Slide 84 text

舊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

Slide 85

Slide 85 text

⼀番難しかったところ ↓ 檢證して、インフラを變更する恐怖を乘り越えろ

Slide 86

Slide 86 text

纏め

Slide 87

Slide 87 text

What?/Why? サーバーレスアーキテクチャ→ Functionを第⼀級市⺠として扱ふインフラ設計 Function→ 1つの⼊⼒と1つの出⼒を持ち、狀態を變更する Serverless Framework→ FaaSと周邊serviceをdeployするtool

Slide 88

Slide 88 text

What?/Why? サーバーレスアーキテクチャ→ インフラ管理costが激減する FaaS→ Applicationとインフラ管理を分離出來る Serverless Framework→ FaaSへのdeployが凄く簡單になる