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

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

1.4 カスタムドメインの設定
カスタムドメインは、Hostingに対して実施する。
FirebaseコンソールのHostingから、対象のHosgingを選択し、カスタムドメインを追加ボタン押下
後は、ドメインのDNSに指示に従い、Aレコードの登録などを実施

2.実行確認する
カスタムドメイン、+ /api/test で想定どおり処理された結果が表示された!

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

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

