برنامه ریزی صادرات داده ها

این صفحه نحوه برنامه‌ریزی صادرات داده‌های Cloud Firestore خود را شرح می‌دهد. برای اجرای صادرات بر اساس یک برنامه، توصیه می کنیم از Cloud Functions و Cloud Scheduler استفاده کنید.

قبل از اینکه شروع کنی

قبل از اینکه صادرات داده های مدیریت شده را برنامه ریزی کنید، باید کارهای زیر را انجام دهید:

  1. صورتحساب پروژه Google Cloud خود را فعال کنید. فقط پروژه‌های Google Cloud با فعال بودن صورت‌حساب می‌توانند از ویژگی صادرات و واردات استفاده کنند.
  2. عملیات صادرات به یک سطل ذخیره‌سازی ابری مقصد نیاز دارد. یک سطل Cloud Storage در مکانی نزدیک به مکان پایگاه داده Cloud Firestore خود ایجاد کنید. شما نمی توانید از سطل Requester Pays برای عملیات صادرات استفاده کنید.

یک کار Cloud Function و Cloud Scheduler ایجاد کنید

مراحل زیر را برای ایجاد یک Node.js Cloud Function که صادرات داده Cloud Firestore و یک کار Cloud Scheduler را برای فراخوانی آن تابع آغاز می کند، دنبال کنید:

Firebase CLI
  1. Firebase CLI را نصب کنید . در یک فهرست جدید، CLI را برای توابع ابری مقداردهی کنید:

    firebase init functions --project PROJECT_ID
    1. جاوا اسکریپت را برای زبان انتخاب کنید.
    2. به صورت اختیاری، ESLint را فعال کنید.
    3. برای نصب وابستگی ها y را وارد کنید.
  2. کد موجود در فایل 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');
      });
    });
  3. در کد بالا موارد زیر را اصلاح کنید:
    • BUCKET_NAME با نام سطل خود جایگزین کنید.
    • every 24 hours یکبار تغییر دهید تا برنامه صادرات خود را تنظیم کنید. از دستور AppEngine cron.yaml یا فرمت unix-cron ( * * * * * ) استفاده کنید.
    • Modify collectionIds: [] برای صادرات فقط گروه های مجموعه مشخص شده. برای صادرات همه مجموعه‌ها همان‌طور که هست رها کنید.

  4. اجرای تابع زمانبندی شده:

    firebase deploy --only functions
