概要
Cloud Functions for Firebase(β版)を使ってみた雑記
ちなみに使ってみたのはhttp(s)のトリガーのみ
※ 書いてあることは適当なので鵜呑みにしないように
準備
使い方は簡単
firebase consoleでプロジェクトをさくせいして、プロジェクトのディレクトリで以下のコマンドを叩くだけ。
$ firebase init
functionsを選択すると./functions
ディレクトリにひな形ファイルが生成される。
コンソールの結果
🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥 🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥
🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥
🔥🔥🔥🔥🔥🔥 🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥
🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥 🔥🔥
🔥🔥 🔥🔥🔥🔥 🔥🔥 🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥 🔥🔥 🔥🔥 🔥🔥🔥🔥🔥🔥 🔥🔥🔥🔥🔥🔥🔥🔥
You're about to initialize a Firebase project in this directory:
/hogehoge/test-firebase-functions
? Which Firebase CLI features do you want to setup for this folder? Press Space to select features, then Enter to confirm your choices. Functions: Configure and deploy Cloud Functions
=== Project Setup
First, let's associate this project directory with a Firebase project.
You can create multiple project aliases by running firebase use --add,
but for now we'll just set up a default project.
? Select a default Firebase project for this directory: hogehoge (hogehoge)
=== Functions Setup
A functions directory will be created in your project with a Node.js
package pre-configured. Functions can be deployed with firebase deploy.
? What language would you like to use to write Cloud Functions? JavaScript
? Do you want to use ESLint to catch probable bugs and enforce style? No
✔ Wrote functions/package.json
✔ Wrote functions/index.js
? Do you want to install dependencies with npm now? Yes
> grpc@1.7.3 install /hogehoge/test-firebase-functions/functions/node_modules/grpc
> node-pre-gyp install --fallback-to-build --library=static_library
[grpc] Success: "/hogehoge/test-firebase-functions/functions/node_modules/grpc/src/node/extension_binary/node-v59-darwin-x64-unknown/grpc_node.node" is installed via remote
> protobufjs@6.8.4 postinstall /hogehoge/test-firebase-functions/functions/node_modules/google-gax/node_modules/protobufjs
> node scripts/postinstall
npm notice created a lockfile as package-lock.json. You should commit this file.
added 384 packages in 23.892s
i Writing configuration info to firebase.json...
i Writing project information to .firebaserc...
✔ Firebase initialization complete!
実装
ここで作成された雛形ファイルを見てみよう。
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) => {
// response.send("Hello from Firebase!");
// });
上記のコメントアウトを外すとhttp(s)でリスエストするとHello from Firebase!
と返すFunctionが作成される。
簡単だ。
デプロイ
おなじみのコマンドうつだけ
$ firebase deploy
動作確認
firebase consoleのFunctionsのリストにURLが表示されているのでそれを叩く
$ curl https://hogehoge.cloudfunctions.net/helloWorld
Hello from Firebase!
所感
- コマンド2回叩くだけでFaaSが実行できるのはすごい楽
- AWS Lambdaと比べて前提知識がほとんど必要ないのはとても良い
- Lambdaの場合はAPI Gatewayとつなげたりとか色々めんどかった
Tips
無料枠(Sparkプラン)だと外部API叩けない
TwitterのAPIを叩くFunctionを作ったけど無理だった。以下のエラーが表示される。
Billing account not configured. External network is not accessible and quotas are severely limited. Configure billing account to remove these restrictions
Flameプラン($25/月)で行けるのだろうか。だれか知ってたら教えて。
※ ちゃんとしれべてないけど、stackoverflowとかにBlazeプランじゃないとダメだよって書いてあった気がする
→ 教えてもらいました。Flameプランでも行けます。
その他
firebase console側で実行するリージョン選ぶような操作必要だったかも。