این صفحه نحوه زمانبندی صادرات دادههای Cloud Firestore شما را شرح میدهد. برای اجرای صادرات بر اساس یک برنامه، توصیه میکنیم از Cloud Functions و Cloud Scheduler استفاده کنید.
قبل از اینکه شروع کنی
قبل از اینکه صادرات دادههای مدیریتشده را برنامهریزی کنید، باید کارهای زیر را انجام دهید:
- فعال کردن صورتحساب برای پروژه Google Cloud شما. فقط پروژههای Google Cloud که صورتحساب آنها فعال است میتوانند از ویژگی صادرات و واردات استفاده کنند.
- عملیات صادرات به یک سطل Cloud Storage مقصد نیاز دارد. یک سطل Cloud Storage در مکانی نزدیک به محل پایگاه داده Cloud Firestore خود ایجاد کنید. شما نمیتوانید از سطل Requester Pays برای عملیات صادرات استفاده کنید.
یک تابع ابری و یک کار Cloud Scheduler ایجاد کنید
برای ایجاد یک تابع ابری Node.js که خروجی گرفتن از دادههای Cloud Firestore و یک کار Cloud Scheduler را برای فراخوانی آن تابع آغاز میکند، مراحل زیر را دنبال کنید:
رابط خط فرمان فایربیس
رابط خط فرمان فایربیس (Firebase CLI) را نصب کنید . در یک دایرکتوری جدید، رابط خط فرمان (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
کنسول گوگل کلود
یک تابع ابری ایجاد کنید
به صفحه توابع ابری در کنسول گوگل کلود بروید:
- روی نوشتن یک تابع کلیک کنید
- نام تابعی مانند
firestore-exportرا وارد کنید. - در قسمت Trigger ، گزینه Cloud Pub/Sub را انتخاب کنید.
- در قسمت موضوع ، گزینه ایجاد موضوع جدید (Create new Topic) را انتخاب کنید. نامی برای موضوع اصلی/فرعی، مانند
initiateFirestoreExport، وارد کنید. نام موضوع را یادداشت کنید زیرا برای ایجاد کار Cloud Scheduler خود به آن نیاز دارید. - در قسمت کد منبع ، ویرایشگر درونخطی (Inline editor) را انتخاب کنید. کد زیر را در قسمت
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) => { const databaseName = client.databasePath( YOUR_PROJECT_ID, '(default)' ); return client .exportDocuments({ name: databaseName, outputUriPrefix: bucket, // Leave collectionIds empty to export all collections // or define a list of collection 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: []تا فقط گروههای مجموعه مشخصشده را صادر کند. برای صادر کردن همه مجموعهها، مقدار را به همان صورت باقی بگذارید.
- به جای
- در
package.json، وابستگی زیر را اضافه کنید:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } } - در قسمت «Function to execute» ،
scheduledFirestoreExport، نام تابع درindex.js، را وارد کنید. - برای استقرار عملکرد ابری، روی ایجاد کلیک کنید.
ایجاد یک کار Cloud Scheduler
در مرحله بعد، یک کار Cloud Scheduler ایجاد کنید که تابع ابری شما را فراخوانی کند:
به صفحه Cloud Scheduler در کنسول Google Cloud بروید:
- روی ایجاد شغل کلیک کنید.
- یک نام برای این کار وارد کنید، مانند
scheduledFirestoreExport. - یک بازه زمانی وارد کنید، مثلاً
every 24 hours. - یک منطقه زمانی انتخاب کنید.
- در قسمت Target ، گزینه Pub/Sub را انتخاب کنید. در قسمت Topic ، نام موضوع pub/sub را که در کنار Cloud Function خود تعریف کردهاید، وارد کنید. در مثال بالا،
initiateFirestoreExport. - در فیلد Payload ، عبارت
start exportوارد کنید. این کار نیاز به تعریف یک payload دارد، اما تابع Cloud بالا در واقع از این مقدار استفاده نمیکند. - روی ایجاد کلیک کنید.
پیکربندی مجوزهای دسترسی
در مرحله بعد، به Cloud Function اجازه دهید تا عملیات صادرات را شروع کند و در سطل GCS شما بنویسد.
این تابع ابری از حساب سرویس پیشفرض پروژه شما برای تأیید اعتبار و مجوزدهی عملیات خروجی آن استفاده میکند. هنگام ایجاد یک پروژه، یک حساب سرویس پیشفرض با نام زیر برای شما ایجاد میشود:
PROJECT_ID@appspot.gserviceaccount.com
این حساب سرویس برای شروع عملیات خروجی گرفتن و نوشتن در مخزن Cloud Storage شما به مجوز نیاز دارد. برای اعطای این مجوزها، نقشهای IAM زیر را به حساب سرویس پیشفرض اختصاص دهید:
-
Cloud Datastore Import Export Admin - نقش
OwnerیاStorage Adminدر باکت
شما میتوانید از ابزارهای خط فرمان gcloud و gsutil برای اختصاص این نقشها استفاده کنید.
اگر قبلاً نصب نشده است، میتوانید از طریق Cloud Shell در کنسول Google Cloud به این ابزارها دسترسی داشته باشید:
شروع Cloud Shell
نقش مدیر واردات و صادرات Cloud Datastore را تعیین کنید. PROJECT_ID را جایگزین کنید و دستور زیر را اجرا کنید:
gcloud projects add-iam-policy-binding PROJECT_ID \ --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \ --role roles/datastore.importExportAdmin
نقش مدیر ذخیرهسازی را به باکت خود اختصاص دهید. PROJECT_ID و BUCKET_NAME را جایگزین کنید و دستور زیر را اجرا کنید:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
اگر حساب سرویس پیشفرض App Engine خود را غیرفعال یا حذف کنید، برنامه App Engine شما دسترسی به پایگاه داده Cloud Firestore شما را از دست خواهد داد. اگر حساب سرویس App Engine خود را غیرفعال کردهاید، میتوانید آن را دوباره فعال کنید، به فعال کردن حساب سرویس مراجعه کنید. اگر حساب سرویس App Engine خود را در 30 روز گذشته حذف کردهاید، میتوانید حساب سرویس خود را بازیابی کنید، به لغو حذف حساب سرویس مراجعه کنید.
کار Cloud Scheduler و عملکرد ابری خود را آزمایش کنید
شما میتوانید کار Cloud Scheduler خود را در صفحه Cloud Scheduler در کنسول Google Cloud آزمایش کنید.
به صفحه Cloud Scheduler در کنسول Google Cloud بروید.
به Cloud Scheduler برویددر ردیف مربوط به کار جدید Cloud Scheduler خود، روی «اجرا کن» کلیک کنید.
پس از چند ثانیه، کار Cloud Scheduler باید ستون نتیجه را به Success و Last run to the current time بهروزرسانی کند. ممکن است لازم باشد روی Refresh کلیک کنید.
صفحه Cloud Scheduler فقط تأیید میکند که کار، تابع ابری شما را فراخوانی کرده است. برای مشاهده گزارشهای تابع خود، صفحه تابع ابری را باز کنید.
مشاهده گزارشهای عملکرد ابری
برای دیدن اینکه آیا تابع Cloud با موفقیت عملیات صادرات را آغاز کرده است، گزارشهای تابع را باز کنید:
کنسول فایربیس
به صفحه Cloud Functions در کنسول فایربیس بروید.
کنسول GCP
به صفحه Cloud Functions در کنسول گوگل کلود بروید.
مشاهده پیشرفت صادرات
شما میتوانید از دستور gcloud firestore operations list برای مشاهده پیشرفت عملیات صادرات خود استفاده کنید، به مدیریت عملیات صادرات و واردات مراجعه کنید.
پس از اتمام عملیات خروجی، میتوانید فایلهای خروجی را در فضای Cloud Storage خود مشاهده کنید:
مرورگر Cloud Storage را باز کنید