کنسول GCP
یک تابع ابری ایجاد کنید
  1. به صفحه Cloud Functions در کنسول GCP بروید:

    به Cloud Functions بروید

  2. روی ایجاد تابع کلیک کنید
  3. نام تابعی مانند firestoreExport را وارد کنید
  4. در قسمت Trigger ، Cloud Pub/Sub را انتخاب کنید
  5. در زیر موضوع ، ایجاد موضوع جدید را انتخاب کنید. نامی برای موضوع pub/sub وارد کنید، مانند initiateFirestoreExport . همانطور که برای ایجاد شغل Cloud Scheduler خود به آن نیاز دارید، نام موضوع را یادداشت کنید.
  6. در زیر کد منبع ، ویرایشگر درون خطی را انتخاب کنید. کد زیر را در 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(
        process.env.GCP_PROJECT,
        '(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 با نام سطل خود جایگزین کنید.
    • Modify collectionIds: [] برای صادرات فقط گروه های مجموعه مشخص شده. برای صادرات همه مجموعه‌ها همان‌طور که هست رها کنید.

  7. تحت package.json ، وابستگی زیر را اضافه کنید:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. در زیر Function to execute ، scheduledFirestoreExport ، نام تابع را در index.js وارد کنید.
  9. برای استقرار Cloud Function روی Create کلیک کنید.
یک کار Cloud Scheduler ایجاد کنید

در مرحله بعد، یک کار Cloud Scheduler ایجاد کنید که تابع Cloud شما را فراخوانی می کند:

  1. به صفحه Cloud Scheduler در کنسول GCP بروید:

    به Cloud Scheduler بروید

  2. روی ایجاد شغل کلیک کنید.
  3. یک نام برای کار وارد کنید، مانند scheduledFirestoreExport .
  4. برای مثال، every 24 hours یک فرکانس وارد کنید.
  5. یک منطقه زمانی را انتخاب کنید.
  6. در قسمت Target ، Pub/Sub را انتخاب کنید. در قسمت Topic ، نام pub/sub موضوعی را که در کنار Cloud Function خود تعریف کرده اید، وارد کنید، در مثال بالا، initiateFirestoreExport .
  7. در قسمت Payload ، start export وارد کنید. این کار به یک بار مشخص نیاز دارد، اما تابع ابری بالا در واقع از این مقدار استفاده نمی کند.
  8. روی ایجاد کلیک کنید.
در این مرحله، کار Cloud Function و Cloud Scheduler خود را مستقر کرده اید، اما Cloud Function شما هنوز برای اجرای عملیات صادرات به مجوزهای دسترسی نیاز دارد.

پیکربندی مجوزهای دسترسی

سپس، به Cloud Function اجازه دهید تا عملیات صادرات را شروع کند و در سطل GCS شما بنویسد.

این Cloud Function از حساب سرویس پیش فرض پروژه شما برای احراز هویت و مجوز عملیات صادرات آن استفاده می کند. هنگامی که یک پروژه ایجاد می کنید، یک حساب سرویس پیش فرض برای شما با نام زیر ایجاد می شود:

PROJECT_ID@appspot.gserviceaccount.com

این حساب سرویس برای شروع عملیات صادرات و نوشتن به سطل فضای ذخیره سازی ابری شما به مجوز نیاز دارد. برای اعطای این مجوزها، نقش های IAM زیر را به حساب سرویس پیش فرض اختصاص دهید:

  • Cloud Datastore Import Export Admin
  • نقش Storage Admin Owner یا Storage در سطل

برای اختصاص این نقش ها می توانید از ابزارهای خط فرمان gcloud و gsutil استفاده کنید.

اگر قبلاً نصب نشده‌اید، می‌توانید از Cloud Shell در کنسول Google Cloud Platform به این ابزارها دسترسی داشته باشید:
Cloud Shell را راه اندازی کنید

  1. نقش مدیر Cloud Datastore Import Export را تعیین کنید. PROJECT_ID جایگزین کنید و دستور زیر را اجرا کنید:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. نقش Storage Admin را روی سطل خود اختصاص دهید. 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 Function خود را تست کنید

می‌توانید کار Cloud Scheduler خود را در صفحه Cloud Scheduler کنسول Google Cloud Platform آزمایش کنید.

  1. به صفحه Cloud Scheduler در کنسول GCP بروید.
    به Cloud Scheduler بروید

  2. در ردیف کار جدید Cloud Scheduler، روی Run now کلیک کنید.

    پس از چند ثانیه، کار Cloud Scheduler باید ستون نتیجه را به موفقیت و آخرین اجرا به زمان فعلی به‌روزرسانی کند. ممکن است لازم باشد روی Refresh کلیک کنید.

صفحه Cloud Scheduler فقط تأیید می کند که این کار به نام Cloud Function شما انجام می شود. صفحه Cloud Function را باز کنید تا گزارش های عملکرد خود را ببینید.

گزارش‌های عملکرد ابر را مشاهده کنید

برای مشاهده اینکه آیا عملکرد Cloud با موفقیت عملیات صادرات را آغاز کرده است، گزارش های عملکرد را باز کنید:

کنسول Firebase

به صفحه Cloud Functions در کنسول Firebase بروید.

به Function Logs بروید

کنسول GCP

به صفحه Cloud Functions در کنسول GCP بروید.

به Logs Viewer بروید

مشاهده پیشرفت صادرات

می‌توانید از دستور gcloud firestore operations list برای مشاهده پیشرفت عملیات صادرات خود استفاده کنید، به مدیریت عملیات صادرات و واردات مراجعه کنید.

پس از اتمام عملیات صادرات، می‌توانید فایل‌های خروجی را در سطل ذخیره‌سازی ابری خود مشاهده کنید:

مرورگر Cloud Storage را باز کنید