Updated: June 3, 2019 GCP のサーバーレスで Web アプリ開発
自己紹介 Kazuu (かずー) @kazshinohara Google Cloud のカスタマーエンジニア デジタル系エンタープライズのお客様を担当 得意分野はサーバーレスや DevOps など 趣味は猫と写真と旅行
そもそもサーバーレスって No Infra Management Fully Managed Security Pay only for usage
GCP のサーバーレスは フルスタック Database & Storage Data Analytics ML & AI Compute Smart assistants & chat Messaging DevOps
Web アプリケーションを開発する際に考えること 1. 2. 3. 4. 5. 6. コンピュート アプリをどこで動かすか データベース 非同期処理 静的コンテンツ コード管理 ビルド デプロイ モニタリング ロギング APM
Web アプリケーションを開発する際に考えること 1. 2. 3. 4. 5. 6. コンピュート データベース 非同期処理 静的コンテンツ コード管理 ビルド デプロイ モニタリング ロギング APM
コンピュート
GCP のサーバーレスコンピュート Functions Apps Containers NEW! Cloud Functions App Engine Cloud Run
サーバレスコンピュート 公式使い分けチャート https://cloud.google.com/serverless-options/?hl=en
Cloud Functions 01
Cloud Functions イベントドリブンなサーバーレス コンピュート プラットフォーム {} イベントドリブン サーバーレス サポートランタイム HTTP Firestore Pub/Sub Cloud Scheduler Cloud Storage Firebase サーバー管理なし Node.js 6, 8, 10beta Python 3.7 Go 1.11, 1.12alpha Java 8alpha スケールアウトが高速 ゼロにまでスケールイン パッチなどの更新なし 使った分だけ支払い
Cloud Functions ユースケース例 Cloud Storage ①画像を アップロード Cloud Functions ②関数を トリガー Cloud Vision API ③画像のラベリング
使い所と気にすべき制約 使い所 気にすべき制約 Pub/Sub and/or Cloud Storage を使って 関数レベルの粒度 いる場合 イベント経由 ランタイム環境は管理したくない ランタイム言語に縛り データ処理 (ETL) サービス間連携
App Engine 02
App Engine standard environment 高いスケーラビリティを持つサーバーレス Web アプリケーション {} 管理が容易 開発しやすい サポートランタイム サーバー管理なし アプリのコードに集中できる Java スケールアウトが高速 バージョニング Python ゼロにまでスケールイン トラフィックスプリット Go パッチなどの更新なし PHP Node.js Ruby alpha
App Engine ユースケース例 Front End App App Engine Dynamic data Cloud Firestore In-memory cache Cloud Memorystore Cloud Tasks Back End App App Engine
App Engine のランタイム スタンダード スタンダード 第 2世代 フレキシブル Python 2.7 Java 8 PHP 5.5 Go 1.9 and Go 1.11 Python 3.7 PHP 7.2 Node.js Go 1.12 (beta) Ruby (alpha) Node.js, Ruby, Java, Python, Go, PHP,.NET & カスタムコンテナイメージ サンドボックス化されたプロセスとして動作 マネージドのVM上で動作 GAE 独自の API + GCP のAPI GCP の API を直接呼び出し バイナリモジュールや使えるライブラ リに制約がある エクステンションやバイナリ ライブラリなど自由に利用可能
App Engine で実現できる柔軟なデプロイ ブルーグリーン デプロイメント カナリア リリース A / B テスト example.com example.com example.com 一気に切り替え 最初は少数だけ v1 v2 v1 v2 並行稼働 A B
使い所と気にすべき制約 使い所 HTTP/S request-response ステートレスなアプリケーション 急激なトラフィック増に耐えないと 気にすべき制約 スタンダード Runtimes for Python, Java, PHP, Go, Node HTTP/S only いけないアプリケーション フレキシブル Docker の制約を継承 トラフィックが少ないサイトには不向き
Cloud Run 03
Knative open source building blocks for serverless on Kubernetes
Cloud Run 高速なデプロイ サーバーレス ネイティブ 高いポータビリティ ステートレスなコンテナ 言語やライブラリの制約なし 数秒でデプロイし URL を付与 管理するサーバーはなし コードに集中 高速に 0 to N スケール きっちり使った分だけお支払い どこでも同じ Developer Experience フルマネージでも GKE のクラスタ上でも Knative の一貫した API の一貫性 ロックインの排除
2 つの Cloud Run Cloud Run Cloud Run on GKE 完全にサーバーレス 管理するクラスタ無し 使った分だけお支払い GKE のクラスタ上でサーバーレス 体験 費用は GKE のクラスタに含まれ る
Cloud Run ユースケース例 メッセージの処理 メッセージの取得 IoT devices Http Webhook Push 重複排除 デコード データ判別 サービング用データ準備 スケジュール データのロード Webとして サービング
使い所と気にすべき制約 使い所 気にすべき制約 ステートレス コンテナを必ず使わないといけない HTTP/S request-response workloads ビルドプロセスを決めないといけない スパイクが多い 読めないなど Specific なランタイム要件や依存性
データベース
GCP のマネージド データベースサービス In-memory Non-relational Relational Data warehouse Cloud Memorystore Cloud Firestore Cloud Bigtable Cloud SQL Cloud Spanner BigQuery Managed Redis Serverless, scalable document store Low latency, scalable wide column store Managed MySQL & PostgreSQL Scalable relational database Enterprise data warehouse
https://cloud.google.com/storage-options/?hl=ja
GCP のマネージド データベースサービス In-memory Non-relational Relational Data warehouse Cloud Memorystore Cloud Firestore Cloud Bigtable Cloud SQL Cloud Spanner BigQuery Managed Redis Serverless, scalable document store Low latency, scalable wide column store Managed MySQL & PostgreSQL Scalable relational database Enterprise data warehouse
Cloud Firestore 01
Cloud Firestore NoSQL データベース 強整合性 高い可用性 マルチリージョンで 99.999% リージョナルで 99.99% 2 つのモード ネイティブモード (Realtime) Datastore モード
Firebase SDK によるサポート Firebase Auth Security Rules Cloud Functions App + Client SDKs Cloud Firestore Firebase Hosting
リアルタイムにデータを同期 データに変更があった時 リ アルタイムに近い速度でデー タを同期 マルチユーザー向 けのモバイルアプリに最適
Cloud Firestore のデータ構成 My First Note name: "Cloud Firestore について" description: "Cloud Firestore はフルマネージドな NoSQL データベースです"... My Other Note name: "関連資料" description: "Cloud Firestore の関連資料"...
Cloud Firestore のユースケース例 Firebase Auth Authentication Event Info retrieval ios Custom API Writes Android Static content Real time updates Web Writes 3rd Party Event Store
Cloud SQL 02
Cloud SQL フルマネージドのリレーショナルデータベース MySQL と PostgreSQL SQL Server(Alpha) をサ ポート 高いパフォーマンス 64 コア 400GB まで瞬時にアップグレード可能 高可用性構成で99.95%
高可用性構成 ( PostgreSQL の場合) プライマリインスタンスとセカン ダリインスタンスを異なるゾーン に配置 リージョナル永続ディスクを使 い全ての書き込みを同期 レプ リケーション プライマリインスタンスが正常 な状態でなくなると セカンダリ インスタンスが昇格 フェイルオーバーはほぼ 60 秒 以内に行われる
Cloud SQL への接続 接続パス パブリック IP インターネットを経由し どこから でもアクセス可能 プライベート IP Virtual Private Cloud (VPC) を 使いプライベートアクセス 認証 Whitelisting IP 接続を許可する IP のリストを作成 許可された SSL 証明書 クライアントからの接続を許可する SSL 証明書 Cloud SQL プロキシ アプリからはローカル接続の認証 に見える セキュアにインスタンス にアクセス
03 Cloud Spanner
Cloud Spanner グローバルに分散され 強整合性を備えたデータ ベース サービス リレーショナル データベースの構造と非リレーショナ ル データベースの水平スケーラビリティを兼ね備え る
Cloud Spanner とは何か リレーショナル セマンティック スキーマ ACID トランザクショ ン SQL クエリ + 水平スケール 高可用性 99.999% SLA フルマネージドで水平スケーリング
RDB と非 RDB 両方の特徴を持っている
使い所と気にすべき制約 使い所 リレーショナルなデータ 高いスケーラビリティが求めら れるアプリケーション 高い可用性要件を持った アプリケーション 気にすべき制約 既存 DB との互換性 独自のテーブル設計が必要 リージョン間レプリケーションの 提供エリア
非同期処理
Cloud Tasks マイクロサービス間の非同期タスク向けキューイングシステム 信頼性の高いタスクのオフロード フルマネージドのタスクキュー: 長時間の非同期タスクも確実にディスパッチ インフラ管理 なし 使った分だけお支払い レート制御 と 再試行 必要なスループットに合わせてレート制御 や 再試行の設定が可能 HTTP/S Auth (IAM) を使った柔軟なタスクルーティング GCP 内外のサービスに対してセキュアにタスクをディスパッチ
タスクをスケジュールして実行 New user signup 30-day reminder 30 days later 'schedule_time': '2019-05-11T00:00:00' sendemail function
レートの制御 Dispatch 10 tasks/s 'max_dispatches_per_second': '3' Dispatch 3 tasks/s
タスクの再試行 Delay tolerant ML model training task ML model training task Executed every night 'max_attempts': '3' 'min_backoff': '600' [wait 10 mins to retry] 'max_retry_duration': '1800' [attempt for 30 mins] Machine Learning model training service
NEW! HTTP/S Auth (IAM) ターゲット NEW! User login service HTTP/S Google Cloud Functions Image Upload Service User submits async task request GKE: Google Kubernetes Engine OAuth/OIDC JWT Translation service Cloud Run and Cloud Run on GKE User profile service On Prem Server
静的コンテンツ
Cloud Storageを使った静的コンテンツ配信 Static files Cloud Storage 一般公開されたものはデフォルトで 3600sec の Cache-Control が設定される エッジキャッシュされる Front End App App Engine Dynamic data Cloud Firestore In-memory cache Cloud Memorystore Cloud Tasks Back End App App Engine
まとめ GCP のサーバーレスを活用することでインフラ管理のないモダンな Web アプリケーション開発が可能 コンピュートもデータベースも特徴的なサービスが複数ある 開発要件 に合わせて適材適所するのがオススメ モニタリング ロギング ビルド デプロイなどのサービスもあるので や ろうと思えば GCP で開発 運用を完結することも
Thank you