Slide 1

Slide 1 text

Cloud Functions on Firebase Hosting @k2wanko

Slide 2

Slide 2 text

Profile コキチーズ Twitter, GitHubはk2wanko Qiitaはkoki_cheese Firebase エンジョイ勢 お仕事はセキュリティエンジニア

Slide 3

Slide 3 text

Cloud Functions

Slide 4

Slide 4 text

Cloud Functions - Event駆動のPaaS - HTTP,PubSub,Cloud StorageのEventを受け取って実行される - Beta - Node.jsをサポート - Goサポートも開発中(?) https://github.com/GoogleCloudPlatform/cloud-functions-go

Slide 5

Slide 5 text

Cloud Functions for Firebase

Slide 6

Slide 6 text

Cloud Functions for Firebase - Cloud Functions受け取れるEventにFirebaseのイベントも追加したもの - Realtime Database, Analytics, Auth, Storage のイベントを受け取れる - Eventの追加をコードベースで追加できる どういうことができるのか? - RealtimeDBに書き込まれたイベントでメッセージの翻訳をすることができる - Storageに保存されたイベントで画像をwebpに変換する - HTTPトリガーでFirebase Custom Authのbackendにできる - ユーザが削除されたイベントで関連データを削除する - etc examples: https://github.com/firebase/functions-samples

Slide 7

Slide 7 text

Firebase Hosting

Slide 8

Slide 8 text

Firebase Hosting - 静的ファイルを配信できるサービス - 設定でSingle Page Application用のrewriteなどもできる - HTTP2対応 - Link headerを付けることでServer Pushも可能 - 高速なCDNがついてる - 独自ドメインを登録するだけで無料で証明書を発行してくれる <- 最高

Slide 9

Slide 9 text

Cloud Functions on Hosting

Slide 10

Slide 10 text

Cloud Functions on Hosting - Hostingで返すコンテンツを Cloud FunctionsのHTTPトリガーで動的に生成できる

Slide 11

Slide 11 text

つまりどういうことか?

Slide 12

Slide 12 text

HostingでServer Side Renderingができる!!

Slide 13

Slide 13 text

SSRの必要性 については次の記事を参考にしてください http://www.publickey1.jp/blog/17/server_side_renderingserver_side_rendering_ng- japan_2017.html 要約 - SEOのために - Performanceのために 課題 - 現状Node.jsでしかSSRできない - SSRの負荷はコストが高い - Node.jsなのでサーバ台数を増やさなければならない

Slide 14

Slide 14 text

過去の挑戦 - GAE/Goでやろうとした。 - 無料で抑えるには当時はGAE/Goが最適と判断 - GoでNode.jsのAPIを色々頑張らないといけないので辛すぎる - http://qiita.com/koki_cheese/items/13426921f0b5861725e5

Slide 15

Slide 15 text

Cloud Functions を使うと - 現状Node.jsでしかSSRできない - FunctionsはNode.jsが使える - SSRの負荷はコストが高い - Vue.jsを使えばブロッキングしないので CPUを効率的に使える - Node.jsなのでサーバ台数を増やさなければならない - Functionsはスケールする(あなたの予算の限り...)

Slide 16

Slide 16 text

DEMO https://goo.gl/SiwKzo

Slide 17

Slide 17 text

Tips

Slide 18

Slide 18 text

リアルタイムデータベースの セキュリティルール辛い

Slide 19

Slide 19 text

Firebase Bolt使いましょう - セキュリティルールを記述するための言語 - TypeScriptで書かれている - コメントが書ける - コンパイルするとJSONを吐き出す - https://github.com/firebase/bolt

Slide 20

Slide 20 text

CDNのコンテンツは いつ配信されるのか?

Slide 21

Slide 21 text

CDNについて キャッシュを返すかどうかは次の項目が一致するかどうかを見る - Hostname - Path - Query - Varyで指定されたHeaderの値 Varyの初期値はAccept-Encoding, Authorization, Cookieがセットされているので 一般的なユーザー識別の方法を取っていれば 別のユーザーにコンテンツをCDNが配信してしまうということは起きにくい

Slide 22

Slide 22 text

Enjoy Function!

Slide 23

Slide 23 text

Reference - https://github.com/k2wanko/vue-hackernews-2.0/tree/firebase-hosting - https://firebase.google.com/docs/ - https://firebase.google.com/docs/functions - https://firebase.google.com/docs/hosting/functions