Cloud Storage

Grant Teleskope Access to CloudStorage

Attach the following roles to the Teleskope service account you created:

  • roles/storage.objectViewer
  • roles/pubsub.subscriber
  • roles/pubsub.viewer

Create a PubSub Topic:

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.

Terraform

VariableDescriptionExample
project_id(Required) Your GCP Project ID"my-project-id
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
}