Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
サーバレス構成によるFitbitを使った 心拍数通知サービス
Search
Naomichi Yamakita
November 01, 2016
0
19
サーバレス構成によるFitbitを使った 心拍数通知サービス
Naomichi Yamakita
November 01, 2016
Tweet
Share
More Decks by Naomichi Yamakita
See All by Naomichi Yamakita
SRE が駆動するプロダクト品質と アーキテクチャ進化の仕組み
naomichi
0
140
今こそ聞きたい!ガバメントクラウド
naomichi
0
28
AWSにおける横断的なログ分析と コストの管理
naomichi
1
6.1k
失敗から始まるリアーキテクト: SREの実践例で見る改善の道筋
naomichi
0
770
プロダクト横断で可視化する ダッシュボードの開発
naomichi
0
360
第一回ライブラリ開発について考える会
naomichi
0
110
Serverless Application Repositoryでトイルを削減する
naomichi
0
330
SRE的観点から日常を振り返る
naomichi
0
1k
GMO Research Tech Conference 2023
naomichi
0
35
Featured
See All Featured
How GitHub (no longer) Works
holman
316
140k
Reflections from 52 weeks, 52 projects
jeffersonlam
355
21k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Building Adaptive Systems
keathley
44
2.8k
Making Projects Easy
brettharned
120
6.5k
Unsuck your backbone
ammeep
671
58k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.3k
Code Reviewing Like a Champion
maltzj
527
40k
Statistics for Hackers
jakevdp
799
230k
Building Applications with DynamoDB
mza
96
6.8k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
46
7.8k
Transcript
サーバレス構成によるFitbitを使った 心拍数通知サービス 2016/11 Naomichi Yamakita
GitHub dokidoki watch https://github.com/naomichi-y/dokidoki_watch
LINE Messaging API
Overview • Fitbitを装着して心拍数を計測 • Fitbit APIを使った心拍数の取得 • 心拍数が閾値を超えた場合にLINEのトークルームへ通知
Fitbit console using API Gateway
Export RDS to Spreadsheet
System component • Fitbit API • LINE Messaging API •
AWS ◦ Lambda
Architecture
Storage Storage type Performance Aggregate Scale out Note Amazon RDS
△ ◎ ◯ お手軽 Amazon DynamoDB ◎ ▲ ◯ 集計が面倒 MongoDB ◯ ◯ △ 構築が面倒 今回はお試し実装なのでストレージはRDS (MySQL) を採用
Coding • NodeJS 4.3 • ES6
Development environment • Docker ◦ Application container (NodeJS / Gulp)
◦ Database container • Docker compose
Node module (1/2) • aws-serverless-express ◦ 2016年10月、AWS Blogで発表 ◦ API
Gateway、Lambda (Express)、CloudFormationを利用した サーバレスアプリケーション構築パッケージ ◦ 2016年11月にはAWS SAM (AWS Serverless Application Model) を発表
Node module (2/2) • bluebird ◦ Promiseのラッパー。unhandledRejectionを捕捉可能 • eazy-logger •
fitbit-node • moment-tz • sequelize ◦ ORM • gulp
Using environment variables on lambda • 2016年11月 Lambdaが正式に環境変数をサポート ◦ http://qiita.com/naomichi-y/items/5c7c577f968d3c00a694
• 以前までは環境変数の利用が面倒だった ◦ API GatewayからLambdaにステージ環境変数を渡す ◦ LambdaのDescriptionに環境変数を定義してアプリケーショ ン側でパース ◦ 環境変数ファイルをCIで動的生成
Performance of Lambda 実行環境 (ap-northeast-1) 静的ページの表示 補足 EC2 16ms VPC
Lambda (コンテナ生成直後) 326ms No VPC Lambda 63ms No VPC
Lambda • 速度にばらつきがある • フロントがAPI Gatewayであれば、APIキャッシュや非同期処理 設計を検討 • 出力ログが自動でCloudWatch Logsに転送される
• 1ヶ月辺りの無料枠が大きい ◦ 1,000,000件のリクエスト ◦ 400,000GB/secのコンピューティング
Fitbit API • 常に同期するよう設定していても安定していない • APIが微妙 ◦ 1時間辺り150回のリクエスト制限 ◦ 心拍数を長期間分(1分単位の心拍数を1日分)取得する
際、1レスポンスで全件返される ◦ 心拍数は日をまたいでデータを要求できるが、結果セット に時刻しか含まれないため日付計算が必要