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:
- 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.
- 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
Firebase CLI'yi yükleyin . Yeni bir dizinde, Cloud Functions için CLI'yi başlatın:
firebase init functions --project PROJECT_ID
- Dil için JavaScript'i seçin.
- İsteğe bağlı olarak, ESLint'i etkinleştirin.
- Bağımlılıkları yüklemek için
y
girin.
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'); }); });
- 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.
-
Zamanlanmış işlevi dağıtın:
firebase deploy --only functions
GCP Konsolu
Bulut İşlevi Oluşturun
GCP Konsolunda Bulut İşlevleri sayfasını açın:
- İşlev Oluştur'a tıklayın
-
firestoreExport
gibi bir işlev adı girin - Tetikleyici altında, Cloud Pub/Sub'ı seçin
- 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. - 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.
-
-
package.json
altında aşağıdaki bağımlılığı ekleyin:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }
- Yürütülecek İşlev altında,
index.js
işlevin adı olanscheduledFirestoreExport
girin. - 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:
GCP Konsolunda Bulut Planlayıcı sayfasını açın:
- İş Oluştur 'u tıklayın.
-
scheduledFirestoreExport
gibi iş için bir Ad girin. - Örneğin,
every 24 hours
bir Sıklık girin. - Bir Saat Dilimi seçin.
- 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
. - Yük alanına,
start export
girin. İş, tanımlanmış bir yük gerektiriyor, ancak yukarıdaki Bulut İşlevi aslında bu değeri kullanmaz. - Oluştur'u tıklayın.
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
veyaStorage 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
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
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.
GCP Konsolunda Bulut Planlayıcı sayfasını açın.
Bulut Zamanlayıcı sayfasını açınYeni 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.
GCP Konsolu
GCP Konsolunda Bulut İşlevleri 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