SlideShare ist ein Scribd-Unternehmen logo
1 von 72
Downloaden Sie, um offline zu lesen
Riotでサーバーレス
にした話
@aggre
WWD JAPAN.com
INFAS PUBLICATIONS, INC.
Frontend
Backend
Git / CI
Collaboration
Technology stack
What
サーバーレスとは
インフラを任せる
スケーリングを任せる
スケーリングを任せる
彡
実行時間だけで課金
実行時間だけで課金
彡
Why
なぜサーバーレスなのか
パフォーマンス
可用性
コスト All OK!
パフォーマンス
可用性
コスト
整備不要
ベンダーロックイン
開発者は
プログラミングに集中
How
どうやるのか
サーバーレスの
制約
プログラムと状態
は完全に切り離す
あるべき姿です
セッションもCookieも
使えない
これもHTTPのあるべき姿です
できれば
?
サーバサイドは
APIだけ書いていたい
ビューロジックがサーバに混ざる
とアレですしね
そこで...
フロントエンドは一切のコードを
サーバから排除して S3 に集約
バックエンドは一切のテンプレート
を排除して API を返すことに集中
実際の話
WWD JAPAN.com
Before
サーバーレスにする前
SERVER
SERVER
SERVER
SERVER
MovableType から
謎の rsync
EC2 に全ファイル。
スケーリングできない
からよく停止する
After
サーバーレスにしたあと
SERVER
SERVERLESS
SERVERLESS
SERVERLESS
SERVERLESS
SERVER
※
Aurora で
フルマネージド化
Aurora はフルマネージドだがサーバーレ
スといえるほど高速なスケーリングはでき
ないのと、実行時間課金ではない
EC2 は管理画面だけ
Lambda の API から
RDS に接続
API Gateway で HTTP リクエス
トから Lambda を呼び出す
S3 に html, js, css
CloudFront の Error Page を
index.html にする
/dist/*
/*
...
/shop/123
S3
index.html
存在すればそのまま
存在しなければ
200
200
404
<app></app>
<script src="/dist/bundle.js"></script>
index.html
404 / SSR
404が返せない問題
Bot/非Bot不明問題
に対応する
API Gateway の
プロキシ統合で
Lambda をプロキシ
サーバにする
Lambda で SSR して、返ってきた HTML を
元に適宜ステータスコードを設定
プロキシ統合によって UA などのヘッダで
処理を自由に変えることが可能
いつか
CloudFrontのなかで
UAの振り分け
できないかなぁ
Riot
SPA
コンポーネント構成
Atomic Design
コンポーネントを分類する
Pages
Templates
Organisms
Molecules
Atoms
名前と中身が
一致しない
Screens
Areas
Widgets
Compornents
Modules
Pages
Templates
Organisms
Molecules
Atoms
Screens
Areas
Widgets
Compornents
Modules
Lifecycle
アプリケーションの動かし方
<app>Mount
<screen-xxx>Mount
URLアクションFlux
コンテキストストアの更新Flux
<app>
<div ref=”screens”></div>
<script>
( … )
</script>
</app>
app.tag
import riot from ‘riot’
import route from ‘riot-route’
import urlListener from ‘./my/libs/urlListener’
route( urlListener )
riot.mount( ‘app’ )
init.js
Flux
riot-observable
riot-control
flux
obseriot by me
Action with Obseriot
action.context.replace = {
handler: {
name: ‘action_context_replace’,
action: ( screen, id, url ) => [ screen, id, url ]
} }
Store with Obseriot
store.context = {
state: {},
handler: {
name: ‘store_context’,
action: () => store.context.state
} }
Dispatch Action with Obseriot
obseriot.notify( action.context.replace,
screen,
id,
url
)
Reduce Store with Obseriot
obseriot.listen( action.context.replace, ( s, i, u) =>
{
store.cotext.state = { screen: s, id: i, url: u }
obseriot.notify( store.context )
} )
<screen-xxx>Mount
URLアクションFlux
コンテキストストアの更新Flux
URLが変更されるたびに繰り返し
context, history, browser, windowSize,
user, posts, modal, menu, ad, ...
なるべく多くの状態をストアで管理
キャッチされない例外が発生したら
ストアのデータを送信すれば、
バグの改善につながる
window.onerror = msg => {
mySendFn( msg, getAllState() )
}
How much
いくらするのか
CloudFront
API Gateway
Lambda
S3
RDS
EC2
$3,703
Before
$6,737
After
$3,490
Now
CloudFront + API Gateway +
Lambda + S3
$773
インスタンス変えるの
サボっているだけ
CloudFront 3,732 GB
API Gateway 360.12 GB
Lambda 9,910,208.48 s
12,710,517 Request
S3 ...
Cost

Weitere ähnliche Inhalte

Was ist angesagt?

オフライン行動を支えるメール配送管理 at サイタ
オフライン行動を支えるメール配送管理 at サイタオフライン行動を支えるメール配送管理 at サイタ
オフライン行動を支えるメール配送管理 at サイタYosuke TOMITA
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Alisa Sasaki
 
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有するkazuki matsumura
 
スタートアップにjoinして安心して眠るためにやった5つのこと
スタートアップにjoinして安心して眠るためにやった5つのことスタートアップにjoinして安心して眠るためにやった5つのこと
スタートアップにjoinして安心して眠るためにやった5つのことMasashi Ogawa
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活をRyunosuke SATO
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Takuro Sasaki
 
インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話雅也 山本
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことbitbank, Inc. Tokyo, Japan
 
ApplicationTemplateのススメ
ApplicationTemplateのススメApplicationTemplateのススメ
ApplicationTemplateのススメTakafumi ONAKA
 
Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK YutoNishine
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースTakafumi ONAKA
 
KubernetesでPHPを動かした話
KubernetesでPHPを動かした話KubernetesでPHPを動かした話
KubernetesでPHPを動かした話gree_tech
 
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたkazuki matsumura
 
Realm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみてRealm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみてDaisuke Nagata
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Isamu Suzuki
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless PluginsTerui Masashi
 
Node.js version16の新機能
Node.js version16の新機能Node.js version16の新機能
Node.js version16の新機能Masaki Suzuki
 

Was ist angesagt? (20)

オフライン行動を支えるメール配送管理 at サイタ
オフライン行動を支えるメール配送管理 at サイタオフライン行動を支えるメール配送管理 at サイタ
オフライン行動を支えるメール配送管理 at サイタ
 
Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話Spring I/O 2017での拡張のお話
Spring I/O 2017での拡張のお話
 
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する普段Reactを触ってる僕が Angularを触ってみた感想を共有する
普段Reactを触ってる僕が Angularを触ってみた感想を共有する
 
スタートアップにjoinして安心して眠るためにやった5つのこと
スタートアップにjoinして安心して眠るためにやった5つのことスタートアップにjoinして安心して眠るためにやった5つのこと
スタートアップにjoinして安心して眠るためにやった5つのこと
 
Rails Tokyo 035 Cucumber
Rails Tokyo 035 CucumberRails Tokyo 035 Cucumber
Rails Tokyo 035 Cucumber
 
capybara で快適なテスト生活を
capybara で快適なテスト生活をcapybara で快適なテスト生活を
capybara で快適なテスト生活を
 
Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発Swaggerで始めるモデルファーストなAPI開発
Swaggerで始めるモデルファーストなAPI開発
 
インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話インフラ部門で働くCプログラマの話
インフラ部門で働くCプログラマの話
 
Node.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたことNode.jsアプリの開発をモダン化するために取り組んできたこと
Node.jsアプリの開発をモダン化するために取り組んできたこと
 
ApplicationTemplateのススメ
ApplicationTemplateのススメApplicationTemplateのススメ
ApplicationTemplateのススメ
 
Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK Azure PlayFab Unity SDK vs C# SDK
Azure PlayFab Unity SDK vs C# SDK
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
 
KubernetesでPHPを動かした話
KubernetesでPHPを動かした話KubernetesでPHPを動かした話
KubernetesでPHPを動かした話
 
React Nativeでお絵描きしてみた
React Nativeでお絵描きしてみたReact Nativeでお絵描きしてみた
React Nativeでお絵描きしてみた
 
Realm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみてRealm,rx swift,repro を使ってみて
Realm,rx swift,repro を使ってみて
 
CONBU API の開発
CONBU API の開発CONBU API の開発
CONBU API の開発
 
Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術Node.jsに縁のない職場でnode.jsを使い始める戦術
Node.jsに縁のない職場でnode.jsを使い始める戦術
 
Concrete5×さくら
Concrete5×さくらConcrete5×さくら
Concrete5×さくら
 
The Internal of Serverless Plugins
The Internal of Serverless PluginsThe Internal of Serverless Plugins
The Internal of Serverless Plugins
 
Node.js version16の新機能
Node.js version16の新機能Node.js version16の新機能
Node.js version16の新機能
 

Ähnlich wie Riotでサーバレスにした話

Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について真吾 吉田
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 bitbank, Inc. Tokyo, Japan
 
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編Masayuki KaToH
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Taisuke Oe
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!史識 川原
 
only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?Yuta Suzuki
 
AWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャAWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャ真吾 吉田
 
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャKoki Kumagai
 
Azure serverlesssummit2018
Azure serverlesssummit2018Azure serverlesssummit2018
Azure serverlesssummit2018Tsukasa Kato
 
Aiming のクラウド採用基準
Aiming のクラウド採用基準Aiming のクラウド採用基準
Aiming のクラウド採用基準Takahiro Hozumi
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチKazuya Sugimoto
 
俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編
俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編
俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編Masayuki KaToH
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏Daisuke Ikeda
 
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)Naoki (Neo) SATO
 
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in FargateDeploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargatebitbank, Inc. Tokyo, Japan
 
俺とGitHubとcodeシリーズ
俺とGitHubとcodeシリーズ俺とGitHubとcodeシリーズ
俺とGitHubとcodeシリーズMasayuki KaToH
 

Ähnlich wie Riotでサーバレスにした話 (20)

Azureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流についてAzureをフル活用したサーバーレスの潮流について
Azureをフル活用したサーバーレスの潮流について
 
仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践 仮想通貨取引所 bitbank の IaC の導入と実践
仮想通貨取引所 bitbank の IaC の導入と実践
 
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
俺とサーバレスアーキテクチャ Aws cognito + aws api gateway 編
 
Real World Android Akka - 日本語版
Real World Android Akka - 日本語版Real World Android Akka - 日本語版
Real World Android Akka - 日本語版
 
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!Unityゲームにオンラインランキングとゴースト機能を追加しよう!
Unityゲームにオンラインランキングとゴースト機能を追加しよう!
 
only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?only ip whitelist at cloudfront is ok?
only ip whitelist at cloudfront is ok?
 
AWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャAWSによるサーバーレスアーキテクチャ
AWSによるサーバーレスアーキテクチャ
 
Azure Bot Service で CI/CD on Azure Dev Ops
Azure Bot Service で CI/CD on Azure Dev OpsAzure Bot Service で CI/CD on Azure Dev Ops
Azure Bot Service で CI/CD on Azure Dev Ops
 
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
ひとつひとつ組み上げてみていくビデオチャットアプリのアーキテクチャ
 
Serverless for VUI
Serverless for VUIServerless for VUI
Serverless for VUI
 
【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう【初心者向け】API を使ってクラウドの管理を自動化しよう
【初心者向け】API を使ってクラウドの管理を自動化しよう
 
Azure serverlesssummit2018
Azure serverlesssummit2018Azure serverlesssummit2018
Azure serverlesssummit2018
 
Aiming のクラウド採用基準
Aiming のクラウド採用基準Aiming のクラウド採用基準
Aiming のクラウド採用基準
 
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
#decode19 #MW04 誰のための API? Azure デベロッパーにもエンド ユーザーにも嬉しいAPI エコシステム活用アプローチ
 
俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編
俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編
俺とサーバレスアーキテクチャ Aws cognito + s3 + ses + lambda編
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
OSC 2020 Fukuoka IT運用自動化を支援する「運用レコメンドプラットフォーム」実現の舞台裏
 
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
[Serverless OpenHack Tokyo] Azure Serverless (Japanese)
 
Deploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in FargateDeploy TypeScript with CodePipeline in Fargate
Deploy TypeScript with CodePipeline in Fargate
 
俺とGitHubとcodeシリーズ
俺とGitHubとcodeシリーズ俺とGitHubとcodeシリーズ
俺とGitHubとcodeシリーズ
 

Riotでサーバレスにした話