Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Serverless Frameworkを本番環境に投入するために
Search
さっちゃん
November 17, 2016
Programming
7.1k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Serverless Frameworkを本番環境に投入するために
Serverless Frameworkを本番環境に投入するために
さっちゃん
November 17, 2016
More Decks by さっちゃん
See All by さっちゃん
敎へない敎師と、考へる機械
ne_sachirou
0
29
火星曆
ne_sachirou
0
56
みんなのオブザーバビリティプラットフォームを作ってるんだがパフォーマンスがやばい #mackerelio #srenext
ne_sachirou
0
1.7k
作ってよかったgraceful shutdownライブラリ #kyotogo
ne_sachirou
0
1.5k
path 依存型って何?
ne_sachirou
0
880
野生の onbording と onbording 設計 #kyototechtalk
ne_sachirou
0
770
メトリックはいかにして見え續ける樣になったか #devio2022
ne_sachirou
0
150
名實一致
ne_sachirou
0
780
まかれるあなとみあ ―Mackerel のしくみを理解する 30 分― @ Hatena Engineer Seminar #16
ne_sachirou
0
3.4k
Other Decks in Programming
See All in Programming
スマート反転とウェブアクセシビリティ
camiha
0
180
一参加者から『中の人』へ 〜全通PHPerがブースに立って学んだ、カンファレンスを100倍楽しむコツ〜
wp_daisuke
0
140
【高い買い物LT会】初任給で話題の国産フィジカルAIを買った話
akagami
PRO
0
140
コンパウンドプロダクト開発のためのローカルプロセスマネージャー再発明 #layerxgo
izumin5210
0
660
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
330
AIは賢い。でも実行環境は? CLIおじさんがAI時代に伝えたいこと ~ CLIおじさんがAI時代に伝えたいこと ~
curekoshimizu
1
230
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
470
ALB ログから Trace を気合で繋げる技術
fohte
7
880
Kiroで創り、AgentCoreで繋ぐ!AWSで実践する「AI-DLC」から「AIエージェント統合」までの最新地図
licux
4
640
ハーネス設計入門 〜プロンプト、コンテキストの次〜
kinopeee
56
37k
巨大モノリシックアプリ モダン化大作戦
ktcryomm
0
610
Omarchy Tokyo やると聞いて UMPC 買ってセットアップしてきた
mtsmfm
0
130
Featured
See All Featured
Rebuilding a faster, lazier Slack
samanthasiow
85
9.6k
How to make the Groovebox
asonas
2
2.4k
Faster Mobile Websites
deanohume
310
32k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Testing 201, or: Great Expectations
jmmastey
46
8.3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
500
A Tale of Four Properties
chriscoyier
163
24k
AI Search: Implications for SEO and How to Move Forward - #ShenzhenSEOConference
aleyda
1
1.4k
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
410
KATA
mclloyd
PRO
35
15k
A Soul's Torment
seathinner
7
3.6k
Transcript
Serverless Frameworkを 本番環境に投⼊するために
.。oO(さっちゃんですよヾ(〃l _ l)ノ゙☆)
None
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 Client Client Client
Client Client Client Client
常駐 Process Client 狀態 Client Client Client Client Client Client
Client Client Client Client 常駐 Process 常駐 Process 狀態 狀態
常駐 Process Client 狀態 Client Client Client Client Client Client
Client 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 Client Client Client
Client Client Client Client 常駐 Process 常駐 Process 狀態 狀態 管理
Client Client Client Client Client Client Client Client 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が凄く簡單になる