项目之间的Firestore和Storage Bucket导出/导入

时间:2019-01-13 22:12:07

标签: firebase google-cloud-firestore google-cloud-storage

因此,在Google Cloud CLI的当前Beta功能中,可以选择导入和导出Firestore数据。 Painting in AWT and Swing

现在,我进行了“导出到存储桶”操作,一切正常,然后再次导入,效果也很好。现在我有两个不同的项目,想将备份导入到另一个项目中,这可能吗?如果我也只需要一个项目的计费帐户,那会很好。

文档中的这一行说明了可能的

  

一旦您在Cloud Storage中导出了文件,就可以导入文档   将这些文件中的文件放回您的项目或另一个项目中。

但是文档没有涵盖其完成情况如何?

4 个答案:

答案 0 :(得分:3)

可以在项目之间导入/导出。以下是对我有用的步骤:

首先,请确保已安装gcloud命令行工具。设置说明, 可以在Firebase的文档中阅读有关导出/导入过程的完整信息 关于Firestore Export and Import的页面。

在继续之前,将gcloud项目设置为要从其获取数据的项目:

gcloud config set project [PROJECT_ID]

然后使用 Google Cloud Console Web应用程序,确保已在 Cloud Storage 存储桶上创建了 该项目将成为数据的

例如,对于源存储桶,您可以创建一个存储桶,例如:

gs://my-source-project-export

只要选择独特的东西,您就可以为存储桶命名。

然后可以使用命令完成源数据的导出。例如,如果您要导出 仅将camerasradios集合添加到my-source-project-export存储桶中,并带有一个 注明日期的目录以标识导出,您可以包括可选的collection-ids标志,如下所示:

gcloud beta firestore export gs://my-source-project-export/export-20190113_2109 --collection-ids='cameras','radios'

省略该标志将复制所有集合。

gcloud CLI工具应该可以顺利完成导出。

现在,要完成导入,我们首先将gcloud项目切换到 target 以获取数据:

gcloud config set project [PROJECT_ID]

然后,我们可以尝试导入:

gcloud beta firestore import --collection-ids='cameras','radios' gs://my-source-project-export/export-20190113_2109

由于权限问题,该操作可能会失败。如果是这样,它将报告需要哪个服务帐户 进入水桶。要解决权限问题,您只需使用 Google Cloud Console Storage Browser来管理 source 存储桶的权限。必须将所需的服务帐户添加到成员列表中, 角色Storage Admin

更正权限后,可以重新尝试该操作。对于长时间运行的操作,列表 可以使用以下命令检索操作及其状态的信息:

gcloud beta firestore operations list

导入完成后,最好撤消授予服务帐户的权限(如果有的话),以避免任何不必要的安全问题。

希望有帮助。

答案 1 :(得分:0)

接受的答案对我不起作用。无论在源存储桶上授予了什么权限,导入始终都会失败,并显示PERMISSION DENIED: The caller does not have permission

解决方案是创建另一个服务帐户。我在具有Cloud Datastore Import Export AdminStorage Admin角色的目标项目上创建了一个服务帐户。然后,我将此服务帐户添加到具有相同角色的源项目IAM中。完成此操作后,以下过程对我有用:

gcloud auth activate-service-account --key-file=./mynewserviceaccount.json
gcloud beta firestore export gs://mysourceprojectbucket --project mysourceprojectid
gcloud beta firestore import gs://mysourceprojectbucket/WHATEVER_NAME_FROM_EXPORT --project mydestinationproject

答案 2 :(得分:0)

主要步骤: 确保在两个项目中都启用了计费。

对于PROJECT_1,

  1. 在以下位置的Google Cloud Storage中创建存储桶(BUCKET_1): PROJECT_1
  2. 使用Cloud Shell将Firestore数据导出到BUCKET_1
  3. 获取PROJECT_2的服务帐户,并在其中授予“存储管理员”权限 BUCKET_1

PROJECT_2

从BUCKET_1导入数据

我已在此blog post

中放置了所有步骤的输出

答案 3 :(得分:0)

就我而言,目标数据库没有写规则。

切换自:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if false;
    }
  }
}

收件人:

rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true; /* Allow writes by setting true here */
    }
  }
}

解决了我的问题