在业务场景中, 有时我们不想直接暴露数据存储空间给上游系统, 而需要设置1个landing Path 让上游系统发送数据
如图:
我们只需grant landing bucket 的权限给上游系统, 而上游系统是访问不了storage bucket的保证了数据隔离
但是至于怎么把放在landing bucket的文件自动导到Storage Bucket.
我们当然可以写代码, build 一些ETL service去完成, 这个service 定期观察landing bucket是否有新文件到。 有就把文件放入Storage Bucket
Storage Transfer Service 介绍
Google 已经具有个产品叫 Storage Transfer Service, 可以帮我们把文件在两个bucket 之间传输(甚至包括AWS S3 Bucket, 不在本文讨论范围内)
大概原理图:
各组件介绍
src bucket
就是storage transfer service 的源bucket
storage notification
要实现event driven的storage transfer serivce, 我们必须为src bucket 创建1个bucket notification, 一旦有新文件进入or 改动(事件类型可以配置), bucket notfication 会发送一条消息(新文件的元数据) 到1个pubsub topic
参考
https://cloud.google.com/storage/docs/pubsub-notifications
pubsub topic
pubsub 组件是实现event driven 的关键, topic 的主要作用就是用于接受storage notification发送的消息
pubsub pull subscription
subscription 就为了让 后面的 transfer streaming job 去消费消息(发送自storage notification)
Storage Transfer streaming job
这个就是整个流程的核心, 这个job 会24小时启动, 它会monitor pubsub subscription, 一旦有新的消息, 它就回去把文件从src bucket move 到 target bucket
并不难理解
1个具体例子
创建 buckets
首先 我们先创建 两个bucket
jason-hsbc-demo-src
jason-hsbc-demo-target
// define src bucket
resource "google_storage_bucket" "bucket-jason-hsbc-demo-src" {
name = "jason-hsbc-demo-src"
project = var.project_id
location = var.region_id
}
//define target bucket
resource "google_storage_bucket" "bucket-jason-hsbc-demo-target" {
name = "jason-hsbc-demo-target"
project = var.project_id
location = var.region_id
}
创建 pubsub topic 和subscription
topic: top