在两个 google cloud 项目之间复制数据以及以数据为中心的环境中 DEV 和 PROD 环境的最佳实践



我有两个问题:

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

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

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

第一个问题

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

你是对的。就Google云存储存储桶而言,存储桶名称位于单个云存储命名空间中。根据文件,这意味着:

每个bucket名称都必须是唯一的。Bucket名称是公开可见的。如果您试图创建一个名称已经属于现有存储桶的存储桶,云存储会以错误消息进行响应。但是,一旦删除了一个bucket,您或其他用户就可以将其名称重新用于新的bucket

至于开发和生产环境的最佳实践,我想说,所谓的"关注点分离"将是这里的最佳选择。有一个单独的项目用于开发目的,单独有一个不同的项目用于生产目的将是最合适的。尽管如此,您可以在一个项目中同时运行env和prod这两个环境;不过,在某些情况下,这种选择并不理想。


第二个问题

如何将数据从一个项目复制到另一个项目。我试着搜索,但我无法找到在两个项目之间复制的有效方法。

这个问题的答案可能会有所不同:

  1. 您可以使用gsutil cp命令、REST API或GCS客户端库(Java、Node.js、Python)跨项目复制GCS bucket对象。更多信息可以在这里找到
  2. 您还可以使用云存储数据传输服务将数据从一个云存储存储桶移动到另一个,以便不同的用户或应用程序组都可以使用。有关详细信息,请查看链接

使用gsutil cp的示例如下:

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

其中:

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

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

[DESTINATION_BUCKET_NAME]是要复制对象的bucket的名称。例如,另一个铲斗。

[NAME_OF_COPY]是要为对象的副本命名的名称。例如,shiba.png.


重要事项:确保您具有正确设置的权限来执行此类操作

您还可以查看如何将数据直接从一个谷歌云存储项目移动到另一个?。

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

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

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

  1. 创建两个bucket:

    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. 在源项目中创建bucket:

    gsutil mb gs://testbucket-env
    
  5. 将文件复制到创建的bucket:

    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 
    

在每个环境上创建一个环境变量,如env=prod和env=dev。然后在文件夹前面加上变量名,这样在dev evrything中将是devfiles devdata etc,在prodfiles prodfdata proetc。。。对db表执行同样的操作,然后在引用代码时使用env变量,使其成为ie:f'{env}files'对于文件目录f'{env}users'为您的用户表等

一切都将使用适当的文件目录表等,这取决于它运行的环境,而不做任何更改。总是

我的朋友省去了很多头疼的事。

最新更新