Verileri dışa aktarmayı planla

Bu sayfada Cloud Firestore verilerinizin dışa aktarımının nasıl planlanacağı açıklanmaktadır. Dışa aktarmaları belirli bir programa göre gerçekleştirmek için Cloud Functions ve Cloud Scheduler'ı kullanmanızı öneririz.

Sen başlamadan önce

Yönetilen veri aktarımlarını planlamadan önce aşağıdaki görevleri tamamlamanız gerekir:

  1. Google Cloud projeniz için faturalandırmayı etkinleştirin. Dışa aktarma ve içe aktarma özelliğini yalnızca faturalandırmanın etkin olduğu Google Cloud projeleri kullanabilir.
  2. Dışa aktarma işlemleri bir hedef Cloud Storage paketi gerektirir. Cloud Firestore veritabanı konumunuza yakın bir konumda bir Cloud Storage paketi oluşturun . Dışa aktarma işlemleri için Talep Eden Ödemeler grubunu kullanamazsınız.

Bulut İşlevi ve Bulut Zamanlayıcı işi oluşturma

Cloud Firestore veri aktarımını başlatan bir Node.js Bulut İşlevi ve bu işlevi çağırmak üzere bir Bulut Zamanlayıcı işi oluşturmak için aşağıdaki adımları izleyin:

Firebase CLI
  1. Firebase CLI'yi yükleyin . Yeni bir dizinde Bulut İşlevleri için CLI'yi başlatın:

    firebase init functions --project PROJECT_ID
    1. Dil için JavaScript'i seçin.
    2. İsteğe bağlı olarak ESLint'i etkinleştirin.
    3. Bağımlılıkları yüklemek için y girin.
  2. functions/index.js dosyasındaki kodu aşağıdakiyle değiştirin:

    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. Yukarıdaki kodda aşağıdakileri değiştirin:
    • BUCKET_NAME kısmını paketinizin adıyla değiştirin.
    • Dışa aktarma planınızı ayarlamak için every 24 hours bir değiştirin. AppEngine cron.yaml sözdizimini veya unix-cron biçimini ( * * * * * ) kullanın.
    • Yalnızca belirtilen koleksiyon gruplarını dışa aktarmak için collectionIds: [] . Tüm koleksiyonları dışa aktarmak için olduğu gibi bırakın.

  4. Zamanlanmış işlevi dağıtın:

    firebase deploy --only functions
GCP Konsolu
Bulut İşlevi Oluşturun
  1. GCP Konsolunda Bulut İşlevleri sayfasına gidin:

    Bulut İşlevlerine Git

  2. İşlev Oluştur'a tıklayın
  3. firestoreExport gibi bir işlev adı girin
  4. Tetikleyici altında Cloud Pub/Sub'u seçin
  5. Konu altında Yeni Konu Oluştur'u seçin. Pub/sub konusu için, initiateFirestoreExport gibi bir ad girin. Cloud Scheduler işinizi oluşturmak için ihtiyaç duyduğunuz konu adını not edin.
  6. Kaynak kodu altında Satır içi düzenleyici'yi seçin. index.js altına aşağıdaki kodu girin:
    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);
        });
    };
    Yukarıdaki kodda aşağıdakileri değiştirin:
    • BUCKET_NAME kısmını paketinizin adıyla değiştirin.
    • Yalnızca belirtilen koleksiyon gruplarını dışa aktarmak için collectionIds: [] . Tüm koleksiyonları dışa aktarmak için olduğu gibi bırakın.

  7. package.json altına şu bağımlılığı ekleyin:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Yürütülecek işlev altında, index.js dosyasındaki işlevin adı olan scheduledFirestoreExport girin.
  9. Bulut İşlevini dağıtmak için Oluştur'a tıklayın.
Bulut Zamanlayıcı işi oluşturma

Ardından, Bulut İşlevinizi çağıran bir Bulut Planlayıcı işi oluşturun:

  1. GCP Konsolunda Bulut Planlayıcı sayfasına gidin:

    Cloud Scheduler'a gidin

  2. İş Oluştur'a tıklayın.
  3. İş için scheduledFirestoreExport gibi bir Ad girin.
  4. Örneğin every 24 hours bir Frekans girin.
  5. Bir Saat Dilimi seçin.
  6. Hedef altında Pub/Sub'u seçin. Konu alanına, Bulut İşlevinizin yanında tanımladığınız pub/sub konusunun adını girin, yukarıdaki örnekteFirestoreExport'u initiateFirestoreExport .
  7. Yük alanına start export yazın. İş, tanımlanmış bir veri yükü gerektirir ancak yukarıdaki Bulut İşlevi gerçekte bu değeri kullanmaz.
  8. Oluştur'u tıklayın.
