前言:博主之前使用了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操作相关的用法。