Projeler arasında veri taşıma

Bu sayfada, Cloud Firestore verilerini bir projeden diğerine taşımak için yönetilen içe ve dışa aktarma özelliklerinin nasıl kullanılacağı açıklanmaktadır. Bu işlem, geliştirme ortamı oluşturmak veya bir uygulamayı kalıcı olarak başka bir projeye taşımak için yararlı olabilir. Bu sayfadaki örnekte, bir kaynak projeden verilerin nasıl dışa aktarılacağı ve ardından bu verilerin hedef projeye nasıl içe aktarılacağı gösterilmektedir. Projeler arasında veri taşımak için aşağıdaki adımları uygulamanız gerekir:

  1. Kaynak projenizdeki verileri barındırmak için bir Cloud Storage paketi oluşturun.
  2. Kaynak projenizdeki verileri pakete aktarın.
  3. Hedef projenize, paketten okuma izni verin.
  4. Paketteki verileri hedef projenize aktarın.

Başlamadan önce

Yönetilen dışa ve içe aktarma hizmetini kullanabilmek için aşağıdaki görevleri tamamlamanız gerekir:

  1. Hem kaynak projeniz hem de hedef projeniz için faturalandırmayı etkinleştirin. Yalnızca faturalandırmanın etkin olduğu Google Cloud projeler, dışa ve içe aktarma işlevini kullanabilir.
  2. Hesabınızın, kaynak projenizde ve hedef projenizde gerekli Cloud IAM izinlerine sahip olduğundan emin olun. Her iki projenin de sahibiyseniz hesabınız gerekli izinlere sahiptir. Aksi takdirde, aşağıdaki Cloud IAM rolleri Cloud Firestore dışa ve içe aktarma işlemleri için gerekli izinleri verir:

    Owner, Cloud Datastore Owner veya Cloud Datastore Import Export Admin

    Proje sahibi, Erişim izni verme bölümündeki adımları uygulayarak bu rollerden birini verebilir.

  3. gcloud komut satırı aracını ayarlayın ve aşağıdaki yöntemlerden birini kullanarak projenize bağlanın:

  4. Yeni projenizde dizinler oluşturun. Bileşik dizinler, kaynak ve hedef projeler arasında eşleşmelidir. Her dokümanın birden fazla kez işlenmesini önlemek için önce dizinler oluşturulmalıdır.

Kaynak projeden verileri dışa aktarma

Cloud Firestore dışa aktarma dosyalarınız için bir Cloud Storage paketi oluşturup dışa aktarma işlemi başlatarak verilerinizi dışa aktarın.

Cloud Storage paketi oluşturma

Cloud Firestore veritabanınızla aynı konumda bir Cloud Storage paketi oluşturun. Veritabanınızın konumunu görüntülemek için proje konumu ayarınıza bakın. Dışa ve içe aktarma işlemleri için Ödeyen Tarafın İstekte Bulunduğu Kullanıcı olduğu bir paketi veya Rapid paketini kullanamazsınız.

Cloud Storage paketiniz kaynak projenizde değilse kaynak projenin varsayılan hizmet hesabına pakete erişim izni vermeniz gerekir. Her Google Cloud projesinde, otomatik olarak oluşturulan ve PROJECT_ID@appspot.gserviceaccount.com adını taşıyan bir varsayılan hizmet hesabı bulunur. Cloud Firestore dışa aktarma işlemleri, Cloud Storage paket işlemlerini yetkilendirmek için bu varsayılan hizmet hesabını kullanır. Varsayılan hizmet hesabına kaynak paketiniz için erişim izni vermek istiyorsanız hesaba Storage Admin rolünü verin.

Bu rolü, Cloud Shell adresinde bulunan gsutil aracıyla atayabilirsiniz:

Başlat Cloud Shell

gsutil iam ch serviceAccount:[service-PROJECT_NUMBER]@gcp-sa-firestore.iam.gserviceaccount.com :roles/storage.admin\
gs://[BUCKET_NAME]@

Bu rolü Google Cloud konsolunda da atayabilirsiniz.

Yazma işlemlerini devre dışı bırakma (isteğe bağlı)

