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
サーバレス構成によるFitbitを使った 心拍数通知サービス
Search
Naomichi Yamakita
November 01, 2016
0
16
サーバレス構成によるFitbitを使った 心拍数通知サービス
Naomichi Yamakita
November 01, 2016
Tweet
Share
More Decks by Naomichi Yamakita
See All by Naomichi Yamakita
AWSにおける横断的なログ分析と コストの管理
naomichi
1
4.3k
失敗から始まるリアーキテクト: SREの実践例で見る改善の道筋
naomichi
0
560
プロダクト横断で可視化する ダッシュボードの開発
naomichi
0
290
第一回ライブラリ開発について考える会
naomichi
0
81
Serverless Application Repositoryでトイルを削減する
naomichi
0
300
SRE的観点から日常を振り返る
naomichi
0
910
GMO Research Tech Conference 2023
naomichi
0
22
Deep dive into cloud design
naomichi
0
33
インフラを横断して可視化するダッシュボードの開発
naomichi
0
18
Featured
See All Featured
Building a Scalable Design System with Sketch
lauravandoore
461
33k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
656
59k
Mobile First: as difficult as doing things right
swwweet
223
9.5k
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
330
21k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
33
2.8k
Fashionably flexible responsive web design (full day workshop)
malarkey
406
66k
Designing on Purpose - Digital PM Summit 2013
jponch
117
7.1k
The Cult of Friendly URLs
andyhume
78
6.2k
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
32
2.2k
Intergalactic Javascript Robots from Outer Space
tanoku
270
27k
Being A Developer After 40
akosma
89
590k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
33
2.1k
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レスポンスで全件返される ◦ 心拍数は日をまたいでデータを要求できるが、結果セット に時刻しか含まれないため日付計算が必要