因此,在Google Cloud CLI的当前Beta功能中,可以选择导入和导出Firestore数据。 Painting in AWT and Swing
现在,我进行了“导出到存储桶”操作,一切正常,然后再次导入,效果也很好。现在我有两个不同的项目,想将备份导入到另一个项目中,这可能吗?如果我也只需要一个项目的计费帐户,那会很好。
文档中的这一行说明了可能的
一旦您在Cloud Storage中导出了文件,就可以导入文档 将这些文件中的文件放回您的项目或另一个项目中。
但是文档没有涵盖其完成情况如何?
答案 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
。
只要选择独特的东西,您就可以为存储桶命名。
然后可以使用命令完成源数据的导出。例如,如果您要导出
仅将cameras
和radios
集合添加到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 Admin
和Storage 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,
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 */
}
}
}
解决了我的问题