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

Bu sayfada, Cloud Firestore verilerinizin dışa aktarma işlemlerinin nasıl planlanacağı açıklanmaktadır. Dışa aktarma işlemlerini planlı olarak ç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 aktarma ve içe aktarma özelliğini yalnızca faturalandırma özelliği etkinleştirilmiş Google Cloud projeler kullanabilir.
  2. Dışa aktarma işlemleri için bir hedef Cloud Storage paketi gerekir. Cloud Firestore veritabanı konumunuza yakın bir konumda Cloud Storage paketi oluşturun. Dışa aktarma işlemleri için istek sahibinin ödediği bir paket kullanamazsınız.

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

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

Firebase CLI
  1. Firebase CLI'yi yükleyin. Yeni bir dizinde, CLI'yi Cloud Functions için 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 tuşuna basın.
  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 şunları değiştirin:
    • BUCKET_NAME yerine paketinizin adını yazın.
    • Dışa aktarma planınızı ayarlamak için every 24 hours öğesini 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: [] değerini 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
Google Cloud konsolu
Bir Cloud İşlevi oluşturun
  1. Google Cloud Console'da Cloud Functions sayfasına gidin:

    Cloud Functions'a gidin

  2. Create Function'ı (İşlev Oluştur) tıklayın.
  3. firestoreExport gibi bir işlev adı girin
  4. Tetikleyici bölümünde Cloud Pub/Sub'ı seçin.
  5. Konu bölümünde 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ç duyacağınız konu adını not edin.
  6. Kaynak kod 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ğıdakileri değiştirin:
    • BUCKET_NAME yerine paketinizin adını yazın.
    • Yalnızca belirtilen koleksiyon gruplarını dışa aktarmak için collectionIds: [] değerini 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 işlev alanına scheduledFirestoreExport yazın. Bu, index.js'daki işlevin adıdır.
  9. Cloud Functions işlevini dağıtmak için Oluştur'u tıklayın.
Cloud Scheduler işi oluşturma

Ardından, Cloud Functions işlevinizi çağıran bir Cloud Scheduler işi oluşturun:

  1. Google Cloud Console'da Cloud Scheduler sayfasına gidin:

    Cloud Scheduler adresine gidin

  2. İş Oluştur'u tıklayın.
  3. İş için scheduledFirestoreExport gibi bir ad girin.
  4. Sıklık girin (ör. every 24 hours).
  5. Bir saat dilimi seçin.
  6. Hedef bölümünde Pub/Sub'ı seçin. Konu alanına, Cloud Functions işlevinizle birlikte tanımladığınız pub/sub konusunun adını girin. Yukarıdaki örnekte bu konu initiateFirestoreExport olarak gösterilmiştir.
  7. Yük alanına start export girin. İş için tanımlanmış bir yükü gerektirir ancak yukarıdaki Cloud Functions bu değeri aslında kullanmaz.
  8. Oluştur'u tıklayın.
Bu noktada Cloud işlevinizi ve Cloud Scheduler işini dağıttınız ancak Cloud işlevinizin, dışa aktarma işlemlerini yürütmek için erişim izinlerine ihtiyacı vardır.

Erişim izinlerini yapılandırma

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

Bu Cloud Function, dışa aktarma işlemlerinin kimliğini 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 yazmak için izni olmalıdır. 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üne sahip

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

Henüz yüklemediyseniz bu araçlara Google Cloud Console'daki Cloud Shell bölümünden erişebilirsiniz:
Cloud Shell'u başlat

  1. Cloud Datastore İçe ve Dışa Aktarma Yöneticisi rolünü atayın. PROJECT_ID yerine 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 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ırsanız 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. Hizmet hesabını etkinleştirme başlıklı makaleyi inceleyin. App Engine hizmet hesabınızı son 30 gün içinde sildiyseniz hizmet hesabınızı geri yükleyebilirsiniz. Hizmet hesabını silme başlıklı makaleyi inceleyin.

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

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

  1. Google Cloud Console'da Cloud Scheduler sayfasına gidin.
    Cloud Scheduler adresine gidin

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

    Birkaç saniye sonra Cloud Scheduler işi, sonuç sütununu Başarılı olarak, Son çalıştırma sütununu ise geçerli saat olarak günceller. Yenile'yi tıklamanız gerekebilir.

Cloud Scheduler sayfası yalnızca işin Cloud Functions'ınızı çağırdığını onaylar. İşlevinizin günlüklerini görmek için Cloud Function sayfasını açın.

Cloud Functions günlüklerini görüntüleme

Cloud Function'ın 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 konsolundaki Cloud Functions sayfasına gidin.

İşlev Günlükleri'ne gidin

GCP Console

Google Cloud Console'da Cloud Functions sayfasına gidin.

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

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 aktarma ve içe aktarma işlemlerini yönetme başlıklı makaleyi inceleyin.

Bir 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