Google Cloud Functions に カスタムドメインを設定する

 

 

Google Cloud Functions に Express を適用できたので、APIとして呼び出せるようにしたい。。のだけれど、Functionsのメニューにカスタムドメインを設定できそうなメニューがない。。

google_cloud_functions_url

1.Google Cloud Functions にカスタムドメインを設定する

どうやら、Cloud Hosting の リライトを構成して実現するようだ

Express を導入したので、適当なAPIを実装したルーターを準備(下記 cocomoRouter ) したエンドポイントを作成する。

Globパターンマッチングを使用して、/api/** にマッチした場合、以下のFunctions (apiService) に飛ばすように設定する。

(最初、/api/** で、export  const api = functions.https.onRequest(app); に飛ばすようにしていたら、実際のパスが、/api/api/… などとなってしまい、うまく動かなかったので)

1.1 ExpressによるAPIのエンドポイント

index.ts

import * as functions from 'firebase-functions';
import * as express from 'express';
import cocomoRouter from './routes/cocomo';

const app: express.Express = express();

const router: express.Router = express.Router()
app.use(router);
app.use('/api/cocomo', cocomoRouter);

router.get('/api/test', (req, res) => {
    res.send('TEST!');
});

export const apiService = functions.https.onRequest(app);

 

1.2 firebase.jsonリライト設定

firebase.json に、リライトする設定を書く。

  • リライトのルールは、上から順に適用されるようなので順序が重要。
  • 今回はもともと存在していた、全て、index.html に流すルールの前に、apiに流すルールを追加
{
      : 省略
  "hosting": [
    {
       : 省略
      "rewrites": [
        {
          "source": "/api/**",
          "function": "apiService"
        },
        {
          "source": "**",
          "destination": "/index.html"
        }
      ]
    }
  ]
}

1.3 エミュレータで動作確認

で、この辺りの挙動の確認を行うのには、ローカルでエミュレータを起動し確認

$ firebase emulators:start

Firebase エミュレータ

 

1.4 カスタムドメインの設定

カスタムドメインは、Hostingに対して実施する。

FirebaseコンソールのHostingから、対象のHosgingを選択し、カスタムドメインを追加ボタン押下

後は、ドメインのDNSに指示に従い、Aレコードの登録などを実施

Hosting カスタムドメイン

2.実行確認する

カスタムドメイン、+ /api/test で想定どおり処理された結果が表示された!

カスタムドメイン APIテスト

 

Expressのルーターを作成したAPIの呼び出しも期待どおり動作!

API テスト呼び出し

2時間くらい、設定に悩んだけど、期待どおりに動作するようになった。

Follow me!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です