Serverless Frameworkを本番環境に投入するために
by
さっちゃん
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
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が凄く簡單になる