Dışa aktarma işlemi gerçekleştirirken uygulamanız veritabanınıza yazmaya devam ederse bu yazma işlemlerinin tümünü dışa aktarma dosyalarınıza kaydedemeyebilirsiniz. Verileri tutarlı bir durumdan dışa aktarmak için güvenlik kurallarınızı güncelleyerek ve tüm Admin SDK işlemlerini durdurarak veritabanınıza yazma işlemlerini devre dışı bırakın.

  1. Güvenlik kurallarını güncelleme

    Firebase konsolunda Databases & Storage (Veritabanları ve Depolama) > Firestore > Rules (Kurallar) sekmesine gidin.

    Kaynak projenizin güvenlik kurallarını tüm yazma işlemlerini reddedecek şekilde güncelleyin. Örneğin:

      // Deny write access to all users under any conditions
      service cloud.firestore {
        match /databases/{database}/documents {
          match /{document=**} {
            allow write: if false;
          }
          // Reads do not affect export operations
          // Add your read rules here
        }
      }
    
  2. Yönetici SDK'larından yazma işlemlerini durdurma

    Güvenlik kuralları, Firebase Admin SDK veya Google Cloud Sunucu İstemci Kitaplığı kullanılarak oluşturulan ayrıcalıklı sunucu ortamlarından gelen yazma işlemlerini durdurmaz. Sunucularınızı kapatarak veya güncelleyerek yönetici sunucularınızdan yazma işlemlerini durdurduğunuzdan emin olun.

Dışa aktarma işlemi başlatma

Kaynak projenizdeki verileri dışa aktarmak için gcloud firestore export komutunu kullanın. Tüm verilerinizi veya yalnızca belirli koleksiyon gruplarını dışa aktarabilirsiniz. [SOURCE_BUCKET] ifadesini Cloud Storage paketinizin adıyla değiştirin:

Tüm verileri dışa aktar
gcloud firestore export gs://[SOURCE_BUCKET] --async
Belirli koleksiyon gruplarını dışa aktarma
gcloud firestore export gs://[SOURCE_BUCKET] --collection-ids=[COLLECTION_GROUP_ID_1],[COLLECTION_GROUP_ID_2] --async

Daha sonra kullanacağınız için dışa aktarma işleminizin outputURIPrefix değerini not edin. Varsayılan olarak Cloud Firestore, dışa aktarma dosyalarınıza zaman damgasına göre bir ön ek ekler:

outputUriPrefix: gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418

Dışa aktarma işlemi çalışırken işleminizin ilerleme durumunu görüntülemek için firestore operations list komutunu kullanabilirsiniz:

gcloud firestore operations list

Verileri hedef projeye aktarma

Ardından, hedef projeye Cloud Firestore veri dosyalarınıza erişim izni verin ve içe aktarma işlemini başlatın.

Hedef projeye veri dosyalarınıza erişim izni verme

İçe aktarma işlemine başlamadan önce hedef projenizin Cloud Firestore veri dosyalarınıza erişebildiğinden emin olmanız gerekir.

Veri dosyalarını yerel bir pakete taşıma

Kaynak paketinizin konumu, hedef projenizin Cloud Firestore konumundan farklıysa veri dosyalarınızı hedef projenizle aynı konumdaki bir Cloud Storage paketine taşımanız gerekir.

Paketleri Taşıma ve Yeniden Adlandırma bölümündeki adımları uygulayarak veri dosyalarınızı başka bir Cloud Storage paketine taşıyın. Aşağıdaki tüm adımlarda bu yeni paketi [SOURCE_BUCKET] olarak kullanın.

Proje hizmet hesabına kaynak paketinize erişim izni verme

Kaynak paketiniz hedef projenizde değilse hedef projenin varsayılan hizmet hesabına kaynak paketinize erişim izni vermeniz gerekir. Varsayılan hizmet hesabının adı [DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com şeklindedir. Varsayılan hizmet hesabına kaynak paketinize erişim izni vermek için pakete erişimle ilgili uygun izinleri verin.

Cloud Shell'te bulunan gsutil aracı ile gerekli rolleri verebilirsiniz:

Başlat Cloud Shell

gsutil iam ch serviceAccount:[DESTINATION_PROJECT_ID]@appspot.gserviceaccount.com:legacyBucketReader,legacyObjectReader \
gs://[SOURCE_BUCKET]

Bu rolü Google Cloud konsolunda da atayabilirsiniz.

İçe aktarma işlemi başlatma

İçe aktarma işlemine başlamadan önce gcloud aracının doğru proje için yapılandırıldığından emin olun:

gcloud config set project [DESTINATION_PROJECT_ID]

Kaynak paketinizdeki verileri hedef projenize aktarmak için gcloud firestore import komutunu kullanın:

gcloud firestore import gs://[SOURCE_BUCKET]/[EXPORT_PREFIX] --async

Burada [EXPORT_PREFIX], dışa aktarma işleminizin outputUriPrefix değerindeki ön ekle eşleşir. Örneğin:

gcloud firestore import gs://[SOURCE_BUCKET]/2019-03-05T20:58:23_56418 --async

Dışa aktarma işlemi çalışırken işleminizin ilerleme durumunu görüntülemek için firestore operations list komutunu kullanabilirsiniz:

gcloud firestore operations list