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
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォー...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
saicologic
April 23, 2022
Technology
1k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
[Go Conference 2022 Spring] GoとLambdaを使用した高パフォーマンスでサーバレスな マイクロサービスの開発と運用
Go Conference 2022 Spring 発表資料
https://gocon.jp/2022spring/sessions/a11-s/
saicologic
April 23, 2022
More Decks by saicologic
See All by saicologic
Goのアプリケーションをトレース して劇的に改善した話
saicologic
0
270
Other Decks in Technology
See All in Technology
多摩川(.dev)ランニング入門 / Tamagawa.dev#3
fujiwara3
3
440
Adaptive Warehouse を今すぐ導入すべき理由と迷ったときの判断基準
__allllllllez__
0
130
Bet AI Day 2026丨AIを「使う」から、AIが「働く」へ ― LayerXが進める「組織AI」の社会実装
layerx
PRO
3
2.9k
#jawssonic2026 あの時代が悪かった ~動かなかったSageMakerと共に迎えたイベント当日~
ktkn1129
0
140
2026-09-09 【sigma_ucj#1】Sigma を IaC 管理したい! / IaC for Sigma
civitaspo
0
100
全員がプロダクトへ向き合う組織を持続成長させるために——組織づくりのフライホイールと4象限 / The Flywheel Model and Four Quadrants for Organizational Design
hiro_torii
4
940
Amazon Quick on DesktopがIAM Identity Centerで動かない理由
yukiogawa
0
130
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
660
Where Is JetBrains AI Heading- — Central CLI, Air Alpha, and the Agentic Development Stack
x5gtrn
PRO
0
150
omasushiというライブラリを作った
polidog
PRO
0
170
WAF 運用改善の承認サイクル/SRE_BizReach_MIXI_1
visional_engineering_and_design
2
400
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
3
2k
Featured
See All Featured
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
120
120k
Designing for humans not robots
tammielis
254
26k
GraphQLとの向き合い方2022年版
quramy
50
15k
The Language of Interfaces
destraynor
162
27k
Raft: Consensus for Rubyists
vanstee
141
7.7k
Become a Pro
speakerdeck
PRO
31
6.2k
The Art of Programming - Codeland 2020
erikaheidi
57
14k
The B2B funnel & how to create a winning content strategy
katarinadahlin
PRO
1
510
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.9k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
490
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
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の構造体を読みましょう
ご清聴ありがとうございました