Ошибка функции резервного копирования в firestore с сообщением «PERMISSION_DENIED: вызывающая сторона не имеет разрешения» - PullRequest
0 голосов
/ 15 апреля 2020

Я пытаюсь настроить запланированную функцию firebase, которая будет экспортировать все коллекции в Firestore каждые 24 часа. Я использую этот скрипт для этого:

import {fs} from '../services/firestore';

import * as functions from 'firebase-functions';
import * as firestore from '@google-cloud/firestore';

const client = new firestore.v1.FirestoreAdminClient();

const bucket = 'gs://my-cool-backup';

export const scheduledFirestoreExport = functions
    .region('europe-west1')
    .pubsub
    .schedule('every 24 hours')
    .onRun(async (context) => {
        const collections = await fs.listCollections();

        const projectId = process.env.GCP_PROJECT || process.env.GCLOUD_PROJECT;
        const databaseName =
            client.databasePath(projectId, '(default)');

        const responses = await client.exportDocuments({
            name: databaseName,
            outputUriPrefix: bucket,
            collectionIds: collections.map(x => x.id)
        });

        const response = responses[0];
        console.log(`Operation Name: ${response['name']}`);
        return response;
    });

../services/firestore выглядит так:

import * as settings from '../settings.json';
import * as serviceAccount from '../firebase-admin.json';
import * as admin from 'firebase-admin';

export const fs = admin.initializeApp({
    credential: admin.credential.cert(serviceAccount as any),
    ...settings.firebase
}).firestore();

Когда я запускаю функцию с помощью Google Cloud Platform, это вывод:

Error: function execution failed. Details:
7 PERMISSION_DENIED: The caller does not have permission

У учетной записи службы, которую я использую, есть следующие разрешения

enter image description here

У меня много функций, работающих без проблем, только этот терпит неудачу. Я подозреваю, что это из-за @google-cloud/firestore, тогда как другие используют только firebase-admin

Сообщение об ошибке дает мне очень мало go с. Что мне здесь не хватает?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...