Bu noktada Bulut İşlevinizi ve Bulut Zamanlayıcı işinizi dağıttınız ancak Bulut İşlevinizin dışa aktarma işlemlerini yürütmek için hâlâ erişim izinlerine ihtiyacı var.

Erişim izinlerini yapılandırma

Ardından, Bulut İşlevine dışa aktarma işlemlerini başlatma ve GCS klasörünüze yazma izni verin.

Bu Bulut İşlevi, dışa aktarma işlemlerinin kimliğini doğrulamak ve yetkilendirmek için projenizin varsayılan hizmet hesabını kullanır. Bir proje oluşturduğunuzda sizin için aşağıdaki adda bir varsayılan hizmet hesabı oluşturulur:

PROJECT_ID@appspot.gserviceaccount.com

Bu hizmet hesabı, bir dışa aktarma işlemi başlatmak ve Cloud Storage grubunuza yazmak için izne ihtiyaç duyuyor. Bu izinleri vermek için aşağıdaki IAM rollerini varsayılan hizmet hesabına atayın:

  • Cloud Datastore Import Export Admin
  • Pakette Owner veya Storage Admin rolü

Bu rolleri atamak için gcloud ve gsutil komut satırı araçlarını kullanabilirsiniz.

Henüz yüklü değilse bu araçlara Google Cloud Platform Konsolu'ndaki Cloud Shell'den erişebilirsiniz:
Cloud Shell'i başlatın

  1. Cloud Datastore İçe Aktarma Dışa Aktarma Yöneticisi rolünü atayın. PROJECT_ID değiştirin ve aşağıdaki komutu çalıştırın:

    gcloud projects add-iam-policy-binding PROJECT_ID \
        --member serviceAccount:PROJECT_ID@appspot.gserviceaccount.com \
        --role roles/datastore.importExportAdmin
    
  2. Paketinize Depolama Yöneticisi rolünü atayın. PROJECT_ID ve BUCKET_NAME değiştirin ve aşağıdaki komutu çalıştırın:

    gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \
        gs://BUCKET_NAME
    

App Engine varsayılan hizmet hesabınızı devre dışı bırakır veya silerseniz App Engine uygulamanız Cloud Firestore veritabanınıza erişimini kaybeder. App Engine hizmet hesabınızı devre dışı bıraktıysanız yeniden etkinleştirebilirsiniz; bkz. hizmet hesabını etkinleştirme . App Engine hizmet hesabınızı son 30 gün içinde sildiyseniz hizmet hesabınızı geri yükleyebilirsiniz; bkz. hizmet hesabının silinmesini geri alma.

Cloud Scheduler işinizi ve Cloud Functions'ınızı test edin

Cloud Scheduler işinizi Google Cloud Platform Console'un Cloud Scheduler sayfasında test edebilirsiniz.

  1. GCP Konsolunda Bulut Planlayıcı sayfasına gidin.
    Cloud Scheduler'a gidin

  2. Yeni Cloud Scheduler işinizin satırında Şimdi çalıştır 'ı tıklayın.

    Birkaç saniye sonra Bulut Zamanlayıcı işi, sonuç sütununu Başarılı ve Son çalıştırma olarak geçerli saate güncellemelidir. Yenile'yi tıklamanız gerekebilir.

Bulut Zamanlayıcı sayfası yalnızca işin Bulut İşleviniz olarak adlandırıldığını doğrular. İşlevinizin günlüklerini görmek için Bulut İşlevi sayfasını açın.

Cloud Function günlüklerini görüntüleyin

Bulut İşlevinin bir dışa aktarma işlemini başarıyla başlatıp başlatmadığını görmek için işlevin günlüklerini açın:

Firebase Konsolu

Firebase konsolunda Bulut İşlevleri sayfasına gidin.

İşlev Günlüklerine Git

GCP Konsolu

GCP Konsolunda Bulut İşlevleri sayfasına gidin.

Günlük Görüntüleyiciye Git

Dışa aktarma ilerlemesini görüntüle

Dışa aktarma işlemlerinizin ilerleyişini görüntülemek için gcloud firestore operations list komutunu kullanabilirsiniz; dışa aktarma ve içe aktarma işlemlerini yönetme konusuna bakın.

Dışa aktarma işlemi tamamlandıktan sonra Cloud Storage paketinizdeki çıktı dosyalarını görüntüleyebilirsiniz:

Bulut Depolama tarayıcısını açın