Eng (なりたい)

はやく エンジニア になりたい

Firebase hosting + Cloud Run の機能を試していくよ!!

Firebase hosting + Cloud Run で Microservices のL7ロードバランシングができるみたいだったので試してみました!!

勢いでMicroserviceのサンプルAPIを作る

goa とかでやるとパッとできるよ(趣味)

goa.design

本編

ツールインストール

$ npm install -g firebase-tools
$ firebase login

Hosting

Cloud Run を使用した動的コンテンツの配信とマイクロサービスのホスティング  |  Firebase

以下を参考にリライトする Hosting 動作を構成する  |  Firebase

firebase.json”rewrites” を以下のように記述するとロードバランシングできます。

最低限のファイル

{
  "hosting": {
    "public": "",
    "rewrites": [
      {
        "source": "/get-hello**",
        "run": {
          "serviceId": "goa-microservice-sample",
          "region": "us-central1"
        }
      }
    ]
  }
}
$ firebase deploy

# hosting のみ選択

以下のように /get-hello へアクセスすると goa-microservice-sample/get-hello パスが呼び出される。

curl -H "Authorization: Bearer $(gcloud auth print-identity-token)" "https://<FIREBASE_DOMAIN>/get-hello?name=hoge"

ちなみに httpstat で計測してみると…

$ httpstat "https://<FIREBASE_DOMAIN>/get-hello?name=hoge"  -H "Authorization: Bearer $(gcloud auth print-identity-token)"

...

 DNS Lookup   TCP Connection   TLS Handshake   Server Processing   Content Transfer
[     5ms    |       5ms      |     20ms      |        6ms        |        1ms       ]
             |                |               |                   |                  |
    namelookup:5ms            |               |                   |                  |
                        connect:10ms          |                   |                  |
                                    pretransfer:30ms              |                  |
                                                      starttransfer:36ms             |
                                                                                 total:37ms

キャッシュにヒットした際のレスポンスのサンプルなのでパフォーマンスの参考にはしないでください。

キャッシュの動作は確認していないので以下のドキュメンとを読む。

キャッシュ動作の管理  |  Firebase HTTP キャッシュ  |  Web Fundamentals  |  Google Developers

まとめ

Firebase Hosting + Cloud Run で動的なコンテンツをホスティングできることが確認できた。 Firebase Hosting を利用することで 自動的に CDN が用いられる。(デフォルトでは動的コンテンツには適用されていないとドキュメントには記載されていたが、キャッシュされていた…) キャッシュや認証の仕様を確認していないので引き続き調査していきたい。