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/tasksberoendet:
{
"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.
