在以数据为中心的环境中,在两个Google Cloud项目之间复制数据以及DEV&PROD环境的最佳做法

时间:2019-12-18 18:38:18

标签: google-cloud-platform google-cloud-storage cloud-storage

我有两个问题:

  1. 由于存储桶名称是唯一的,因此如何在开发环境和生产环境中保持桶名称完全相同。还是在基于数据的环境中开发和生产环境的最佳实践是什么?

  2. 如何将数据从一个项目复制到另一个项目。我尝试搜索,但无法获得在2个项目之间进行复制的有效方法。

PS:存储传输允许在同一项目中的两个存储桶之间复制,而不是跨项目。即使使用搜索选项,我也无法从其他项目中找到存储桶。我使用gs:// another-project-bucket

搜索

3 个答案:

答案 0 :(得分:0)

  1. 作为最佳实践,我建议使用不同的存储桶进行生产和开发,以避免潜在的未经测试的开发代码影响生产数据。

  2. 如果源对象和目标对象具有相同的位置和存储类,则复制是高效的(仅元数据,无数据复制)。

答案 1 :(得分:0)

  

如何将数据从一个项目复制到另一个项目。我尝试搜寻,但我   无法获得在2个项目之间进行复制的有效方法。

  1. 创建两个存储桶:

    gcloud projects create env-proj
    gcloud projects create env-proj2
    
  2. 将项目属性设置为源项目:

    gcloud config set project env-proj
    
  3. 在源项目中创建文件:

    nano file
    cat file
    # This is a file 
    
  4. 在源项目中创建存储桶:

    gsutil mb gs://testbucket-env
    
  5. 将文件复制到创建的存储桶中:

    gsutil cp file gs://testbucket-env
    
  6. 将项目属性设置为目标项目:

    gcloud config set project env-proj2
    
  7. 将文件复制到目标项目:

    gsutil mv gs://testbucket-env/file  file
    
  8. 测试:

    cat file
    # This is a file 
    

答案 2 :(得分:0)

第一个问题

  

由于存储桶名称是唯一的,因此如何在开发环境和生产环境中保持桶名称完全相同。还是在基于数据的环境中开发和生产环境的最佳实践是什么?

您是正确的。就Google Cloud Storage存储桶而言,存储桶名称位于单个Cloud Storage名称空间中。根据{{​​3}},这意味着:

每个存储桶名称必须唯一。 桶名称是公开可见的。 如果您尝试使用已经属于现有存储桶的名称创建存储桶,则Cloud Storage会显示一条错误消息。但是,删除存储桶后,您或其他用户可以将其名称重新用于新存储桶。

关于开发和生产环境的最佳实践,我想说的是所谓的“关注点分离”将是最好的选择。最适合的选择是为开发目的使用一个项目,而为生产目的而单独使用另一个项目。但是,您可以在单个项目中同时运行env和prod这两种环境。不过,在某些情况下,此选项并不理想。


第二个问题

  

如何将数据从一个项目复制到另一个项目。我尝试搜索,但无法获得在2个项目之间进行复制的有效方法。

此问题的答案可能有所不同:

  1. 您可以使用gsutil cp命令,REST API或GCS客户端库(Java,Node.js,Python)在整个项目中复制GCS存储桶对象。可以找到更多信息documentation
  2. 您还可以使用here将数据从一个Cloud Storage存储桶移动到另一个Cloud Storage存储桶,以便不同的用户或应用程序组都可以使用。检查Cloud Storage Data Transfer Service以获得更多信息。

使用gsutil cp的示例如下:

gsutil cp gs://[SOURCE_BUCKET_NAME]/[SOURCE_OBJECT_NAME] gs://[DESTINATION_BUCKET_NAME]/[NAME_OF_COPY]

位置:

[SOURCE_BUCKET_NAME]是包含要复制的对象的存储桶的名称。例如,我的桶。

[SOURCE_OBJECT_NAME]是要复制的对象的名称。例如pets / dog.png。

[DESTINATION_BUCKET_NAME]是要在其中复制对象的存储桶的名称。例如另一个水桶。

[NAME_OF_COPY]是您要提供对象副本的名称。例如shiba.png。


重要提示:请确保您具有执行此类型操作的正确设置权限

您还可以选中link