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時間くらい、設定に悩んだけど、期待どおりに動作するようになった。