Check out what’s new from Firebase at Google I/O 2022. Learn more

Verileri dışa aktarmayı planla

Bu sayfa, Cloud Firestore verilerinizin dışa aktarımını nasıl planlayacağınızı açıklar. Dışa aktarmaları bir zamanlamaya göre çalıştırmak için Cloud Functions ve Cloud Scheduler'ı kullanmanızı öneririz.

Sen başlamadan önce

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

  1. Google Cloud projeniz için faturalandırmayı etkinleştirin. Yalnızca faturalandırmanın etkin olduğu Google Cloud projeleri dışa aktarma ve içe aktarma özelliğini 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 Öder paketini kullanamazsınız.

Bir Bulut İşlevi ve bir Bulut Zamanlayıcı işi oluşturun

Cloud Firestore veri dışa aktarımını başlatan bir Node.js Bulut İşlevi ve bu işlevi çağırmak için 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, Cloud Functions 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 || process.env.GCLOUD_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 yerine paketinizin adını yazın.
    • Dışa aktarma programı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: [] öğesini değiştirin. 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ını açın:

    Bulut İşlevleri sayfasını açın

  2. İşlev Oluştur'a tıklayın
  3. firestoreExport gibi bir işlev adı girin
  4. Tetikleyici altında, Cloud Pub/Sub'ı seçin
  5. Konu altında, Yeni Konu Oluştur'u seçin. pub/alt konu için bir ad girin, örneğin initiateFirestoreExport . Bulut Zamanlayıcı işinizi oluşturmak için ihtiyaç duyduğunuzda konu adını not alın.
  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.GCLOUD_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 yerine paketinizin adını yazın.
    • Yalnızca belirtilen koleksiyon gruplarını dışa aktarmak için collectionIds: [] öğesini değiştirin. Tüm koleksiyonları dışa aktarmak için olduğu gibi bırakın.

  7. package.json altında aşağıdaki bağımlılığı ekleyin:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Yürütülecek İşlev altında, index.js 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şturun

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

  1. GCP Konsolunda Bulut Planlayıcı sayfasını açın:

    Bulut Zamanlayıcı sayfasını açın

  2. İş Oluştur 'u tıklayın.
  3. scheduledFirestoreExport gibi iş için bir Ad girin.
  4. Örneğin, every 24 hours bir Sıklık girin.
  5. Bir Saat Dilimi seçin.
  6. Hedef altında, Pub/Sub'ı seçin. Konu alanına, Bulut İşlevinizle birlikte tanımladığınız pub/sub konusunun adını girin, yukarıdaki örnekte FirestoreExport'u initiateFirestoreExport .
  7. Yük alanına, start export girin. İş, tanımlanmış bir yük gerektiriyor, ancak yukarıdaki Bulut İşlevi aslında bu değeri kullanmaz.
  8. Oluştur'u tıklayın.
Bu noktada, Bulut İşlevi 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ırın

Ardından, Bulut İşlevine dışa aktarma işlemlerini başlatma ve GCS paketinize 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 ada sahip 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 paketinize yazmak için izin gerektiriyor. Bu izinleri vermek için varsayılan hizmet hesabına aşağıdaki IAM rollerini atayın:

  • Cloud Datastore Import Export Admin
  • 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, Google Cloud Platform Konsolu'ndaki Cloud Shell'den şu araçlara 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. Paketinizde 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şimi kaybeder. App Engine hizmet hesabınızı devre dışı bıraktıysanız, yeniden etkinleştirebilirsiniz, bkz. bir 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. bir hizmet hesabını silmeyi geri alma .

Bulut Zamanlayıcı işinizi ve Bulut İşlevinizi test edin

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

  1. GCP Konsolunda Bulut Planlayıcı sayfasını açın.
    Bulut Zamanlayıcı sayfasını açın

  2. Yeni Bulut Zamanlayıcı 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ı ve Son çalıştırma olarak geçerli zamana güncellemelidir. Yenile'yi tıklamanız gerekebilir.

Bulut Zamanlayıcı sayfası, yalnızca işin Bulut İşleviniz olarak adlandırıldığını onaylar. İş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ını açın.

İşlev Günlükleri sayfasını açın

GCP Konsolu

GCP Konsolunda Bulut İşlevleri sayfasını açın.

Günlük Görüntüleyici sayfasını açın

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

Dışa aktarma işlemlerinizin ilerlemesini görüntülemek için gcloud firestore operations list komutunu kullanabilirsiniz, bkz. dışa aktarma ve içe aktarma işlemlerini yönetme .

Bir dışa aktarma işlemi tamamlandıktan sonra, çıktı dosyalarını Cloud Storage paketinizde görüntüleyebilirsiniz:

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