Veri dışa aktarma işlemlerini planlayın

Bu sayfada, Cloud Firestore verilerinizin dışa aktarma işlemlerini nasıl planlayacağınız açıklanmaktadır. Dışa aktarma işlemlerini belirli bir plana göre çalıştırmak için Cloud Functions ve Cloud Scheduler'ı kullanmanızı öneririz.

Başlamadan önce

Yönetilen veri dışa aktarma işlemlerini planlamadan önce aşağıdaki görevleri tamamlamanız gerekir:

  1. Google Cloud projeniz için faturalandırmayı etkinleştirin. Dışa 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 Cloud Storage paketi oluşturun. Dışa aktarma işlemleri için İstek Sahibi Ödemesi paketi kullanamazsınız.

Cloud Functions işlevi ve Cloud Scheduler işi oluşturma

Cloud Firestore veri dışa aktarma işlemini başlatan bir Node.js Cloud Functions ve bu işlevi çağırmak için bir Cloud Scheduler işi oluşturmak amacıyla aşağıdaki adımları uygulayın:

Firebase CLI
  1. Firebase CLI'ı yükleyin. Yeni bir dizinde Cloud Functions için CLI'ı 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ğıdaki değişiklikleri yapın:
    • BUCKET_NAME kısmını paketinizin adıyla değiştirin.
    • Dışa aktarma planınızı ayarlamak için every 24 hours dosyasını değiştirin. AppEngine cron.yaml söz dizimini veya unix-cron biçimini (* * * * *) kullanın.
    • Yalnızca belirtilen koleksiyon gruplarını dışa aktarmak için collectionIds: [] politikasını değiştirin. Tüm koleksiyonları dışa aktarmak için olduğu gibi bırakın.

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

    firebase deploy --only functions
GCP Console
Cloud Functions işlevi oluştur
  1. GCP Console'daki Cloud Functions sayfasına gidin:

    Cloud Functions'a git

  2. İşlev Oluştur'u tıklayın.
  3. firestoreExport gibi bir işlev adı girin
  4. Tetikleyici bölümünde Cloud Pub/Sub'ı seçin.
  5. Konu'nun 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 alın.
  6. Kaynak kodu bölümünde Satır içi düzenleyici'yi seçin. index.js alanına şu 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ğıdaki kodu 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: [] politikasını değiştirin. Tüm koleksiyonları dışa aktarmak için olduğu gibi bırakın.

  7. package.json altında, şu bağımlılığı ekleyin:
    {
      "dependencies": {
        "@google-cloud/firestore": "^1.3.0"
      }
    }
  8. Yürütülecek işlev altında, index.js işlevindeki işlevin adını scheduledFirestoreExport olarak girin.
  9. Cloud Functions işlevini dağıtmak için Create'i (Oluştur) tıklayın.
Cloud Scheduler işi oluşturma

Ardından, Cloud Functions işlevinize çağrı yapan bir Cloud Scheduler işi oluşturun:

  1. GCP Console'daki Cloud Scheduler sayfasına gidin:

    Cloud Scheduler'a gidin

  2. İş Oluştur'u tıklayın.
  3. İş için scheduledFirestoreExport gibi bir Ad girin.
  4. Sıklık değeri girin (ör. every 24 hours).
  5. Saat dilimi seçin.
  6. Hedef altında Pub/Sub'ı seçin. Topic (Konu) alanına, yukarıdaki örnekte Cloud Functions işlevinizle birlikte tanımladığınız pub/sub konusunun adını (initiateFirestoreExport) girin.
  7. Yük alanına start export yazın. İş, tanımlanmış bir yük gerektiriyor ancak yukarıdaki Cloud Functions işlevi bu değeri kullanmıyor.
  8. Oluştur'u tıklayın.
Bu noktada, Cloud Functions ve Cloud Scheduler işinizi dağıttınız ancak Cloud Functions işlevinizin dışa aktarma işlemlerini yürütmek için hâlâ erişim izinlerine ihtiyacı vardır.

Erişim izinlerini yapılandırma

Ardından, Cloud Functions işlevine dışa aktarma işlemlerini başlatma ve GCS paketinize yazma izni verin.

Bu Cloud Functions işlevi, dışa aktarma işlemlerini doğrulamak ve yetkilendirmek için projenizin varsayılan hizmet hesabını kullanır. Proje oluşturduğunuzda sizin için aşağıdaki ada sahip varsayılan bir hizmet hesabı oluşturulur:

PROJECT_ID@appspot.gserviceaccount.com

Bu hizmet hesabının dışa aktarma işlemi başlatmak ve Cloud Storage paketinize yazması için izne ihtiyacı var. Bu izinleri vermek için varsayılan hizmet hesabına aşağıdaki IAM rollerini 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.

Yüklü değilse Google Cloud Platform Console'daki Cloud Shell'den şu araçlara erişebilirsiniz:
Cloud Shell'i Başlat

  1. Cloud Datastore İçe Aktarma Dışa Aktarma Yöneticisi rolünü atayın. PROJECT_ID komutunu değiştirip 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 Alanı Yöneticisi rolünü atayın. PROJECT_ID ve BUCKET_NAME değerlerini değiştirip 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. Hizmet hesabını etkinleştirme sayfasına göz atın. App Engine hizmet hesabınızı son 30 gün içinde sildiyseniz hizmet hesabınızı geri yükleyebilirsiniz. Hizmet hesabını silme işlemini geri alma bölümüne göz atabilirsiniz.

Cloud Scheduler işinizi ve Cloud Functions işlevinizi test etme

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

  1. GCP Console'daki Cloud Scheduler sayfasına gidin.
    Cloud Scheduler'a gidin

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

    Birkaç saniye sonra Cloud Scheduler işi, sonuç sütununu Başarılı ve Son çalıştırma değerini o anki zamana güncellemelidir. Yenile'yi tıklamanız gerekebilir.

Cloud Scheduler sayfası yalnızca bu işin Cloud Functions işleviniz olarak adlandırıldığını onaylar. İşlevinizin günlüklerini görmek için Cloud Functions işlevi sayfasını açın.

Cloud Functions işlevi günlüklerini görüntüleme

Cloud Functions iş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 Cloud Functions sayfasına gidin.

İşlev Günlükleri'ne git

GCP Console

GCP Console'da Cloud Functions sayfasına gidin.

Günlük Görüntüleyici'ye git

Dışa aktarma işleminin ilerleme durumunu görüntüleme

Dışa aktarma işlemlerinizin ilerleme durumunu görüntülemek için gcloud firestore operations list komutunu kullanabilirsiniz. Dışa ve içe aktarma işlemlerini yönetme sayfasına göz atın.

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

Cloud Storage tarayıcısını açın