GCP中如何操作Storage中的数据

GCP中如何操作Storage中的数据

前言:我们之前使用了GCP进行了平台迁移的工作,在使用GCP平台过程中遇上了很多问题,一些是因为操作不熟练、一些是因为官方文档不够清晰、还有一些是实践过程中遇上的问题。

今天只讲在Google Cloud Platform中Storage使用上遇到的问题。

Storage

Google Cloud Storage(GCS) 是开发人员和企业适用的整合式物件存储空间。官网有它的详情,包含了它的各种特点的说明(几乎都是优点😅)。
Storage中的数据都是按Bucket存储的。

每个Bucket中可以存储各种文件:图片、文档、音频等。

实际应用场景:从旧平台通过API下载各种文件,这些文件会被下载到运行脚本的机器上,所以需要把本地的数据上传到中间存储位置(Storage)上,然后计算这些文件的数量对不对,再把存在Storage上的数据同步到新平台上(Google Drive或者其他)。

本地如何访问并操作Bucket上的资源

Storage有一个工具叫gsutil,使用它可以操作Storage,例如:

  • 建立一个bucket: gsutil mb gs://bucket-name
  • 复制文件到某一个bucket gsutil cp /path/to/my/local/file gs://bucket-name
  • 复制bucket里的文件到local gsutil cp gs://bucket-name/folder/filename .
  • 刪除bucket上的文件 gsutil rm gs://bucket-name/folder/filename
  • 更多gsutil用法,可以參考:官方文档

如何把本地的文件上传到Storage上

第一种方式就是通过页面控制台去手动上传。
第二种方式就方便很多,通过gsutil工具使用命令行操作。

#把本地文件夹中的文件上传到bucket上
gsutil -m cp -r /path/to/local/folder gs://bucket_name
#从一个Bucket复制一份到另外一个Bucket
gsutil -m cp -r   gs://bucket_name/* gs://another_bucket_name

如何计算Storage上的文件数量

gsutil工具中的ls命令带上options -l (long listing) and -R (recursive listing) 将会显示文件中的所有内容和一个总数:

$ gsutil ls -lR gs://pub

    104413  2011-04-03T20:58:02Z  gs://pub/SomeOfTheTeam.jpg

       172  2012-06-18T21:51:01Z  gs://pub/cloud_storage_storage_schema_v0.json

      1379  2012-06-18T21:51:01Z  gs://pub/cloud_storage_usage_schema_v0.json

   1767691  2013-09-18T07:57:42Z  gs://pub/gsutil.tar.gz

   2445111  2013-09-18T07:57:44Z  gs://pub/gsutil.zip

      1136  2012-07-19T16:01:05Z  gs://pub/gsutil_2.0.ReleaseNotes.txt

... <snipped> ...

gs://pub/apt/pool/main/p/python-socksipy-branch/:

     10372  2013-06-10T22:52:58Z  gs://pub/apt/pool/main/p/python-socksipy-branch/python-socksipy-branch_1.01_all.deb

gs://pub/shakespeare/:

        84  2010-05-07T23:36:25Z  gs://pub/shakespeare/rose.txt

TOTAL: 144 objects, 102723169 bytes (97.96 MB)

如果只想要总数可以使用tail命令

$ gsutil ls -lR gs://pub | tail -n 1

TOTAL: 144 objects, 102723169 bytes (97.96 MB)

UPDATE

gsutil 现在还有一个 du command. 这个命令更加容易得到一个总数。

$ gsutil du gs://pub | wc -l

232

如何挂载GCS的内容到本地

在需求中需要跑一个脚本来把GCS上的数据备份到另外一个地方。那么首先需要获取GCS的数据。这个过程中会使用到一个命令叫gcsfuse

前提:已经获取授权

  • mount 一个Bucket到本地

mkdir /path/to/mount/point
gcsfuse my-bucket /path/to/mount/point

以上只能mount第一层的内容到local,如果想要的子层级的内容都mount到本地需要加上参数

gcsfuse --implicit-dirs "my-bucket" /path/to/mount/point

之后就可以本地通过/path/to/mount/point这个地址访问文件了:
例如通过文件读写,把文件上传到Google Drive上或者一些云平台上。

以上就是和Storage Bucket操作相关的用法。

About The Author

Leave Comment