Membuat topik

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

Dokumen ini menjelaskan cara membuat topik standar Pub/Sub. Jika ingin mengetahui lebih lanjut tentang topik impor dan cara membuatnya, lihat Membuat 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 untuk membuat dan mengelola topik, minta administrator untuk memberi Anda peran IAM Pub/Sub Editor(roles/pubsub.editor) terkait topik atau project Anda. Untuk mengetahui informasi selengkapnya tentang cara memberikan peran, lihat Mengelola akses.

Peran yang telah ditetapkan ini berisi izin yang diperlukan untuk membuat dan mengelola topik. Untuk melihat izin yang benar-benar diperlukan, perluas 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
  • Melepas langganan dari topik: pubsub.topics.detachSubscription
  • Dapatkan topik: pubsub.topics.get
  • Buat daftar topik: pubsub.topics.list
  • Memublikasikan ke topik: pubsub.topics.publish
  • Perbarui topik: pubsub.topics.update
  • Dapatkan kebijakan IAM untuk topik: pubsub.topics.getIamPolicy
  • Konfigurasi kebijakan IAM untuk topik: pubsub.topics.setIamPolicy

Anda mung juga bisa mendapatkan izin ini dengan peran khusus atau peran bawaanlainnya.

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

Properti topik

Saat membuat atau mengupdate topik, Anda harus menentukan propertinya.

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

    • ID langganan -sub
    • Jenis pengiriman pull
    • Durasi retensi pesan selama tujuh hari
    • Masa berlaku setelah 31 hari tidak aktif
    • Batas waktu konfirmasi selama 10 detik
    • Kebijakan percobaan ulang langsung
  • Skema. Skema adalah format yang harus diikuti oleh kolom data pesan. Skema adalah kontrak antara penerbit dan pelanggan yang diberlakukan oleh Pub/Sub. Skema topik membantu menstandarkan jenis dan izin pesan agar dapat digunakan oleh tim lain di organisasi Anda. Pub/Sub menciptakan otoritas terpusat untuk jenis dan izin pesan. Untuk membuat topik dengan skema, lihat Ringkasan skema.
  • Aktifkan penyerapan. Dengan mengaktifkan properti ini, Anda dapat menyerap data streaming dari sumber eksternal ke dalam topik sehingga dapat memanfaatkan fitur Google Cloud. Untuk membuat topik impor untuk penyerapan, lihat Membuat topik impor.

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

    • Default = Tidak diaktifkan
    • Nilai minimum = 10 menit
    • Nilai maksimum = 31 hari
  • Gunakan kunci enkripsi yang dikelola pelanggan (Customer-Managed Encryption Key/CMEK). Menentukan apakah topik dienkripsi dengan CMEK. Pub/Sub mengenkripsi pesan dengan kunci yang dikelola Google secara default. Jika Anda menentukan opsi ini, Pub/Sub akan menggunakan pola enkripsi envelope dengan CMEK. Dalam pendekatan ini, Cloud KMS tidak mengenkripsi pesan. Sebagai gantinya, Cloud KMS mengenkripsi Kunci Enkripsi Data (DEK) yang dibuat Pub/Sub untuk setiap topik. Pub/Sub mengenkripsi pesan menggunakan DEK terbaru yang dibuat untuk topik. Pub/Sub mendekripsi pesan sesaat sebelum pesan dikirim ke pelanggan. Untuk mengetahui informasi selengkapnya tentang pembuatan kunci, lihat Mengonfigurasi enkripsi pesan.

Membuat topik

Buat topik sebelum Anda dapat memublikasikan atau berlangganan 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 mengetahui informasi selengkapnya tentang penamaan topik, lihat panduan penamaan.

  4. Pertahankan opsi Tambahkan langganan default.

  5. Jangan pilih opsi lain.

  6. Klik Create topic.

gcloud

  1. Di konsol Google Cloud, aktifkan Cloud Shell.

    Aktifkan Cloud Shell

    Di bagian bawah Google Cloud Console, Cloud Shell sesi akan terbuka dan menampilkan perintah command line. Cloud Shell adalah lingkungan shell dengan Google Cloud CLI yang sudah terinstal, dan dengan nilai yang sudah ditetapkan untuk project Anda saat ini. Diperlukan waktu beberapa detik untuk melakukan inisialisasi sesi.

  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 informasi selengkapnya, lihat dokumentasi referensi API C++ Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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 informasi selengkapnya, lihat dokumentasi referensi API C# Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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 informasi selengkapnya, lihat dokumentasi referensi API Go Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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 informasi selengkapnya, lihat dokumentasi referensi API Java Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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 informasi selengkapnya, lihat dokumentasi referensi API PHP Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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 informasi selengkapnya, lihat dokumentasi referensi API Python Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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 informasi selengkapnya, lihat dokumentasi referensi API Ruby Pub/Sub.

    Untuk melakukan autentikasi ke Pub/Sub, siapkan Kredensial Default Aplikasi. Untuk mengetahui informasi selengkapnya, baca 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