typescript - Får ett regionsfel vid distribution av Firebase Functions med Google Cloud Task-klient


Problem

När jag distribuerar mina Firebase Functions och importerar Google Cloud Tasks @google-cloud/tasks får jag ett regionsfel.

För att demonstrera detta inkluderar jag koden som ger framgångsrik och misslyckad distribution.

Framgångsrik

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

admin.initializeApp();

export const helloWorld = functions.region("europe-west3").https.onRequest((request, response) => {
  functions.logger.info("Hello logs!", {structuredData: true});
  response.send("Hello from Firebase!");
});

Misslyckad

CloudTaskClient och onDeletePostCancelTask-funktionen har lagts till i den framgångsrika koden.

import * as functions from "firebase-functions";
import * as admin from "firebase-admin";
const {CloudTasksClient} = require("@google-cloud/tasks");

admin.initializeApp();
const tasksClient = new CloudTasksClient();

export const helloWorld = functions.region("europe-west3").https.onRequest((request, response) => {
  functions.logger.info("Hello logs!", {structuredData: true});
  response.send("Hello from Firebase!");
});

export const onDeletePostCancelTask = functions.region("europe-west3").database
    .ref("/one/{twoId}").onDelete(async (snapshot, context) => {
      const dogId = snapshot.key;
      const taskSnap = await snapshot.ref.parent?.parent?.child("three/" + twoId).get();
      const taskName = taskSnap?.val();
      console.log("Task name: ", taskName);
      return tasksClient.deleteTask({name: taskName});
    });

Fel :

Error: There was an error deploying functions:
- Error Failed to create function helloWorld in region europe-west3
- Error Failed to create function onDeletePostCancelTask in region europe-west3

I Firebase Functions-loggen hittade jag följande:

Provided module can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module '@google-cloud/tasks'
Require stack: 
- /workspace/lib/index.js 
...

Mer information

  • Jag följde installationsprocessen som beskrivs i Hur man schemalägger en Cloud Function att köras i framtiden med Cloud Tasks (för att bygga en Firestore-dokument TTL).
  • Min Firebase-apps region är europe-west3.
  • Min Google Cloud-appregion är europe-west. (Men i början när jag konfigurerade Cloud Tasks skapade jag ett nytt projekt med regionen us-central1, men eftersom det fanns en instans av mitt projekt med regionen europe-west bytte jag till den.)
  • När jag utelämnar .region("europe-west3") kvarstår felet, bara med us-central1 istället.
  • Jag har två package.json, den första i ../ och den andra i ../functions/. Den yttre har @google-cloud/tasks beroendet:
{
  "dependencies": {
    "@google-cloud/tasks": "^2.4.2",
    "firebase-admin": "^10.0.0",
    "firebase-functions": "^3.16.0"
  }
}

Svar #1

Funktionens distribution misslyckades eftersom den inte kan hitta @google-cloud/tasks i package.json i din funktionsmapp och det finns inget problem med regionsfrågan. Den kan inte distribueras till någon region om det saknas ett beroende i din funktion.

För att fixa det och lägga till beroendet @google-cloud/tasks i din function/package.json, kör följande kommando i din function-katalog:

npm install @google-cloud/tasks

Distribuera igen, och det bör lyckas.