Appearance
CDN と統合されたフルマネージドな環境に Single Page Application (SPA) を構築する
概要
このアーキテクチャで達成できる要件
- フルマネージドなサービスを利用したい
- グローバル CDN を利用してコンテンツを高速に配信したい
構成図
構成説明
- Firebase Hostingにフロントエンドアプリケーション、もしくは静的コンテンツをデプロイします。
- Firebase Hostingは全世界のCDNサーバーにアップロードしたコンテンツを分配し、CDN網を構築します。これによりユーザが世界のどこからアクセスしても一番近いCDNサーバーよりコンテンツ配信されます。
- Firebase Hosting にデプロイされるアプリケーション用に Firebase で生成されるドメインに加えて、カスタムドメインを使用するために、Cloud DNS の CNAME レコードを作成します。
- なお、Cloud DNS のゾーンは作成されないため、作成済みの Cloud DNS ゾーンを使用してください。
処理フロー
- アプリケーションのカスタムドメインの FQDN に対する HTTPS リクエストを、Firebase Hosting が処理する。
- Firebase Hostingはユーザから最も近い距離にあるCDNサーバーから静的コンテンツを返送する。
他の方式との比較
Cloudflare
静的コンテンツの配信を実現するサービスとして、Firebase Hostingの他にCloudflareを使用する選択も考えられます。
Firebase Hostingは以下の場合に適しています。
- 他のGoogle/Firebaseサービスとフロントエンドアプリケーションを連携させる場合。
- 他のGoogle/Firebaseサービス(Firestore、Cloud Functions、Firebase Authentication など)をフロントエンドアプリケーションと連携させる場合、シームレスな連携が可能です。
- 開発初期段階、PoC検証、簡単なアプリケーションをデプロイする場合。
- Firebase Hostingは複雑な設定をしなくてもコンテンツをアップロードするだけで利用できるため、開発初期段階や PoC、簡単なアプリケーションを試す場合に適しています。
- 他のGoogle/Firebaseサービスとフロントエンドアプリケーションを連携させる場合。
Cloudflareを用いた方式は、以下の場合に適しています。
- 冗長性やセキュリティ構成を細かくカスタマイズしたい。
- CloudflareではFirebase Hostingより細かいセキュリティや冗長性の設定が可能です。セキュリティ要件の厳しいアプリケーション、大規模な利用が見込まれるアプリケーションに適しています。
- 冗長性やセキュリティ構成を細かくカスタマイズしたい。
AssemblyLine 構成
このアーキテクチャでは、以下の AssemblyLine が生成されます。
GCP Frontend
- Firebase Hostingにアプリケーションをデプロイする。
GCP Frontend
この AssemblyLine は以下の Pipeline から構成されます。
deploy
- フロントエンドアプリケーション用のクラウドリソースをデプロイする。
publish-site
- Firebase Hosting のサイトにアプリケーションをデプロイする。
Architecture Decision Records
Cloud DNSを利用して独自ドメインを設定する
Context
- Firebase Hostingでは、サイトが作成されると自動生成ドメインが提供されます。
- 自動生成ドメインには、サイトの作成時に指定するサイトIDが使用されますが、サイトIDはFirebase内でグローバルに一意である必要があるため、使用したいサイトIDがすでに他のサイトで使用されていて使用できない可能性があります。
Decision
- Firebase Hostingで自動生成されたドメインに対して、Cloud DNSを利用して別名の独自ドメインを設定します。
- 公開するアプリケーションに対して任意のドメインを設定することで、他のFirebase HostingサイトとのサイトIDの重複を気にすることなく、ブランドイメージの統一やユーザ体験の向上を達成できます。
非機能要件
可用性
冗長化構成
- Firebase Hostingではトラフィックが増えてもスケーリングが自動で行われるため、急激なアクセスの増加にも対応できます。
運用・保守性
バックアップ
- Firebase Hostingでは、Firebase Console を用いることで、過去にリリースしたバージョンにロールバックできます。
保守
- Firebase Hosting はマネージドサービスのため、サーバーの保守は不要です。
- カスタムドメインに対する SSL 証明書は Firebase Hosting によって作成・管理されます。
セキュリティ
アクセス制限
- フロントエンドアプリケーションに対するアクセス制限機能は提供しません。
- アクセス制限を行う場合は、アプリケーション側でロジックを構築してください。
ログ
Firebase Hostingは、デプロイメントとエラーログを提供し、Firebase Consoleで確認できます。 収集されるログは以下の通りです。
- デプロイメントログ
- デプロイメントの成功、失敗
- デプロイしたファイル
- デプロイを実行したユーザ
- タイムスタンプ
他アクセスログなどもCloud Loggingと連携させることにより収集が可能です。 詳細は以下参考を参照してください。
Web からの攻撃対策
- フロントエンドアプリケーションに対するWebからの攻撃対策は提供しません。
- 対策をする場合は、アプリケーション側でロジックを構築してください。