[検証]SvelteKitで作成したサイトをCloud RunにデプロイしてFirebase Hostingで配信してみた

2023/05/15に公開

はじめに

先日プレビュー版としてリリースされた Firebase Hostingを使ったCloud Runの動的コンテンツの配信 をSvelteKitを使って実践した記録です。

https://twitter.com/steren/status/1656339542570565633

※ Cloud SDKの設定は完了して gcloud コマンドが使える前提です
※ SvelteKitの作成部分は割愛しています
  -> こちらを利用しています https://kit.svelte.jp/docs/creating-a-project

やってみてどうだったか?

  • Cloud SQLなど使ったCloud Runで構築したサイトを気軽にカスタムドメインとCDNを使って配信できるようになる
    • 今までなら、Cloud Load Balancerを経由してやらないとできなかった点ができるようになった
    • コスト的な面でも、Firebase Hostingであれば転送量も 360 MB/日 が無料
  • 統合の設定自体も特に詰まることもなく、サクサク進みました。

https://firebase.google.com/pricing?hl=ja#hosting

サンプルコード

実際に使ったコードはこのリポジトリに置いています。
https://github.com/yamato-sorariku/sveltekit-run-hosting-example

SvelteKitのコンテンツはデモをそのまま利用しました。
デプロイ用の設定は以下を利用しています。
https://kit.svelte.jp/docs/adapter-node

Cloud Buildを使ったイメージの作成とデプロイ

以下のコマンドで Dockerfilecloudbuild.yaml の内容でビルド/デプロイを実行

 gcloud builds submit .

https://github.com/yamato-sorariku/sveltekit-run-hosting-example/blob/97b7fba2d5ef4492fd218f6c64dbb20f6ffc2a7d/cloudbuild.yaml

https://github.com/yamato-sorariku/sveltekit-run-hosting-example/blob/97b7fba2d5ef4492fd218f6c64dbb20f6ffc2a7d/Dockerfile

デプロイされたCloud Runの統合機能から Firebase Hosting と接続

任意のサブドメインを設定して送信

設定が無事に完了すると、以下のような表示になります。

カスタムドメインの設定

このままでもアクセスできるようになるのですが、自分が持っているドメインでアクセスしたいと思います。
なので Firebase Hosting のカスタムドメインを使って設定します。


案内に沿ってドメイン所有者の確認・DNSへのAレコードの設定

カスタムドメインを使ったサイトが公開完了

※ 証明書の反映までは少し時間がかかります(このときは30分ほど待ちました)

困った点たち

SvelteKitをCloud Runにデプロイする際に起きたこと

Cloud BuildでDocker imageをビルドしていたところ、このようなエラーに遭遇。

Error: The service was stopped: write EPIPE

余計なファイルを上げてしまっていたのが原因と推測し .gcloudignore を書いてリトライしたところ無事にビルドとデプロイが完了した。

※ 以下のコマンドを実行すると、Cloud Buildに送られるファイルが確認できる

gcloud meta list-files-for-upload

https://cloud.google.com/sdk/gcloud/reference/topic/gcloudignore#ADVANCED-TOPICS

Cloud Runの掃除中に起きたこと

Firebase Hostingとの接続の削除が失敗する
ただ、Firebase Consoleで見ると削除できていたので、リソース自体はちゃんと消えていた。
なので、そのまま気にせずCloud Runも削除実施。(きっとだいじょうぶ)

Discussion