Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォー...
Search
saicologic
April 23, 2022
Technology
0
1k
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用
Go Conference 2022 Spring 発表資料
https://gocon.jp/2022spring/sessions/a11-s/
saicologic
April 23, 2022
Tweet
Share
More Decks by saicologic
See All by saicologic
Goのアプリケーションをトレース して劇的に改善した話
saicologic
0
210
Other Decks in Technology
See All in Technology
Postman v12 で変わる API開発ワークフロー (Postman v12 アップデート) / New API development workflow with Postman v12
yokawasa
0
120
クラウド × シリコンの Mashup - AWS チップ開発で広がる AI 基盤の選択肢
htokoyo
2
250
複数クラスタ運用と検索の高度化:ビズリーチにおけるElastic活用事例 / ElasticON Tokyo2026
visional_engineering_and_design
0
150
Claude Codeが爆速進化してプラグイン追従がつらいので半自動化した話 ver.2
rfdnxbro
0
530
「Blue Team Labs Online」入門 - みんなで挑むログ解析バトル
v_avenger
0
170
わからなくて良いなら、わからなきゃだめなの?
kotaoue
1
340
Lambda Web AdapterでLambdaをWEBフレームワーク利用する
sahou909
0
120
JAWSDAYS2026_A-6_現場SEが語る 回せるセキュリティ運用~設計で可視化、AIで加速する「楽に回る」運用設計のコツ~
shoki_hata
0
3k
銀行の内製開発にて2つのプロダクトを1つのチームでスクラムしてみてる話
koba1210
1
120
最強のAIエージェントを諦めたら品質が上がった話 / how quality improved after giving up on the strongest AI agent
kt2mikan
0
180
OSC仙台プレ勉強会 AlmaLinuxとは
koedoyoshida
0
160
JAWS DAYS 2026 楽しく学ぼう!ストレージ 入門
yoshiki0705
2
180
Featured
See All Featured
Being A Developer After 40
akosma
91
590k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
550
How to optimise 3,500 product descriptions for ecommerce in one day using ChatGPT
katarinadahlin
PRO
1
3.5k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
860
Scaling GitHub
holman
464
140k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
122
21k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
For a Future-Friendly Web
brad_frost
183
10k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
120
Abbi's Birthday
coloredviolet
2
5.3k
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Collaborative Software Design: How to facilitate domain modelling decisions
baasie
0
160
Transcript
GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用 ©tottie / Renée French
三上 悟 Tech Lead at Voicy saicologic Goの開発は2021年〜 PHP =>
Ruby => Node.js => Python => Go 自己紹介
Go x AWS Lambda
・ユースケース ・他のランタイムと違い:ベンチマーク ・開発の始め方
ユースケース:メール配信の不達調査 メール送信 ・メールアドレスによる会員登録、アクティベーション ・パスワード再発行 ・パスワード更新 さまざまな理由によってメールが届かないという問い合わせがある
SendGrid メール配信プラットフォーム(SaaS) Web APIメール送信する Webhookを使ってメールのイベントを受け取れる SendGrid Client SendGrid SendGrid Webhook
API Gateway メール送信 HTTP POST Lambda DynamoDB
どんなイベントが受け取るか? https://sendgrid.kke.co.jp/docs/API_Reference/Webhooks/event.html
・管理画面からイベントデータがダウンロードできない ・管理画面から数千件までしか見ることができない ・どのメールがどういう理由でエラーになったか見つけるのが大変 なぜ、Webhookが必要?
AWS Lambdaはイベントの発生に応じてプログラムを実行する環境を提供する クラウドコンピューティングサービス ・AWSを利用している ・スパイクする ・必要なときだけイベントのログが見たい ・常時サーバー不要。コストを抑えたい なぜ、AWS Lambdaを選定したのか?
なぜ、他のランタイムに比べてGoを使うのか? 背景 ・LambdaはメインでNode.jsが使われています。LambdaといえばNode.js ・開発のメイン言語は99%がGo言語 ・Goはランタイムが1.xのみ (重要) ・ランタイム比較のベンチマーク結果が良好だった
Goはランタイムが1つ
None
None
Goは高パフォーマンスなのか?
ランタイム比較のベンチマーク OSSのベンチマークプログラムを試しました https://github.com/Aleksandr-Filichkin/aws-lambda-runtimes-performance 複数のランタイムをサポートしてますが、 Python3.9/Node.js14.x/Goを選択 参考にした記事 https://filia-aleks.medium.com/benchmarking-all-aws-lambda-runtimes-in-2021-cold-start-par t-1-e4146fe89385 ベンチマーク計測には、JMeterを使いました。 同時10ユーザー
3回リクエスト
None
ランタイム比較のベンチマーク結果 Node.jsよりは良い。Pythonは同等
ランタイム比較のベンチマーク 128MBより256MBのほうが良い
実際に運用してみた結果
SendGrid Client SendGrid SendGrid Webhook API Gateway メール送信 HTTP POST
Lambda DynamoDB ベンチマークの時と同じ構成
None
None
None
まとめ ・Node.jsに比べれば高パフォーマンス ・50ms or die の世界では使えない ・128MBより256MBのほうが良い傾向 さらにメモリ割り当て別で見たい場合は AWS公式で紹介されている「 aws-lambda-power-tuning」
Operating Lambda: パフォーマンスの最適化 – Part 2 ・コールドスタート対策はLambdaのProvisionedCouncurrencyを設定しだい
開発の始め方
公式ドキュメント:はじめの一歩 https://docs.aws.amazon.com/ja_jp/lambda/latest/dg/lambda-golang.html
Github https://github.com/aws/aws-lambda-go eventsフォルダに豊富にサンプルがあります!
API-Gateway x Lambda: 最初の一歩 aws-lambda-go/events/README_ApiGatewayEvent.md
API-Gateway x Lambda aws-lambda-go/events/apigw.go でRequest/Responseを知る
他のランタイムと同じ
その他:M1 Macを使っている人は注意
まとめ ・当分、Goはランタイムが1つのためメンテナンスが楽です ・他のランタイムに比べてもGoのパフォーマンスは良いです ・最初は、AWSの公式ドキュメントを読みましょう ・次に、Githubにあるソースコードのサンプルを読みましょう ・Request/Responseの構造体を読みましょう
ご清聴ありがとうございました