Bu sayfada, Cloud Firestore verilerinizin dışa aktarma işlemlerini nasıl planlayacağınız 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:
- Google Cloud projeniz için faturalandırmayı etkinleştirin. Dışa ve içe aktarma özelliğini yalnızca faturalandırma etkinleştirilmiş Google Cloud projeler kullanabilir.
- Dışa aktarma işlemleri için 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 istekte bulunanın ödediği bir paket kullanamazsınız.
Cloud Functions işlevi ve Cloud Scheduler işi oluşturma
Aşağıdaki adımları uygulayarak Cloud Firestore veri dışa aktarma ve Cloud Scheduler işi başlatan bir Node.js Cloud Function oluşturun:
Firebase CLI
-
Firebase CLI'yı yükleyin. Yeni bir dizinde, Cloud Functions için CLI'yı başlatın:
firebase init functions --project PROJECT_ID
- Dil olarak JavaScript'i seçin.
- İsteğe bağlı olarak ESLint'i etkinleştirin.
- Bağımlılıkları yüklemek için
ygirin.
-
functions/index.jsdosyasındaki kodu aşağıdakilerle 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'); }); });
-
Yukarıdaki kodda aşağıdakileri değiştirin:
BUCKET_NAMEyerine paketinizi adını yazın.YOUR_PROJECT_IDyerine proje kimliğinizi yazın.- Dışa aktarma planınızı ayarlamak için
every 24 hoursöğesini değiştirin. Şunlardan birini kullanın: App Engine cron.yaml söz dizimi veya unix-cron biçimi (* * * * *). -
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.
-
Planlanan işlevi dağıtın:
firebase deploy --only functions
Google Cloud konsolu
Bir Cloud İşlevi oluşturun
-
Google Cloud Console'da Cloud Functions sayfasına gidin:
- İşlev yaz'ı tıklayın.
firestore-exportgibi bir işlev adı girin.- Tetikleyici bölümünde Cloud Pub/Sub'ı seçin.
- Konu bölümünde Yeni konu oluştur'u seçin. Pub/Sub konusu için bir ad girin (ör.
initiateFirestoreExport). Cloud Scheduler işinizi oluşturmak için konu adını not edin. - Kaynak kodu bölümünde Satır içi düzenleyici'yi seçin.
index.jsbölümüne aşağıdaki kodu girin: Yukarıdaki kodda aşağıdakileri değiştirin: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( YOUR_PROJECT_ID, '(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); }); };
BUCKET_NAMEyerine paketinizi 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.
package.jsonaltında aşağıdaki bağımlılığı ekleyin:{ "dependencies": { "@google-cloud/firestore": "^1.3.0" } }- Yürütülecek işlev bölümüne
scheduledFirestoreExportyazın. Bu,index.jsiçindeki işlevin adıdır. - 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:
-
Google Cloud Console'da Cloud Scheduler sayfasına gidin:
- İş Oluştur'u tıklayın.
- İş için
scheduledFirestoreExportgibi bir ad girin. - Sıklık girin (örneğin,
every 24 hours). - Bir saat dilimi seçin.
- 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.
initiateFirestoreExportYukarıdaki örnekte bu ad,initiateFirestoreExportşeklindedir. - Payload (Yük) alanına
start exportgirin. İş için tanımlanmış bir yük gerekir ancak yukarıdaki Cloud Functions işlevi bu değeri kullanmaz. - Oluştur'u tıklayın.
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şlemlerini kimlik doğrulamak ve yetkilendirmek için projenizin varsayılan hizmet hesabını kullanır. Proje oluşturduğunuzda sizin için şu 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 paketine yazmak 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-
OwnerveyaStorage Adminrolü
Bu rolleri atamak için gcloud ve gsutil komut satırı araçlarını kullanabilirsiniz.
Henüz yüklenmediyse bu araçlara Google Cloud Console'daki Cloud Shell simgesinden erişebilirsiniz:
Başlayın Cloud Shell
-
Cloud Datastore İçe ve Dışa Aktarma Yöneticisi rolünü atayın. PROJECT_ID yerine kendi değerinizi girin 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 Alanı Yöneticisi rolünü atayın. PROJECT_ID ve BUCKET_NAME yerine kendi değerlerinizi girip aşağıdaki komutu çalıştırın:
gsutil iam ch serviceAccount:PROJECT_ID@appspot.gserviceaccount.com:admin \ gs://BUCKET_NAME
Varsayılan App Engine 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. 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ı geri alma 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.
Google Cloud Console'da Cloud Scheduler sayfasına gidin.
Cloud Scheduler adresine gidin.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ı, Son çalıştırma sütununu ise mevcut saatle güncelleyecektir. 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 Functions'ı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 konsolunda Cloud Functions sayfasına gidin.
GCP Console
Google Cloud Console'da Cloud Functions sayfasına 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 ve içe aktarma işlemlerini yönetme başlıklı makaleyi inceleyin.
Dışa aktarma işlemi tamamlandıktan sonra çıkış dosyalarını Cloud Storage paketinizde görüntüleyebilirsiniz:
Cloud Storage tarayıcıyı açın.