Firebase Cloud FunctionsのHTTPトリガーを使ってみる
前提
Blazeプラン(従量課金)であること。※Sparkプランだとデプロイでエラーになります
Error: Your project takahashiproj must be on the Blaze (pay-as-you-go) plan to complete this command. Required API cloudbuild.googleapis.com can't be enabled until the upgrade is complete. To upgrade, visit the following URL:Having trouble? Try firebase [command] --helpSign in - Google Accounts
プロジェクト作成
firebase init functions
コマンドを実行します。
C:\test>firebase init functions
jsかtsを選択できますがここではjsを選択しています。
- Do you want to use ESLint to catch probable bugs and enforce style? Y
- Do you want to install dependencies with npm now? Y
上記2つとも共に「Y」にします。
functionsフォルダが作成されます。このフォルダがnodeプロジェクトになっていることがわかります。
index.js
functionsフォルダのindex.jsに関数を追加していってHTTPトリガー(HTTP関数)を実装していきます。
const functions = require("firebase-functions"); // // Create and Deploy Your First Cloud Functions // // https://firebase.google.com/docs/functions/write-firebase-functions // exports.helloWorld = functions.https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase!"); });
デフォルトでは下から4行がコメントされているので、そのコメントを外しました。
このindex.jsにHTTPトリガー(HTTP関数)を実装したら最後にデプロイする、という流れです。
C:\test>firebase deploy
このコマンドでデプロイします。
「Deploy complete!」と表示されたらOKです。その下に「Project Console:~~」と表示されているURLを開きます。
「helloWorld」という関数が追加されています。
HTTP関数実行
curlコマンドで実行してみます。
C:\test>curl -X GET https://us-central1-takahashiproj.cloudfunctions.net/helloWorld Hello from Firebase!
正常に標準出力されました。
HTTPリクエスト経由で関数を呼び出しできるのがHTTPトリガーとなります。
関数はindex.jsに別名で追加していきます。
const functions = require("firebase-functions"); exports.helloWorld = functions.https.onRequest((request, response) => { functions.logger.info("Hello logs!", {structuredData: true}); response.send("Hello from Firebase!"); }); exports.helloWorldquery = functions.https.onRequest((request, response) => { if (request.query.key !== undefined) { response.send("key = " + request.query.key); } else { response.send("invalid query parameter name."); } });
index.jsを編集したらデプロイします。
C:\test>firebase deploy
正常デプロイ出来たら、コンソールに新たな関数(helloworldquery)が追加されていることが確認できます。
request
curlでコマンド実行した際の値をrequestから取得します。(Content-Type:application/json)
curl -X POST -H "Content-Type:application/json" -H "X-MyHeader: 123" https://エンドポイントURL/?key=value -d '{"name":"Bob"}'
プロパティ/メソッド | 値 | |
---|---|---|
request.query.key | value | クエリパラメータ |
request.method | POST | HTTPメソッド |
request.body.name | Bob | リクエストボディ |
request.get(‘X-MyHeader’) | 123 | ヘッダ情報 |
request.rawBody | – | リクエストのRAW(未解決の)バイト数 |
東京リージョンに変更
リージョン省略時は、アイオワリージョン(us-central1)になります。
東京リージョンに変更するには.region('asia-northeast1')
を追加します。
exports.helloWorld = functions.https.onRequest~ ↓ exports.helloWorld = functions.region('asia-northeast1').https.onRequest~
これで東京リージョン(asia-northeast1 )に変更されます。
ローカルテスト
デプロイする前に必ずローカルでテストします。
emulatorを起動します。functionsはデフォルトポートは5001です。
C:\>firebase emulators:start --only functions
URL形式は以下の通りです。
このURLをcurlコマンドで叩けばテストすることが出来ます。
ドキュメント
https://firebase.google.com/docs/functions/http-events?hl=ja
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント