Membuat topik

Dalam Pub/Sub, topik adalah resource bernama yang mewakili feed pesan. Anda harus membuat topik sebelum dapat memublikasikan atau berlangganan ke topik tersebut. Pub/Sub mendukung dua jenis topik: topik standar dan topik impor.

Dokumen ini menjelaskan cara membuat topik standar Pub/Sub. Jika Anda ingin mempelajari lebih lanjut topik impor dan cara membuatnya, lihat Tentang topik impor.

Untuk membuat topik, Anda dapat menggunakan konsol Google Cloud, Google Cloud CLI, library klien, atau Pub/Sub API.

Sebelum memulai

Peran dan izin yang diperlukan untuk mengelola topik

Untuk mendapatkan izin yang diperlukan guna membuat dan mengelola topik, minta administrator untuk memberi Anda peran IAM Pub/Sub Editor(roles/pubsub.editor) di topik atau project Anda. 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 dan mengelola topik. Untuk melihat izin yang benar-benar diperlukan, luaskan bagian Izin yang diperlukan:

Izin yang diperlukan

Izin berikut diperlukan untuk membuat dan mengelola topik:

  • Buat topik: pubsub.topics.create
  • Menghapus topik: pubsub.topics.delete
  • Melepaskan langganan dari topik: pubsub.topics.detachSubscription
  • Mendapatkan topik: pubsub.topics.get
  • Cantumkan topik: pubsub.topics.list
  • Memublikasikan ke topik: pubsub.topics.publish
  • Memperbarui topik: pubsub.topics.update
  • Dapatkan kebijakan IAM untuk topik: pubsub.topics.getIamPolicy
  • Konfigurasikan kebijakan IAM untuk topik: pubsub.topics.setIamPolicy

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

Anda dapat mengonfigurasi kontrol akses di level project dan di level resource individual. Anda dapat membuat langganan di satu project dan melampirkannya ke topik yang berada di project lain. Pastikan Anda memiliki izin yang diperlukan untuk setiap project.

Properti topik

Saat membuat atau memperbarui topik, Anda harus menentukan propertinya.

Tambahkan langganan default

Menambahkan langganan default ke topik Pub/Sub. Anda dapat membuat langganan lain untuk topik setelah topik dibuat. Langganan default memiliki properti berikut:

  • ID Langganan -sub
  • Jenis pengiriman pull
  • Durasi retensi pesan selama tujuh hari
  • Berakhir setelah tidak aktif selama 31 hari
  • Batas waktu konfirmasi 10 detik
  • Kebijakan percobaan ulang langsung

Menggunakan skema

Skema adalah format yang harus diikuti kolom data pesan. Skema adalah kontrak antara penayang dan pelanggan yang diberlakukan oleh Pub/Sub. Skema topik membantu menstandarkan jenis pesan dan izin agar dapat digunakan oleh berbagai tim di organisasi Anda. Pub/Sub membuat otoritas pusat untuk jenis dan izin pesan. Untuk membuat topik dengan skema, lihat Ringkasan skema.

Mengaktifkan penyerapan

Dengan mengaktifkan properti ini, Anda dapat menyerap data streaming dari sumber eksternal ke dalam topik sehingga Anda dapat menggunakan fitur Google Cloud. Untuk membuat topik impor untuk proses transfer, lihat hal berikut:

Mengaktifkan retensi pesan

Menentukan berapa lama topik Pub/Sub menyimpan pesan setelah publikasi. Setelah durasi retensi pesan berakhir, Pub/Sub dapat menghapus pesan, terlepas dari status konfirmasinya. Biaya penyimpanan pesan dikenakan untuk menyimpan semua pesan yang dipublikasikan ke topik

  • Default = Tidak diaktifkan
  • Nilai minimum = 10 menit
  • Nilai maksimum = 31 hari

Mengekspor data pesan ke BigQuery

Dengan mengaktifkan properti ini, Anda dapat membuat langganan BigQuery yang menulis pesan ke tabel BigQuery yang ada saat pesan diterima. Anda tidak perlu mengonfigurasi klien pelanggan terpisah. Untuk mengetahui informasi selengkapnya tentang langganan BigQuery, lihat Langganan BigQuery.

Mengekspor data pesan ke Cloud Storage

Dengan mengaktifkan properti ini, Anda dapat membuat langganan Cloud Storage yang menulis pesan ke tabel Cloud Storage yang sudah ada saat pesan diterima. Anda tidak perlu mengonfigurasi klien pelanggan terpisah. Untuk mengetahui informasi selengkapnya tentang langganan Cloud Storage, lihat Langganan Cloud Storage.

Google-managed encryption key

Menentukan bahwa topik dienkripsi menggunakan kunci enkripsi yang dikelola Google. Pub/Sub mengenkripsi pesan dengan kunci yang dikelola Google secara default, sehingga memilih opsi ini akan mempertahankan perilaku default. Google menangani pengelolaan dan rotasi kunci secara otomatis, sehingga memastikan pesan Anda selalu dilindungi dengan enkripsi terkuat yang tersedia. Opsi ini tidak memerlukan konfigurasi lebih lanjut. Untuk informasi selengkapnya tentang kunci enkripsi yang dikelola Google, lihat Enkripsi default dengan kunci milik dan dikelola Google.

Kunci Cloud KMS

Menentukan apakah topik dienkripsi dengan kunci enkripsi yang dikelola pelanggan (CMEK). Pub/Sub mengenkripsi pesan dengan kunci milik dan dikelola Google secara default. Jika Anda menentukan opsi ini, Pub/Sub akan menggunakan pola enkripsi amplop dengan CMEK. Dalam pendekatan ini, Cloud KMS tidak mengenkripsi pesan. Sebagai gantinya, Cloud KMS mengenkripsi Kunci Enkripsi Data (DEK) yang dibuat oleh Pub/Sub untuk setiap topik. Pub/Sub mengenkripsi pesan menggunakan DEK terbaru yang dibuat untuk topik. Pub/Sub mendekode pesan sesaat sebelum dikirim ke pelanggan. Untuk mengetahui informasi selengkapnya tentang cara membuat kunci, lihat Mengonfigurasi enkripsi pesan.

Membuat topik

Buat topik sebelum dapat memublikasikan atau berlangganan ke topik tersebut.

Konsol

Untuk membuat topik, ikuti langkah-langkah berikut:

  1. Di konsol Google Cloud, buka halaman Topics Pub/Sub.

    Buka Topik

  2. Klik Create topic.

  3. Di kolom ID Topik, masukkan ID untuk topik Anda. Untuk informasi selengkapnya tentang penamaan topik, lihat panduan penamaan.

  4. Pertahankan opsi Tambahkan langganan default.

  5. Opsional. Jangan pilih opsi lainnya.

  6. Klik Create topic.

gcloud

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

    Activate Cloud Shell

    At the bottom of the Google 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 topik, jalankan perintah gcloud pubsub topics create:

    gcloud pubsub topics create TOPIC_ID

REST

Untuk membuat topik, gunakan metode projects.topics.create:

Permintaan harus diautentikasi dengan token akses di header Authorization. Untuk mendapatkan token akses untuk Kredensial Default Aplikasi saat ini: gcloud auth application-default print-access-token.

PUT https://pubsub.googleapis.com/v1/projects/PROJECT_ID/topics/TOPIC_ID
Authorization: Bearer ACCESS_TOKEN
    

Dengan keterangan:

  • PROJECT_ID adalah project ID Anda.
  • TOPIC_ID adalah topic ID Anda.
  • Respons:

    {
     "name": "projects/PROJECT_ID/topics/TOPIC_ID"
    }

    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 lingkungan pengembangan lokal.

    namespace pubsub = ::google::cloud::pubsub;
    namespace pubsub_admin = ::google::cloud::pubsub_admin;
    [](pubsub_admin::TopicAdminClient client, std::string project_id,
       std::string topic_id) {
      auto topic = client.CreateTopic(
          pubsub::Topic(std::move(project_id), std::move(topic_id)).FullName());
      // Note that kAlreadyExists is a possible error when the library retries.
      if (topic.status().code() == google::cloud::StatusCode::kAlreadyExists) {
        std::cout << "The topic already exists\n";
        return;
      }
      if (!topic) throw std::move(topic).status();
    
      std::cout << "The topic was successfully created: " << topic->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 lingkungan pengembangan lokal.

    
    using Google.Cloud.PubSub.V1;
    using Grpc.Core;
    using System;
    
    public class CreateTopicSample
    {
        public Topic CreateTopic(string projectId, string topicId)
        {
            PublisherServiceApiClient publisher = PublisherServiceApiClient.Create();
            var topicName = TopicName.FromProjectTopic(projectId, topicId);
            Topic topic = null;
    
            try
            {
                topic = publisher.CreateTopic(topicName);
                Console.WriteLine($"Topic {topic.Name} created.");
            }
            catch (RpcException e) when (e.Status.StatusCode == StatusCode.AlreadyExists)
            {
                Console.WriteLine($"Topic {topicName} already exists.");
            }
            return topic;
        }
    }

    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 lingkungan pengembangan lokal.

    import (
    	"context"
    	"fmt"
    	"io"
    
    	"cloud.google.com/go/pubsub"
    )
    
    func create(w io.Writer, projectID, topicID string) error {
    	// projectID := "my-project-id"
    	// topicID := "my-topic"
    	ctx := context.Background()
    	client, err := pubsub.NewClient(ctx, projectID)
    	if err != nil {
    		return fmt.Errorf("pubsub.NewClient: %w", err)
    	}
    	defer client.Close()
    
    	t, err := client.CreateTopic(ctx, topicID)
    	if err != nil {
    		return fmt.Errorf("CreateTopic: %w", err)
    	}
    	fmt.Fprintf(w, "Topic created: %v\n", t)
    	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 lingkungan pengembangan lokal.

    
    import com.google.cloud.pubsub.v1.TopicAdminClient;
    import com.google.pubsub.v1.Topic;
    import com.google.pubsub.v1.TopicName;
    import java.io.IOException;
    
    public class CreateTopicExample {
      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";
    
        createTopicExample(projectId, topicId);
      }
    
      public static void createTopicExample(String projectId, String topicId) throws IOException {
        try (TopicAdminClient topicAdminClient = TopicAdminClient.create()) {
          TopicName topicName = TopicName.of(projectId, topicId);
          Topic topic = topicAdminClient.createTopic(topicName);
          System.out.println("Created topic: " + topic.getName());
        }
      }
    }

    Node.js

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // 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 createTopic(topicNameOrId) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    Node.js

    /**
     * TODO(developer): Uncomment this variable before running the sample.
     */
    // const topicNameOrId = 'YOUR_TOPIC_NAME_OR_ID';
    
    // Imports the Google Cloud client library
    import {PubSub} from '@google-cloud/pubsub';
    
    // Creates a client; cache this for further use
    const pubSubClient = new PubSub();
    
    async function createTopic(topicNameOrId: string) {
      // Creates a new topic
      await pubSubClient.createTopic(topicNameOrId);
      console.log(`Topic ${topicNameOrId} created.`);
    }

    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 lingkungan pengembangan lokal.

    use Google\Cloud\PubSub\PubSubClient;
    
    /**
     * Creates a Pub/Sub topic.
     *
     * @param string $projectId  The Google project ID.
     * @param string $topicName  The Pub/Sub topic name.
     */
    function create_topic($projectId, $topicName)
    {
        $pubsub = new PubSubClient([
            'projectId' => $projectId,
        ]);
        $topic = $pubsub->createTopic($topicName);
    
        printf('Topic created: %s' . PHP_EOL, $topic->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 lingkungan pengembangan lokal.

    from google.cloud import pubsub_v1
    
    # TODO(developer)
    # project_id = "your-project-id"
    # topic_id = "your-topic-id"
    
    publisher = pubsub_v1.PublisherClient()
    topic_path = publisher.topic_path(project_id, topic_id)
    
    topic = publisher.create_topic(request={"name": topic_path})
    
    print(f"Created topic: {topic.name}")

    Ruby

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

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, lihat Menyiapkan autentikasi untuk lingkungan pengembangan lokal.

    # topic_id = "your-topic-id"
    
    pubsub = Google::Cloud::Pubsub.new
    
    topic = pubsub.create_topic topic_id
    
    puts "Topic #{topic.name} created."

    Batasan kebijakan organisasi

    Kebijakan organisasi dapat membatasi pembuatan topik, misalnya, kebijakan dapat membatasi penyimpanan pesan di region Compute Engine. Untuk menghindari error pembuatan topik, periksa dan perbarui kebijakan organisasi, sesuai kebutuhan, sebelum membuat topik.

    Jika project Anda baru dibuat, tunggu beberapa menit hingga kebijakan organisasi diinisialisasi sebelum membuat topik.

    Buka Kebijakan Organisasi

    Untuk mengetahui informasi selengkapnya, lihat Mengonfigurasi kebijakan penyimpanan pesan.

    Langkah selanjutnya