Firestore 백업 정기 실행 방법

Firestore의 자동 백업 기능이 없기 때문에 Firestore의 export API을 Cloud Functions의 Cloud Pub/Sub에서 정기적으로 두드렸다.
참고 : htps : // 메이 m. 코 m / go g ぇ c c u d jp / 푹신 s와 - 77272 ba c8762

서비스 계정의 개인 키 얻기



Google Cloud Platform 콘솔→IAM 및 관리→서비스 계정 화면 상단에서 '서비스 계정 만들기'를 클릭합니다.



프로젝트 역할은 다음 두 가지 유형을 추가
- Cloud Datastore Import Export Admin
- Storage Object Admin

이때 '새 비밀키 제공'에 체크를 넣으면 비밀키가 발행된다. 이 비공개 키를 functions 폴더에 넣습니다.

Cloud Functions에서 작업 스케줄링(cron)



하루에 한 번 불리는 클라우드 기능을 만듭니다.

Pub/Sub에 대해서는 이하를 알기 쉽다.
참고 : ぇぺぺぺrs-jp. 오 g b b g. 이 m/2017/04/호 w-와-s ぇづぇ-c 론-조 bs-우 th-c c d. HTML

cron.yaml
cron:
- description: make a backup for firestore everyday at 00:00
  url: /publish/firebase-backup
  schedule: every 24 hours

functions/index.js
exports.backupFirestore = functions.pubsub.topic('firebase-backup').onPublish((message, context) => {
  return true
})

작성한 Function 내에서 Firestore API exportDocuments를 두드리는



functions/index.js
const {google} = require('googleapis')
const rp = require('request-promise')
const functions = require('firebase-functions')
const admin = require('firebase-admin')
admin.initializeApp()

exports.backupFirestore = functions.pubsub.topic('firebase-backup').onPublish((message, context) => {
  const projectId = 'プロジェクトID'
  const getAccessToken = new Promise(function (resolve, reject) {
    const scopes = ['https://www.googleapis.com/auth/datastore', 'https://www.googleapis.com/auth/cloud-platform']
    const key = require(`./${projectId}.json`)
    const jwtClient = new google.auth.JWT(
      key.client_email,
      undefined,
      key.private_key,
      scopes,
      undefined
    )
    const authorization = new Promise(function (resolve, reject) {
      return jwtClient.authorize().then((value) => {
        return resolve(value)
      })
    })
    return authorization.then(function (value) {
      return resolve(value.access_token)
    })
  })
  return getAccessToken.then(function (accessToken) {
    const url = `https://firestore.googleapis.com/v1beta1/projects/${projectId}/databases/(default):exportDocuments`
    return rp.post(url, {
      headers: {
        Authorization: `Bearer ${accessToken}`
      },
      json: true,
      body: {
        outputUriPrefix: `gs://${projectId}-backups`
      }
    })
  })
})

이전 백업 자동 삭제



Google Cloud Platform 콘솔 → Storage 해당 버킷의 라이프사이클 설정

좋은 웹페이지 즐겨찾기