Grant Teleskope Access to CloudStorage
In order for Teleskope to capture new objects without causing a full scan each time, you will need to create a PubSub topic and subscriber.
resource "google_project_iam_member" "teleskope" {
for_each = toset([
"roles/storage.objectViewer",
"roles/pubsub.subscriber",
"roles/pubsub.viewer"
])
project = "project_id"
role = each.key
member = "serviceAccount:${google_service_account.teleskope.email}"
}
resource "google_pubsub_topic" "pubsub_teleskope" {
project = "project_id"
name = "teleskope"
}
resource "google_pubsub_subscription" "pubsub_teleskope" {
name = "teleskope"
project = "project_id"
topic = "${google_pubsub_topic.pubsub_teleskope.name}"
}
For each bucket, please set up cloud storage notifications to the topic created above.
data "google_storage_project_service_account" "gcs_account" {
}
resource "google_storage_notification" "notification" {
bucket = "bucket_name"
payload_format = "JSON_API_V1"
topic = "${google_pubsub_topic.pubsub_teleskope.name}"
event_types = ["OBJECT_FINALIZE", "OBJECT_METADATA_UPDATE"]
depends_on = [google_pubsub_topic_iam_binding.binding]
}
resource "google_pubsub_topic_iam_member" "pubsub_member" {
member = "serviceAccount:${data.google_storage_project_service_account.gcs_service_account.email_address}"
role = "roles/pubsub.publisher"
topic = google_pubsub_topic.pubsub_teleskope.id
}