Help us understand the problem. What is going on with this article?

Firebase(Sparkプラン:無料枠) でRealtimeDBの自動バックアップを実施する

More than 1 year has passed since last update.

【はじめに】

【実行環境】

  • Mac(OS:High Sierra)

【前提条件】

  • Firebaseにプロジェクト作成済。
  • Firebaseで作成したプロジェクトがGCP上でも確認できていること。
    (Firebaseで作成したら自動的に?GCP側にもプロジェクトが作成されるらしい)
  • Cloud Build APIサービスが課金対象となっていること
    サービスが課金対象となっているか確認する

  • 以下のツールがインストール、利用できること
    1. git
    2. Python2.7
    3. Python pip
    4. Google Cloud SDK
    6. Firebase CLI

【構築手順】

1.プログラム取得・ディレクトリ構成確認

(1)とりあえず、gitHubからモジュール取得

 ※ 公式のプログラムではなく、個人的に手を加えたプログラムとなっているので注意!!

Terminal
$ git clone https://github.com/Nunnally-Engr/firebase-rdb-backup-cron
(2)ディレクトリ変更
Terminal
$ cd firebase-rdb-backup-cron
(3)ディレクトリ 構成確認

手順1-3_ディレクトリ構成.png

2.実際のプログラムの中身の確認

  • 今回確認&修正するプログラムは以下の通り。

    • .firebaserc
    • functions/index.js
    • functions/src/cron/backup.js
    • appengine/cron.yaml
  • .firebaserc

    • [Firebase:プロジェクト名]の部分に、ご自分で作成されたプロジェクトIDを記入する。 firebaserc.png
  • functions/index.js

    • App Engineから実際に呼び出される関数。Functionsをdeployしたら、この関数名が表示される。
    • ここでは〜.topic内の文字列("data-bakup-all")とappengine/cron.yamlのurl部分("/publish/data-bakup-all")がポイント!!
      function_indexjs.png
  • functions/src/cron/backup.js

    • 上記で説明したindex.jsから呼び出している関数。実際に、RealtimeDBを参照して、Admin Cloud Storage API経由でGCPのバケット機能を使ってBackup用のjsonファイルを作成する処理となる。(ソースの内容は割愛)
  • appengine/cron.yaml

    • 今回は、24時間ごとにBackupを取る設定している。
      追加でスケジューリングの設定する場合はこのファイルで設定する。
      ※ 詳細はGoogle公式のcron.yaml リファレンス:schedule の書式に記載されている。 cron_yaml.png

3.Firebase CloudFunctionsにdeployする

(1)Firebaseにログインする
Terminal
$ firebase login
(2)Firebaseで使用しているプロジェクトの確認(※省略可)
Terminal
$ firebase list
(3)使用するプロジェクトの選択(※選択されている場合は省略可)
Terminal
$ firebase use [プロジェクトID]
(4)ディレクトリ移動
Terminal
$ cd functions/
(5)deploy実行
Terminal
$ firebase deploy --only functions

【参考】もしくは・・・特定のFunctionのみdeploy

Terminal
$ firebase deploy --only functions:dataBackupAll
(6)deployできていることをFirebaseのFunctions上で確認

Firebase Function.png

4.GCP のApp EngineにCronジョブをdeployする

(1)GCPで使用しているプロジェクトの確認(※省略可)
Terminal
$ gcloud projects list
(2)使用するプロジェクトの選択(※選択されている場合は省略可)
Terminal
$ gcloud config set project [プロジェクトID]
(3)『appengine』ディレクトリへ移動
Terminal
$ cd appengine/
(4)pipを使って必要なパッケージをインストールする
Terminal
$ pip install -t lib -r requirements.txt
(5)App Engineアプリを作成する(※作成されている場合は省略可)
Terminal
$ gcloud app create
(6)deploy実行
Terminal
$ gcloud app deploy app.yaml \cron.yaml
(7)deployできていることをGCPのApp Engine上で確認

確認1_AppEngine⇒Cronジョブ.png
確認1_AppEngine⇒Cronジョブ2.png

【動作確認】

1.App EngineのCronジョブで「今すぐ実行」する

確認①.png

2.Firebaseのfunctionsのログに、「stream:successfully finished.」と表示されていれば処理は正常終了となる。

※ 実行して、jsonファイルが作成できるまで少し時間がかかることもあるので必ずログを確認すること。
ログ.png

3.さらに、FirebaseのStorageにjsonファイルができていたら問題なし。

確認②.png

【その他メモ・・・】

  • Firebase側のプロジェクトを見たら、従量課金になっていたので無料枠に戻したら"gcloud app deploy" ができなくなった。 ⇒ Cloud Build APIサービスを一度無効にして、再度有効に戻したらdeployができた。

【終わりに】

  • GCPの操作とか仕組みや癖?を知っていたら数分でできるのだろうけど、私は結構苦労しました💦
    ただ、一度作ると簡単に思えてきたので個人プロダクトとかには有効かと。
    お金があるならもちろん有料プランをおすすめ(笑)
    次は自動で削除とかそっち方面のものを作ってみようかと考えてます。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした