Membuat langganan Cloud Storage

Dokumen ini menjelaskan cara membuat langganan Cloud Storage. Anda dapat menggunakan konsol Trusted Cloud , Google Cloud CLI, library klien, atau Pub/Sub API untuk membuat langganan Cloud Storage.

Sebelum memulai

Sebelum membaca dokumen ini, pastikan Anda memahami hal-hal berikut:

Peran dan izin yang diperlukan

Berikut adalah daftar panduan terkait peran dan izin:

  • Untuk membuat langganan, Anda harus mengonfigurasi kontrol akses di tingkat project.

  • Anda juga memerlukan izin tingkat resource jika langganan dan topik Anda berada di project yang berbeda, seperti yang dibahas nanti di bagian ini.

  • Untuk membuat langganan Cloud Storage, agen layanan Pub/Sub atau akun layanan kustom harus memiliki izin untuk menulis ke bucket Cloud Storage tertentu dan membaca metadata bucket. Untuk mengetahui informasi selengkapnya tentang cara memberikan izin ini, lihat bagian berikutnya dalam dokumen ini.

Untuk mendapatkan izin yang Anda perlukan guna membuat langganan Cloud Storage, minta administrator Anda untuk memberi Anda peran IAM Pub/Sub Editor (roles/pubsub.editor) di project. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses ke project, folder, dan organisasi.

Peran bawaan ini berisi izin yang diperlukan untuk membuat langganan Cloud Storage. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat langganan Cloud Storage:

  • Buat langganan: pubsub.subscriptions.create
  • Melampirkan langganan ke topik: pubsub.topics.attachSubscription
  • Menarik dari langganan: pubsub.subscriptions.consume
  • Mendapatkan langganan: pubsub.subscriptions.get
  • Mencantumkan langganan: pubsub.subscriptions.list
  • Memperbarui langganan: pubsub.subscriptions.update
  • Menghapus langganan: pubsub.subscriptions.delete
  • Dapatkan kebijakan IAM untuk langganan: pubsub.subscriptions.getIamPolicy
  • Konfigurasi kebijakan IAM untuk langganan: pubsub.subscriptions.setIamPolicy

Anda mungkin juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaan lainnya.

Untuk mengizinkan akun utama di satu project membuat langganan Cloud Storage di project lain, Anda harus memberikan peran Editor Pub/Sub (roles/pubsub.editor) kepada akun utama tersebut di kedua project. Tindakan ini memberikan izin yang diperlukan untuk membuat langganan Trusted Cloud baru dan melampirkannya ke topik asli. Peran Pub/Sub Editor (roles/pubsub.editor) pada topik juga membantu Anda melampirkan langganan Trusted Cloud dalam project yang berbeda ke topik.

Menetapkan peran ke akun layanan

Beberapa layanan memiliki akun layanan yang dikelola Trusted Cloud by S3NS layanan yang memungkinkan layanan mengakses resource Anda. Trusted CloudAkun layanan ini dikenal sebagai agen layanan. Pub/Sub membuat dan mengelola agen layanan untuk setiap project dalam format service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

Anda dapat memilih antara memberikan izin agen layanan Pub/Sub atau akun layanan kustom untuk menulis ke bucket Cloud Storage.

Memberi izin kepada agen layanan Pub/Sub berarti setiap pengguna yang memiliki izin untuk membuat langganan di project Anda dapat menulis ke bucket Cloud Storage. Jika Anda ingin memberikan izin yang lebih terperinci untuk menulis ke bucket Cloud Storage, konfigurasi akun layanan kustom.

Untuk mengetahui informasi selengkapnya tentang IAM Cloud Storage, lihat Cloud Storage Identity and Access Management.

Menetapkan peran Cloud Storage ke agen layanan Pub/Sub

Jika Anda ingin membuat langganan Cloud Storage menggunakan agen layanan Pub/Sub, agen tersebut harus memiliki izin untuk menulis ke bucket Cloud Storage tertentu dan membaca metadata bucket.

Berikan peran Storage Object Creator (roles/storage.objectCreator) dan Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) kepada agen layanan Pub/Sub. Anda dapat memberikan izin pada bucket tertentu atau pada project secara keseluruhan.

Bucket

  1. Di Trusted Cloud konsol, buka halaman Cloud Storage.

    Buka Cloud Storage

  2. Klik bucket Cloud Storage yang ingin Anda tulis pesannya.

    Halaman Bucket details akan terbuka.

  3. Di halaman Detail bucket, klik tab Izin.

  4. Di tab Izin > Lihat menurut akun utama, klik Berikan akses.

    Halaman Berikan akses akan terbuka.

  5. Di bagian Add principals, masukkan nama agen layanan Pub/Sub untuk project yang berisi langganan.

    Format agen layanan adalah service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Misalnya, untuk project dengan PROJECT_NUMBER=112233445566, agen layanan memiliki format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  6. Di drop-down Assign roles > Select a role, masukkan Creator dan pilih peran Storage Object Creator.

  7. Klik Add another role.

  8. Di drop-down Pilih peran, masukkan Bucket Reader, lalu pilih peran Storage Legacy Bucket Reader.

  9. Klik Simpan.

Project

  1. Di konsol Trusted Cloud , buka halaman IAM.

    Buka IAM

  2. Di tab Izin > Lihat menurut akun utama, klik Berikan akses.

    Halaman Berikan akses akan terbuka.

  3. Di bagian Add principals, masukkan nama agen layanan Pub/Sub Anda.

    Format agen layanan adalah service-PROJECT_NUMBER@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Misalnya, untuk project dengan PROJECT_NUMBER=112233445566, agen layanan memiliki format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  4. Di drop-down Assign roles > Select a role, masukkan Storage Admin, lalu pilih peran Storage Admin.

  5. Klik Simpan.

Menetapkan peran Cloud Storage ke akun layanan kustom

Jika ingin menggunakan akun layanan kustom untuk menulis ke bucket Cloud Storage, Anda harus menetapkan izin berikut:

  • Akun layanan kustom harus memiliki izin untuk menulis ke bucket Cloud Storage tertentu dan membaca metadata bucket.
  • Agen layanan Pub/Sub harus memiliki izin iam.serviceAccounts.getAccessToken untuk akun layanan kustom.
  • Pengguna yang membuat langganan harus memiliki izin iam.serviceAccounts.actAs di akun layanan kustom.

Buat akun layanan dan berikan izin dengan langkah-langkah berikut:

  1. Buat akun layanan kustom. Akun layanan harus berada dalam project yang sama dengan langganan.

  2. Berikan peran Storage Object Creator (roles/storage.objectCreator) dan Storage Legacy Bucket Reader (roles/storage.legacyBucketReader) ke akun layanan kustom.

    Anda dapat memberikan izin akun layanan pada satu tabel dalam project atau pada semua tabel dalam project. Untuk melakukannya, lihat bagian yang sesuai di Menetapkan peran Trusted Cloud kepada agen layanan Pub/Sub. Dalam prosedur ini, ganti alamat email agen layanan Pub/Sub dengan alamat email akun layanan kustom.

  3. Berikan izin iam.serviceAccounts.getAccessToken kepada agen layanan Pub/Sub di akun layanan kustom atau di semua akun layanan dalam project. Anda dapat memberikan izin ini dengan memberikan peran roles/iam.serviceAccountTokenCreator kepada agen layanan Pub/Sub.

    Pilih metode yang sesuai berdasarkan persyaratan Anda.

Akun layanan

  1. Di konsol Trusted Cloud , buka halaman Service accounts.

    Buka halaman Service accounts

  2. Masukkan nama akun layanan kustom di Filter.

  3. Pilih akun layanan dari daftar.

  4. Klik Principals with access.

  5. Klik Grant access.

  6. Di bagian Add principals, masukkan nama agen layanan Pub/Sub untuk project yang berisi langganan. Format agen layanan adalah service-project-number@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com. Misalnya, untuk project dengan project-number=112233445566, agen layanan memiliki format service-112233445566@gcp-sa-pubsub.s3ns-system.iam.gserviceaccount.com.

  7. Di menu drop-down Select a role, masukkan Service Account, lalu pilih peran Service Account Token Creator.

  8. Klik Simpan.

Project

  1. Di konsol Trusted Cloud , buka halaman IAM.

    Buka IAM

  2. Klik Grant access.

  3. Di bagian Add principals, masukkan nama akun layanan kustom Anda.

  4. Di bagian Tetapkan peran, klik Tambahkan peran lain.

  5. Di menu drop-down Select a role, masukkan Service Account, lalu pilih peran Service Account Token Creator.

  6. Klik Simpan.

Jika Anda membuat akun layanan kustom, Anda seharusnya sudah memiliki izin iam.serviceAccounts.actAs yang diperlukan. Jika Anda perlu memberi orang lain izin di akun layanan:

  1. Di konsol Trusted Cloud , buka halaman Service accounts.

    Buka halaman Service accounts

  2. Masukkan nama akun layanan kustom di Filter.

  3. Pilih akun layanan dari daftar.

  4. Klik Principals with access.

  5. Klik Grant access.

  6. Di bagian Add principals, masukkan nama akun yang ingin Anda berikan akses.

  7. Di drop-down Select a role, masukkan Service Account, lalu pilih peran Service Account User.

  8. Klik Simpan.

Properti langganan Cloud Storage

Saat mengonfigurasi langganan Cloud Storage, Anda harus menentukan properti yang umum untuk semua jenis langganan dan beberapa properti tambahan khusus langganan Cloud Storage.

Properti langganan umum

Pelajari properti langganan umum yang dapat Anda tetapkan di semua langganan.

Nama bucket

Bucket Cloud Storage harus sudah ada sebelum Anda membuat langganan Cloud Storage.

Pesan dikirim sebagai batch dan disimpan di bucket Cloud Storage. Satu batch atau file disimpan sebagai objek dalam bucket.

Bucket Cloud Storage harus menonaktifkan Requester Pays.

Untuk membuat bucket Cloud Storage, lihat Membuat bucket.

Awalan, akhiran, dan tanggal waktu nama file

File Cloud Storage output yang dihasilkan oleh langganan Cloud Storage disimpan sebagai objek di bucket Cloud Storage. Nama objek yang disimpan di bucket Cloud Storage memiliki format berikut: <file-prefix><UTC-date-time>_<uuid><file-suffix>.

Daftar berikut mencakup detail format file dan kolom yang dapat Anda sesuaikan:

  • <file-prefix> adalah awalan nama file kustom. Kolom ini bersifat opsional.

  • <UTC-date-time> adalah string yang dibuat otomatis dan dapat disesuaikan berdasarkan waktu saat objek dibuat.

  • <uuid> adalah string acak yang dibuat otomatis untuk objek.

  • <file-suffix> adalah sufiks nama file kustom. Kolom ini bersifat opsional. Sufiks nama file tidak boleh diakhiri dengan "/".

  • Anda dapat mengubah awalan dan akhiran nama file:

    • Misalnya, jika nilai awalan nama file adalah prod_ dan nilai akhiran nama file adalah _archive, contoh nama objek adalah prod_2023-09-25T04:10:00+00:00_uN1QuE_archive.

    • Jika Anda tidak menentukan awalan dan akhiran nama file, nama objek yang disimpan di bucket Cloud Storage akan memiliki format: <UTC-date-time>_<uuid>.

    • Persyaratan penamaan objek Cloud Storage juga berlaku untuk awalan dan akhiran nama file. Untuk mengetahui informasi selengkapnya, lihat Tentang objek Cloud Storage.

  • Anda dapat mengubah cara tanggal dan waktu ditampilkan dalam nama file:

    • Pencocokan tanggal dan waktu wajib yang hanya dapat Anda gunakan satu kali: tahun (YYYY atau YY), bulan (MM), hari (DD), jam (hh), menit (mm), detik (ss). Misalnya, YY-YYYY atau MMM tidak valid.

    • Pencocok opsional yang dapat Anda gunakan hanya sekali: pemisah tanggal dan waktu (T) dan dan selisih zona waktu (Z atau +00:00).

    • Elemen opsional yang dapat Anda gunakan beberapa kali: tanda hubung (-), garis bawah (_), titik dua (:), dan garis miring (/).

    • Misalnya, jika nilai format tanggal waktu nama file adalah YYYY-MM-DD/hh_mm_ssZ, contoh nama objek adalah prod_2023-09-25/04_10_00Z_uNiQuE_archive.

    • Jika format tanggal dan waktu nama file diakhiri dengan karakter yang bukan pencocok, karakter tersebut akan menggantikan pemisah antara <UTC-date-time> dan <uuid>. Misalnya, jika nilai format tanggal waktu nama file adalah YYYY-MM-DDThh_mm_ss-, contoh nama objek adalah prod_2023-09-25T04_10_00-uNiQuE_archive.

Pengelompokan file dalam batch

Langganan Cloud Storage memungkinkan Anda memutuskan kapan Anda ingin membuat file output baru yang disimpan sebagai objek di bucket Cloud Storage. Pub/Sub menulis file output saat salah satu kondisi pengelompokan yang ditentukan terpenuhi. Berikut adalah kondisi batching Cloud Storage:

  • Durasi maksimum batch penyimpanan. Ini adalah setelan yang wajib diisi. Langganan Cloud Storage menulis file output baru jika nilai durasi maksimum yang ditentukan terlampaui. Jika Anda tidak menentukan nilai, nilai default 5 menit akan diterapkan. Berikut adalah nilai yang berlaku untuk durasi maks:

    • Nilai minimum = 1 menit
    • Nilai default = 5 menit
    • Nilai maksimum = 10 menit
  • Byte maksimum batch penyimpanan. Setelan ini bersifat opsional. Langganan Cloud Storage menulis file output baru jika nilai maksimum byte yang ditentukan terlampaui. Berikut adalah nilai yang berlaku untuk byte maks:

    • Nilai minimum = 1 KB
    • Nilai maksimum = 10 GiB
  • Pesan maksimum batch penyimpanan. Setelan ini bersifat opsional. Langganan Cloud Storage menulis file output baru jika jumlah maksimum pesan yang ditentukan terlampaui. Berikut adalah nilai yang berlaku untuk pesan maks:

    • Nilai minimum = 1000

Misalnya, Anda dapat mengonfigurasi durasi maks. sebagai 6 menit dan byte maks. sebagai 2 GB. Jika pada menit ke-4, file output mencapai ukuran file 2 GB, Pub/Sub akan menyelesaikan file sebelumnya dan mulai menulis ke file baru.

Langganan Cloud Storage dapat menulis ke beberapa file di bucket Cloud Storage secara bersamaan. Jika telah mengonfigurasi langganan untuk membuat file baru setiap 6 menit, Anda mungkin melihat beberapa file Cloud Storage dibuat setiap 6 menit.

Dalam beberapa situasi, Pub/Sub mungkin mulai menulis ke file baru lebih awal dari waktu yang dikonfigurasi oleh kondisi pengelompokan file. File juga dapat melebihi nilai Byte maks jika langganan menerima pesan yang lebih besar dari nilai Byte maks.

Format file

Saat membuat langganan Cloud Storage, Anda dapat menentukan format file output yang akan disimpan di bucket Cloud Storage sebagai Teks atau Avro.

  • Teks: Pesan disimpan sebagai teks biasa. Karakter baris baru memisahkan pesan dari pesan sebelumnya dalam file. Hanya payload pesan yang disimpan, bukan atribut atau metadata lainnya.

  • Avro: Pesan disimpan dalam format biner Apache Avro. Saat memilih Avro, Anda dapat mengaktifkan properti tambahan berikut:

    • Tulis metadata: Opsi ini memungkinkan Anda menyimpan metadata pesan bersama dengan pesan. Metadata seperti kolom subscription_name, message_id, publish_time, dan attributes ditulis ke kolom tingkat teratas dalam objek Avro output, sementara semua properti pesan lainnya selain data (misalnya, ordering_key, jika ada) ditambahkan sebagai entri dalam peta attributes.

      Jika write metadata dinonaktifkan, hanya payload pesan yang ditulis ke objek Avro output. Berikut adalah skema Avro untuk pesan output dengan tulis metadata dinonaktifkan:

      {
        "type": "record",
        "namespace": "com.google.pubsub",
        "name": "PubsubMessage",
        "fields": [
          { "name": "data", "type": "bytes" }
        ]
      }
      

      Berikut adalah skema Avro untuk pesan output dengan tulis metadata yang diaktifkan:

      {
        "type": "record",
        "namespace": "com.google.pubsub",
        "name": "PubsubMessageWithMetadata",
        "fields": [
          { "name": "subscription_name", "type": "string" },
          { "name": "message_id", "type": "string"  },
          { "name": "publish_time", "type": {
              "type": "long",
              "logicalType": "timestamp-micros"
            }
          },
          { "name": "attributes", "type": { "type": "map", "values": "string" } },
          { "name": "data", "type": "bytes" }
        ]
      }
      
    • Gunakan skema topik: Opsi ini memungkinkan Pub/Sub menggunakan skema topik Pub/Sub yang menjadi tujuan langganan saat menulis file Avro.

      Saat Anda menggunakan opsi ini, jangan lupa untuk memeriksa persyaratan tambahan berikut:

      • Skema topik harus dalam format Apache Avro.

      • Jika gunakan skema topik dan tulis metadata diaktifkan, skema topik harus memiliki objek Record di root-nya. Pub/Sub akan memperluas daftar kolom Record untuk menyertakan kolom metadata. Akibatnya, Rekaman tidak boleh berisi kolom dengan nama yang sama dengan kolom metadata (subscription_name, message_id, publish_time, atau attributes).

Akun layanan

Anda memiliki opsi berikut untuk menulis pesan ke tabel BigQuery atau bucket Cloud Storage:

  • Konfigurasi akun layanan kustom sehingga hanya pengguna yang memiliki izin iam.serviceAccounts.actAs di akun layanan yang dapat membuat langganan yang menulis ke tabel atau bucket. Contoh peran yang menyertakan izin iam.serviceAccounts.actAs adalah peran Service Account User (roles/iam.serviceAccountUser).

  • Gunakan agen layanan Pub/Sub default yang memungkinkan pengguna mana pun dengan kemampuan untuk membuat langganan di project guna membuat langganan yang menulis ke tabel atau bucket. Agen layanan Pub/Sub adalah setelan default jika Anda tidak menentukan akun layanan kustom.

Membuat langganan Cloud Storage

Konsol

  1. Di konsol Trusted Cloud , buka halaman Subscriptions.

    Buka Langganan

  2. Klik Buat langganan.

  3. Untuk kolom Subscription ID, masukkan nama.

    Untuk mengetahui informasi tentang cara memberi nama langganan, lihat Pedoman untuk memberi nama topik atau langganan.

  4. Pilih atau buat topik dari menu drop-down.

    Langganan menerima pesan dari topik.

    Untuk mengetahui informasi tentang cara membuat topik, lihat Membuat dan mengelola topik.

  5. Pilih Jenis pengiriman sebagai Tulis ke Cloud Storage.

  6. Untuk bucket Cloud Storage, klik Browse.

    • Anda dapat memilih bucket yang ada dari project yang sesuai.

    • Anda juga dapat mengklik ikon buat dan mengikuti petunjuk di layar untuk membuat bucket baru.

      Setelah membuat bucket, pilih bucket untuk langganan Cloud Storage.

      Untuk mengetahui informasi selengkapnya tentang cara membuat bucket, lihat Membuat bucket.

    Saat Anda menentukan bucket, Pub/Sub akan memeriksa izin yang sesuai pada bucket untuk agen layanan Pub/Sub. Jika ada masalah izin, Anda akan melihat pesan yang mirip dengan berikut: Unable to verify if the Pub/Sub service agent has write permissions on this bucket. You may be lacking permissions to view or set permissions.

  7. Jika Anda mengalami masalah izin, klik Setel Izin dan ikuti petunjuk di layar.

    Atau, ikuti petunjuk di Menetapkan peran Cloud Storage ke agen layanan Pub/Sub.

  8. Untuk File format, pilih Text atau Avro.

    Jika memilih Avro, Anda juga dapat menentukan secara opsional apakah Anda ingin menyimpan metadata pesan dalam output.

    Untuk mengetahui informasi selengkapnya tentang kedua opsi tersebut, termasuk opsi metadata pesan untuk format Avro, lihat Format file.

  9. Opsional: Anda dapat menentukan Awalan, akhiran, dan tanggal waktu nama file untuk semua file yang akan ditulis ke bucket Cloud Storage. File disimpan sebagai objek dalam bucket.

    Untuk mengetahui informasi selengkapnya tentang cara menetapkan awalan, akhiran, dan tanggal waktu file, lihat Awalan, akhiran, dan tanggal waktu nama file.

  10. Untuk Pengelompokan file, tentukan waktu maksimum yang akan berlalu sebelum membuat file baru.

    Anda juga dapat secara opsional menetapkan ukuran file maksimum atau jumlah maksimum pesan untuk file.

    Untuk mengetahui informasi selengkapnya tentang kedua opsi pengelompokan file, lihat Pengelompokan file.

  11. Sebaiknya aktifkan Surat yang tidak terkirim untuk menangani kegagalan pesan.

    Untuk mengetahui informasi selengkapnya, lihat Topik dead letter.

  12. Anda dapat mempertahankan setelan lainnya sebagai default dan mengklik Buat.

gcloud

  1. In the Trusted Cloud console, activate Cloud Shell.

    Activate Cloud Shell

    At the bottom of the Trusted Cloud console, a Cloud Shell session starts and displays a command-line prompt. Cloud Shell is a shell environment with the Google Cloud CLI already installed and with values already set for your current project. It can take a few seconds for the session to initialize.

  2. Untuk membuat langganan Cloud Storage, jalankan perintah gcloud pubsub subscriptions create.
    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --cloud-storage-bucket=BUCKET_NAME \
        --cloud-storage-file-prefix=CLOUD_STORAGE_FILE_PREFIX \
        --cloud-storage-file-suffix=CLOUD_STORAGE_FILE_SUFFIX \
        --cloud-storage-file-datetime-format=CLOUD_STORAGE_FILE_DATETIME_FORMAT \
        --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \
        --cloud-storage-max-bytes=CLOUD_STORAGE_MAX_BYTES \
        --cloud-storage-max-messages=CLOUD_STORAGE_MAX_MESSAGES \
        --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \
        --cloud-storage-write-metadata
        --cloud-storage-use-topic-schema

    Jika Anda ingin menggunakan akun layanan kustom, berikan sebagai argumen tambahan:

    gcloud pubsub subscriptions create SUBSCRIPTION_ID \
        --topic=TOPIC_ID \
        --cloud-storage-bucket=BUCKET_NAME \
        --cloud-storage-file-prefix=CLOUD_STORAGE_FILE_PREFIX \
        --cloud-storage-file-suffix=CLOUD_STORAGE_FILE_SUFFIX \
        --cloud-storage-file-datetime-format=CLOUD_STORAGE_FILE_DATETIME_FORMAT \
        --cloud-storage-max-duration=CLOUD_STORAGE_MAX_DURATION \
        --cloud-storage-max-bytes=CLOUD_STORAGE_MAX_BYTES \
        --cloud-storage-max-messages=CLOUD_STORAGE_MAX_MESSAGES \
        --cloud-storage-output-format=CLOUD_STORAGE_OUTPUT_FORMAT \
        --cloud-storage-write-metadata
        --cloud-storage-use-topic-schema
        --cloud-storage-service-account-email=SERVICE_ACCOUNT_NAME
        

    Dalam perintah, hanya SUBSCRIPTION_ID, flag --topic, dan flag --cloud-storage-bucket yang diperlukan. Flag lainnya bersifat opsional dan dapat dihilangkan.

    Ganti kode berikut:

    • SUBSCRIPTION_ID: Nama atau ID langganan Cloud Storage baru Anda.
    • TOPIC_ID: Nama atau ID topik Anda.
    • BUCKET_NAME: Menentukan nama bucket yang ada. Contoh, prod_bucket. Nama bucket tidak boleh menyertakan project ID. Untuk membuat bucket, lihat Membuat bucket.
    • CLOUD_STORAGE_FILE_PREFIX: Menentukan awalan untuk nama file Cloud Storage. Misalnya, log_events_.
    • CLOUD_STORAGE_FILE_SUFFIX: Menentukan akhiran untuk nama file Cloud Storage. Misalnya, .txt.
    • CLOUD_STORAGE_FILE_DATETIME_FORMAT: Menentukan format tanggal dan waktu untuk nama file Cloud Storage. Contoh, YYYY-MM-DD/hh_mm_ssZ.
    • CLOUD_STORAGE_MAX_DURATION: Durasi maksimum yang dapat berlalu sebelum file Cloud Storage baru dibuat. Nilai harus antara 1m dan 10m. Misalnya, 5m.
    • CLOUD_STORAGE_MAX_BYTES: Byte maksimum yang dapat ditulis ke file Cloud Storage sebelum file baru dibuat. Nilai harus antara 1 KB hingga 10 GB. Misalnya, 20MB.
    • CLOUD_STORAGE_MAX_MESSAGES: Jumlah maksimum pesan yang dapat ditulis ke file Cloud Storage sebelum file baru dibuat. Nilai harus lebih besar dari atau sama dengan 1000. Contoh, 100000.
    • CLOUD_STORAGE_OUTPUT_FORMAT: Format output untuk data yang ditulis ke Cloud Storage. Nilainya adalah sebagai berikut:
      • text: Pesan ditulis sebagai teks mentah, dipisahkan dengan baris baru.
      • avro: Pesan ditulis sebagai biner Avro. --cloud-storage-write-metadata dan --cloud-storage-use-topic-schema hanya memengaruhi langganan dengan format output avro.
    • SERVICE_ACCOUNT_NAME: Menentukan nama akun layanan yang akan digunakan untuk menulis ke Cloud Storage.
  3. C++

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C++ di Panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C++ Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

    Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::SubscriptionAdminClient client,
       std::string const& project_id, std::string const& topic_id,
       std::string const& subscription_id, std::string const& bucket) {
      google::pubsub::v1::Subscription request;
      request.set_name(
          pubsub::Subscription(project_id, subscription_id).FullName());
      request.set_topic(pubsub::Topic(project_id, topic_id).FullName());
      request.mutable_cloud_storage_config()->set_bucket(bucket);
      auto sub = client.CreateSubscription(request);
      if (!sub) {
        if (sub.status().code() == google::cloud::StatusCode::kAlreadyExists) {
          std::cout << "The subscription already exists\n";
          return;
        }
        throw std::move(sub).status();
      }
    
      std::cout << "The subscription was successfully created: "
                << sub->DebugString() << "\n";
    }

    C#

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan C# di Panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API C# Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

    Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

    
    using Google.Cloud.PubSub.V1;
    using Google.Protobuf.WellKnownTypes;
    using System;
    
    public class CreateCloudStorageSubscriptionSample
    {
        public Subscription CreateCloudStorageSubscription(string projectId, string topicId, string subscriptionId,
            string bucket, string filenamePrefix, string filenameSuffix, TimeSpan maxDuration)
        {
            SubscriberServiceApiClient subscriber = SubscriberServiceApiClient.Create();
            TopicName topicName = TopicName.FromProjectTopic(projectId, topicId);
            SubscriptionName subscriptionName = SubscriptionName.FromProjectSubscription(projectId, subscriptionId);
    
            var subscriptionRequest = new Subscription
            {
                SubscriptionName = subscriptionName,
                TopicAsTopicName = topicName,
                CloudStorageConfig = new CloudStorageConfig
                {
                    Bucket = bucket,
                    FilenamePrefix = filenamePrefix,
                    FilenameSuffix = filenameSuffix,
                    MaxDuration = Duration.FromTimeSpan(maxDuration)
                }
            };
            var subscription = subscriber.CreateSubscription(subscriptionRequest);
            return subscription;
        }
    }

    Go

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Go di Panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Go Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

    Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

    import (
    	"context"
    	"fmt"
    	"io"
    	"time"
    
    	"cloud.google.com/go/pubsub/v2"
    	"cloud.google.com/go/pubsub/v2/apiv1/pubsubpb"
    	"google.golang.org/protobuf/types/known/durationpb"
    )
    
    // createCloudStorageSubscription creates a Pub/Sub subscription that exports messages to Cloud Storage.
    func createCloudStorageSubscription(w io.Writer, projectID, topic, subscription, bucket string) error {
    	// projectID := "my-project-id"
    	// topic := "projects/my-project-id/topics/my-topic"
    	// subscription := "projects/my-project/subscriptions/my-sub"
    	// bucket := "my-bucket" // bucket must not have the gs:// prefix
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	sub, err := client.SubscriptionAdminClient.CreateSubscription(ctx, &pubsubpb.Subscription{
    		Name:  subscription,
    		Topic: topic,
    		CloudStorageConfig: &pubsubpb.CloudStorageConfig{
    			Bucket:         bucket,
    			FilenamePrefix: "log_events_",
    			FilenameSuffix: ".avro",
    			OutputFormat: &pubsubpb.CloudStorageConfig_AvroConfig_{
    				AvroConfig: &pubsubpb.CloudStorageConfig_AvroConfig{
    					WriteMetadata: true,
    				},
    			},
    			MaxDuration: durationpb.New(1 * time.Minute),
    			MaxBytes:    1e8,
    		},
    	})
    	if err != nil {
    		return fmt.Errorf("failed to create cloud storage sub: %w", err)
    	}
    	fmt.Fprintf(w, "Created Cloud Storage subscription: %v\n", sub)
    
    	return nil
    }
    

    Java

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Java di Panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Java Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

    Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

    import com.google.cloud.pubsub.v1.SubscriptionAdminClient;
    import com.google.protobuf.Duration;
    import com.google.pubsub.v1.CloudStorageConfig;
    import com.google.pubsub.v1.ProjectSubscriptionName;
    import com.google.pubsub.v1.ProjectTopicName;
    import com.google.pubsub.v1.Subscription;
    import java.io.IOException;
    
    public class CreateCloudStorageSubscriptionExample {
      public static void main(String... args) throws Exception {
        // TODO(developer): Replace these variables before running the sample.
        String projectId = "your-project-id";
        String topicId = "your-topic-id";
        String subscriptionId = "your-subscription-id";
        String bucket = "your-bucket";
        String filenamePrefix = "log_events_";
        String filenameSuffix = ".text";
        Duration maxDuration = Duration.newBuilder().setSeconds(300).build();
    
        createCloudStorageSubscription(
            projectId, topicId, subscriptionId, bucket, filenamePrefix, filenameSuffix, maxDuration);
      }
    
      public static void createCloudStorageSubscription(
          String projectId,
          String topicId,
          String subscriptionId,
          String bucket,
          String filenamePrefix,
          String filenameSuffix,
          Duration maxDuration)
          throws IOException {
        try (SubscriptionAdminClient subscriptionAdminClient = SubscriptionAdminClient.create()) {
    
          ProjectTopicName topicName = ProjectTopicName.of(projectId, topicId);
          ProjectSubscriptionName subscriptionName =
              ProjectSubscriptionName.of(projectId, subscriptionId);
    
          CloudStorageConfig cloudStorageConfig =
              CloudStorageConfig.newBuilder()
                  .setBucket(bucket)
                  .setFilenamePrefix(filenamePrefix)
                  .setFilenameSuffix(filenameSuffix)
                  .setMaxDuration(maxDuration)
                  .build();
    
          Subscription subscription =
              subscriptionAdminClient.createSubscription(
                  Subscription.newBuilder()
                      .setName(subscriptionName.toString())
                      .setTopic(topicName.toString())
                      .setCloudStorageConfig(cloudStorageConfig)
                      .build());
    
          System.out.println("Created a CloudStorage subscription: " + subscription.getAllFields());
        }
      }
    }

    Node.js

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicName = 'YOUR_TOPIC_NAME';
    // const subscriptionName = 'YOUR_SUBSCRIPTION_NAME';
    // const bucket = 'YOUR_BUCKET_ID';
    // const filenamePrefix = 'YOUR_FILENAME_PREFIX';
    // const filenameSuffix = 'YOUR_FILENAME_SUFFIX';
    // const maxDuration = 60;
    
    // Imports the Google Cloud client library
    const {PubSub} = require('@google-cloud/pubsub');
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createCloudStorageSubscription(
      topicName,
      subscriptionName,
      bucket,
      filenamePrefix,
      filenameSuffix,
      maxDuration,
    ) {
      const options = {
        cloudStorageConfig: {
          bucket,
          filenamePrefix,
          filenameSuffix,
          maxDuration: {
            seconds: maxDuration,
          },
        },
      };
    
      await pubSubClient
        .topic(topicName)
        .createSubscription(subscriptionName, options);
    
      console.log(
        `Created subscription ${subscriptionName} with a cloud storage configuration.`,
      );
    }

    Node.js

    /**
     * TODO(developer): Uncomment these variables before running the sample.
     */
    // const topicName = 'YOUR_TOPIC_NAME';
    // const subscriptionName = 'YOUR_SUBSCRIPTION_NAME';
    // const bucket = 'YOUR_BUCKET_ID';
    // const filenamePrefix = 'YOUR_FILENAME_PREFIX';
    // const filenameSuffix = 'YOUR_FILENAME_SUFFIX';
    // const maxDuration = 60;
    
    // Imports the Google Cloud client library
    import {CreateSubscriptionOptions, PubSub} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createCloudStorageSubscription(
      topicName: string,
      subscriptionName: string,
      bucket: string,
      filenamePrefix: string,
      filenameSuffix: string,
      maxDuration: number,
    ) {
      const options: CreateSubscriptionOptions = {
        cloudStorageConfig: {
          bucket,
          filenamePrefix,
          filenameSuffix,
          maxDuration: {
            seconds: maxDuration,
          },
        },
      };
    
      await pubSubClient
        .topic(topicName)
        .createSubscription(subscriptionName, options);
    
      console.log(
        `Created subscription ${subscriptionName} with a cloud storage configuration.`,
      );
    }

    PHP

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan PHP di Panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API PHP Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

    Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

    use Google\Cloud\PubSub\PubSubClient;
    
    /**
     * Creates a Pub/Sub GCS subscription.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     * @param string $subscriptionName  The Pub/Sub subscription name.
     * @param string $bucket The Cloud Storage bucket name without any prefix like "gs://".
     */
    function create_cloud_storage_subscription($projectId, $topicName, $subscriptionName, $bucket)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->topic($topicName);
        $subscription = $topic->subscription($subscriptionName);
        $config = ['bucket' => $bucket];
        $subscription->create([
            'cloudStorageConfig' => $config
        ]);
    
        printf('Subscription created: %s' . PHP_EOL, $subscription->name());
    }

    Python

    Sebelum mencoba contoh ini, ikuti petunjuk penyiapan Python di Panduan memulai Pub/Sub menggunakan library klien. Untuk mengetahui informasi selengkapnya, lihat dokumentasi referensi API Python Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk library klien.

    Sebelum menjalankan contoh kode, tetapkan variabel lingkungan GOOGLE_CLOUD_UNIVERSE_DOMAIN ke s3nsapis.fr.

    from google.cloud import pubsub_v1
    from google.protobuf import duration_pb2
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    # subscription_id = "your-subscription-id"
    # bucket = "my-bucket"
    
    filename_prefix = "log_events_"
    filename_suffix = ".avro"
    # Either CloudStorageConfig.AvroConfig or CloudStorageConfig.TextConfig
    # defaults to TextConfig
    avro_config = pubsub_v1.types.CloudStorageConfig.AvroConfig(write_metadata=True)
    
    publisher = pubsub_v1.PublisherClient()
    subscriber = pubsub_v1.SubscriberClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    subscription_path = subscriber.subscription_path(project_id, subscription_id)
    max_duration = duration_pb2.Duration()
    max_duration.FromSeconds(300)
    
    cloudstorage_config = pubsub_v1.types.CloudStorageConfig(
        bucket=bucket,
        filename_prefix=filename_prefix,
        filename_suffix=filename_suffix,
        avro_config=avro_config,
        # Min 1 minutes, max 10 minutes
        max_duration=max_duration,
        # Min 1 KB, max 10 GiB
        max_bytes=10000000,
    )
    
    # Wrap the subscriber in a 'with' block to automatically call close() to
    # close the underlying gRPC channel when done.
    with subscriber:
        subscription = subscriber.create_subscription(
            request={
                "name": subscription_path,
                "topic": topic_path,
                "cloud_storage_config": cloudstorage_config,
            }
        )
    
    print(f"CloudStorage subscription created: {subscription}.")
    print(f"Bucket for subscription is: {bucket}")
    print(f"Prefix is: {filename_prefix}")
    print(f"Suffix is: {filename_suffix}")

Memantau langganan Cloud Storage

Cloud Monitoring menyediakan sejumlah metrik untuk memantau langganan.

Untuk mengetahui daftar semua metrik yang tersedia terkait Pub/Sub dan deskripsinya, lihat dokumentasi Monitoring untuk Pub/Sub.

Anda juga dapat memantau langganan dari dalam Pub/Sub.

Langkah berikutnya