PaPaPointアプリ【CloudFunctions実装編】

2020/11/06

今日はCloud Functionsの実装を進めていきます。
目標はFirestoreからデータを取得。

Cloud Functions 実装

functions/src/index.ts に実装していきます。
以前作成した合計ポイントのデータを取得する関数を作ってみます。

import * as functions from 'firebase-functions';
import admin from 'firebase-admin';

admin.initializeApp();

export const totalPoints = functions
  .region('asia-northeast1')
  .https.onRequest(async (req, res) => {
    const snap = await admin.firestore().collection('total_point').get();
    const data = snap.docs.map((doc) => doc.data());
    res.send({ data });
  });

そういえばコレクション名は複数形にすべきだったなーとあとになって気づきました。

デプロイする

実装出来たらデプロイしてみます。

$ firebase deploy --only functions

なんかエラーが出ました。

Error: HTTP Error: 400, Billing account for project '55291078010' is not found. Billing must be enabled for activation of service(s) 'cloudbuild.googleapis.com,containerregistry.googleapis.com' to proceed.

現在,Firebaseは無料のSparkプランを使っていたのですが, どうやら,従量制のBlazeプランを使用する必要があるようです。
従量制といっても,Sparkプランで使える無料枠も含まれているので開発で使用している分には課金されてもせいぜい数百円程度(100円も行かないんじゃないかな?)だと思うのでBlazeプランに切り替えます。
というかそもそもNode.js 10以降はBlazeプランじゃないと行けないみたいなので課金以外の選択肢はなかったようです。

プランをアップグレードする

Firebaseコンソールの左メニューの一番下にあるアップグレードをクリック
image

プランを選択をクリック
image

Blazeプラン以外ないので,次へをクリック
image

課金情報の設定画面が移動します。
請求先住所の国と通貨を確認し,確認ボタンをクリック
image

お支払いプロファイルを作成または選択する。
GoogleDomainを購入したことがあったため既存のプロファイルを使い回すことにします。
image

お客様情報を入力する
お支払い方法を選択する(と言ってもカードしかないぽいけど)
使用するクレジットカードを選択
購入を確定をクリック

アップグレード完了
image

再度デプロイしてみる

$ firebase deploy --only functions

今度は成功しました。

✔  functions: Finished running predeploy script.
i  functions: ensuring required API cloudfunctions.googleapis.com is enabled...
i  functions: ensuring required API cloudbuild.googleapis.com is enabled...
⚠  functions: missing required API cloudbuild.googleapis.com. Enabling now...
✔  functions: required API cloudfunctions.googleapis.com is enabled
✔  functions: required API cloudbuild.googleapis.com is enabled
i  functions: preparing functions directory for uploading...
i  functions: packaged functions (107.29 KB) for uploading
✔  functions: functions folder uploaded successfully
i  functions: creating Node.js 10 function totalPoints(asia-northeast1)...
✔  functions[totalPoints(asia-northeast1)]: Successful create operation. 
Function URL (totalPoints): https://asia-northeast1-xxxxxxxxx.cloudfunctions.net/totalPoints

✔  Deploy complete!

Function URLへアクセスするとFirestoreに追加したデータが返されました。

{"data":[{"point":95,"name":"長男"}]}

まとめ

手軽にAPIが作れるのいいっすね。
データの取得もできたし,後はどんどん実装していくだけだー(たぶん)
明日は久々に友だちとご飯食べにいくのでそれまでにブログ仕上げないと寝ちゃいそうだなー

それではまた明日。


書いた人: こへ
音楽と漫画と読書とアニメとスノボが好き。多趣味でいろんなことに興味有ります。 誰しもが一度は使った事があるもののIoT開発をしてます。
Twitterフォローお願いします。