این صفحه نحوه زمانبندی صادر کردن دادههای Cloud Firestore را شرح میدهد. برای اجرای صادر کردنها طبق زمانبندی، توصیه میکنیم از Cloud Functions و Cloud Scheduler استفاده کنید.
قبل از شروع
قبلاز زمانبندی صادر کردن دادههای مدیریتشده، باید کارهای زیر را انجام دهید:
- صدور صورتحساب را برای پروژه Google Cloud فعال کنید. فقط پروژههای Google Cloud که صورتحساب برای آنها فعال شده است میتوانند از ویژگی صادر و وارد کردن استفاده کنند.
- عملیات صادر کردن به یک مخزن Cloud Storage مقصد نیاز دارد. یک Cloud Storage دسته در مکانی نزدیک مکان پایگاه داده Cloud Firestore خود ایجاد کنید. نمیتوانید از سطل «درخواستکننده پرداخت میکند» برای عملیات صادر کردن استفاده کنید.
ایجاد کردن Cloud Function و کار Cloud Scheduler
این مراحل را دنبال کنید تا یک Node.js Cloud Function ایجاد کنید که یک صادر کردن داده Cloud Firestore و یک کار Cloud Scheduler را برای فراخوانی آن تابع آغاز میکند:
واسط خط فرمان Firebase
-
«واسط خط فرمان Firebase» را نصب کنید. در دایرکتوری جدید، CLI را برای Cloud Functions مقداردهی اولیه کنید:
firebase init functions --project PROJECT_ID
- جاوا اسکریپت را بهعنوان زبان انتخاب کنید.
- درصورت تمایل، ESLint را فعال کنید.
- برای نصب وابستگیها،
yرا وارد کنید.
-
کد موجود در فایل
functions/index.jsرا با کد زیر جایگزین کنید:const functions = require('firebase-functions'); const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME'; exports.scheduledFirestoreExport = functions.pubsub .schedule('every 24 hours') .onRun((context) => { const projectId = process.env.GCP_PROJECT; const databaseName = client.databasePath(projectId, '(default)'); return client.exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or set to a list of collection IDs to export, // collectionIds: ['users', 'posts'] collectionIds: [] }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); }) .catch(err => { console.error(err); throw new Error('Export operation failed'); }); });
-
در کد قبلی، موارد زیر را اصلاح کنید:
BUCKET_NAMEرا با نام مخزن خودتان جایگزین کنید.YOUR_PROJECT_IDرا با شناسه پروژه خودتان جایگزین کنیدevery 24 hoursرا تغییر دهید تا برنامه زمانی صادر کردن را تنظیم کنید. از نحو AppEngine cron.yaml یا قالب unix-cron (* * * * *) استفاده کنید.-
collectionIds: []را اصلاح کنید تا فقط گروههای مجموعه مشخصشده صادر شود. برای صادر کردن همه گروههای مجموعه، آن را همانطور که هست رها کنید.
-
تابع زمانبندیشده را مستقر کنید:
firebase deploy --only functions
;کنسول Google Cloud
ایجاد کردن تابع ابری
-
به صفحه Cloud Functions در کنسول Google Cloud بروید:
- روی نوشتن تابع کلیک کنید
- نام تابعی مثل
firestore-exportرا وارد کنید - در بخش راهانداز، Cloud Pub/Sub را انتخاب کنید
- در بخش موضوع، ایجاد موضوع جدید را انتخاب کنید. نامی برای
موضوع pub/sub وارد کنید، مثلاً
initiateFirestoreExport. نام موضوع را یادداشت کنید زیرا برای ایجاد کار Cloud Scheduler به آن نیاز دارید. - در بخش کد منبع، ویرایشگر درونخطی را انتخاب کنید. کد زیر را در
index.jsوارد کنید: در کد قبلی، موارد زیر را اصلاح کنید:const firestore = require('@google-cloud/firestore'); const client = new firestore.v1.FirestoreAdminClient(); // Replace BUCKET_NAME const bucket = 'gs://BUCKET_NAME' exports.scheduledFirestoreExport = (event, context) => { // Access the GCLOUD_PROJECT environment variable set by the runtime. const projectId = process.env.GOOGLE_CLOUD_PROJECT || process.env.GCLOUD_PROJECT; // Use the DATABASE_ID environment variable if set, // otherwise default to '(default)' const databaseId = process.env.DATABASE_ID || '(default)'; const databaseName = client.databasePath( projectId, databaseId ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collection groups // or define a list of collection group IDs: // collectionIds: ['users', 'posts'] collectionIds: [], }) .then(responses => { const response = responses[0]; console.log(`Operation Name: ${response['name']}`); return response; }) .catch(err => { console.error(err); }); };
BUCKET_NAMEرا با نام مخزن خودتان جایگزین کنید.-
collectionIds: []را اصلاح کنید تا فقط گروههای مجموعه مشخصشده صادر شود. برای صادر کردن همه گروههای مجموعه، آن را همانطور که هست رها کنید. -
(اختیاری) اگر از پایگاه داده غیرپیشفرض استفاده میکنید، مطمئن شوید که متغیر محیطی
DATABASE_IDرا هنگام ایجاد Cloud Function تنظیم کردهاید. اگر از زمان اجرایی استفاده میکنید که در آنGOOGLE_CLOUD_PROJECTبهطور خودکار تنظیم نشده است، ممکن است لازم باشد آن را بهصورت دستی تنظیم کنید یا آن را با شناسه پروژهتان در کد جایگزین کنید.
- در بخش
package.json، وابستگی زیر را اضافه کنید:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - در بخش تابع برای اجرا،
scheduledFirestoreExportرا وارد کنید، نام تابع درindex.js. - برای پیادهسازی «تابع ابری»، روی ایجاد کلیک کنید.
ایجاد شغل Cloud Scheduler
سپس، کار Cloud Scheduler ایجاد کنید که Cloud Function شما را فراخوانی کند:
-
به صفحه Cloud Scheduler در کنسول Google Cloud بروید:
- روی ایجاد کردن کار کلیک کنید.
- نامی برای کار وارد کنید، مثلاً
scheduledFirestoreExport. - بسامد را وارد کنید، برای مثال
every 24 hours. - منطقه زمانی را انتخاب کنید.
- در بخش هدف، Pub/Sub را انتخاب کنید. در فیلد موضوع،
نام موضوع pub/sub را که در کنار
«تابع ابری» تعریف کردهاید وارد کنید،
initiateFirestoreExportدر مثال قبلی. - در فیلد بار داده،
start exportرا وارد کنید. این کار به محموله تعریفشده نیاز دارد، اما Cloud Function قبلی درواقع از این مقدار استفاده نمیکند. - روی ایجاد کردن کلیک کنید.
پیکربندی اجازههای دسترسی
سپس، به Cloud Function اجازه دهید عملیات صادر کردن را شروع کند و در مخزن GCS شما بنویسد.
این تابع Cloud Run از حساب سرویس برای اصالتسنجی و مجاز کردن عملیات صادر کردن استفاده میکند. حساب سرویس مورداستفاده به پیکربندی Cloud Functions شما بستگی دارد:
- توابع ابری (نسل اول): از حساب خدمات پیشفرض App Engine استفاده میکند:
PROJECT_ID@appspot.gserviceaccount.com - Cloud Functions (نسل دوم): از حساب سرویس پیشفرض Compute Engine استفاده میکند:
PROJECT_NUMBER-compute@developer.gserviceaccount.com
این حساب سرویس برای شروع عملیات صادر کردن و نوشتن در سطل Cloud Storage شما به اجازه نیاز دارد. برای اعطای این اجازهها، نقشهای IAM زیر را به حساب سرویس اختصاص دهید:
Cloud Datastore Import Export Admin- نقش
Storage Adminدر باکت Cloud Run Invoker(برای Cloud Functions (نسل دوم) لازم است تا به سرویس راهانداز اجازه دهد تابع را فراخوانی کند)
میتوانید از ابزارهای خط فرمان gcloud و gsutil برای اختصاص دادن این نقشها استفاده کنید.
اگر ازقبل نصب نشده است، میتوانید ازطریق Cloud Shell در کنسول Google Cloud به این ابزارها دسترسی پیدا کنید:
شروع Cloud Shell
-
نقش سرپرست واردات و صادرات Cloud Datastore را اختصاص دهید. PROJECT_ID و SERVICE_ACCOUNT (برای مثال،
PROJECT_ID@appspot.gserviceaccount.comیاPROJECT_NUMBER-compute@developer.gserviceaccount.com) را جایگزین کنید و فرمان زیر را اجرا کنید:gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/datastore.importExportAdmin -
نقش سرپرست فضای ذخیرهسازی را در دسته خود اختصاص دهید. SERVICE_ACCOUNT و BUCKET_NAME را جایگزین کنید و فرمان زیر را اجرا کنید:
gsutil iam ch serviceAccount:SERVICE_ACCOUNT:admin \ gs://BUCKET_NAME -
(برای Cloud Functions (نسل دوم)) نقش Cloud Runفراخوان را به حساب سرویس اختصاص دهید. PROJECT_ID و SERVICE_ACCOUNT را جایگزین کنید و فرمان زیر را اجرا کنید:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:SERVICE_ACCOUNT \ --role roles/run.invoker
اگر حساب سرویس پیشفرض App Engine را غیرفعال یا حذف کنید، برنامه App Engine دسترسی به پایگاه داده Cloud Firestore را ازدست خواهد داد. اگر حساب سرویس App Engine را غیرفعال کردهاید، میتوانید آن را دوباره فعال کنید، فعال کردن حساب سرویس را ببینید. اگر حساب سرویس App Engine را در ۳۰ روز گذشته حذف کردهاید، میتوانید حساب سرویس را بازیابی کنید، لغو حذف حساب سرویس را ببینید.
آزمایش کردن کار Cloud Scheduler و Cloud Function
میتوانید کار Cloud Scheduler را در صفحه Cloud Scheduler کنسول Google Cloud آزمایش کنید.
به صفحه Cloud Scheduler در کنسول Google Cloud بروید.
رفتن به Cloud Schedulerدر ردیف مربوط به کار Cloud Scheduler جدیدتان، روی اکنون اجرا شود کلیک کنید.
پساز چند ثانیه، کار Cloud Scheduler باید ستون نتیجه را به موفقیت و آخرین اجرا را به زمان فعلی بهروز کند. شاید لازم باشد روی بازآوری کلیک کنید.
صفحه Cloud Scheduler فقط تأیید میکند که کار، «تابع ابری» شما را فراخوانی کرده است. صفحه Cloud Function را باز کنید تا گزارشهای تابع خود را ببینید.
مشاهده گزارشهای Cloud Function
برای اینکه ببینید Cloud Function عملیات صادر کردن را با موفقیت شروع کرده است یا نه، گزارشهای تابع را باز کنید:
کنسول Firebase
در کنسول Firebase، به میزبانی و بدون سرور > توابع بروید.
کنسول GCP
به صفحه Cloud Functions در کنسول Google Cloud بروید.
مشاهده پیشرفت صادر کردن
میتوانید از فرمان gcloud firestore operations list برای مشاهده پیشرفت عملیات صادر کردن استفاده کنید، به مدیریت عملیات صادر کردن و وارد کردن مراجعه کنید.
پساز تکمیل عملیات صادر کردن، میتوانید فایلهای خروجی را در Cloud Storage bucket مشاهده کنید:
مرورگر Cloud Storage را باز کنید