Tutorial ini menunjukkan cara menggunakan Eventarc untuk membaca peristiwa dari a sumber di satu Google Cloud project dan merutekannya ke tujuan target di project lain Google Cloud . Hal ini dapat dilakukan dengan menggunakan Pub/Sub sebagai lapisan transpor lintas project.
Tujuan
Dalam tutorial ini, Anda akan:
Membuat topik di satu project, lalu memublikasikan ke topik tersebut dari project lain. Tindakan ini merutekan peristiwa ke layanan Cloud Run yang dapat diakses secara publik menggunakan pemicu Eventarc.
Menggunakan notifikasi Pub/Sub untuk Cloud Storage guna memublikasikan peristiwa Cloud Storage dari satu project ke project lain. Merutekan peristiwa ke layanan Cloud Run yang dapat diakses secara publik menggunakan pemicu Eventarc.
Menggunakan sink Cloud Logging untuk memublikasikan Cloud Audit Logs dari satu project ke project lain. Merutekan peristiwa ke layanan Cloud Run yang dapat diakses secara publik menggunakan pemicu Eventarc.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen yang dapat ditagih berikut Google Cloud:
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Sebelum memulai
Batasan keamanan yang ditentukan oleh organisasi mungkin mencegah Anda menyelesaikan langkah-langkah berikut. Untuk mengetahui informasi pemecahan masalah, lihat Mengembangkan aplikasi di lingkungan yang terbatas. Google Cloud
Perhatikan bahwa Anda memerlukan dua project untuk tutorial ini. Langkah-langkah berikut berlaku untuk kedua project.
- Login keakun Anda. Google Cloud Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init -
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
Roles required to select or create a project
- Select a project: Selecting a project doesn't require a specific IAM role—you can select any project that you've been granted a role on.
-
Create a project: To create a project, you need the Project Creator role
(
roles/resourcemanager.projectCreator), which contains theresourcemanager.projects.createpermission. Learn how to grant roles.
-
Verify that billing is enabled for your Google Cloud project.
-
Instal Google Cloud CLI.
-
Jika Anda menggunakan penyedia identitas (IdP) eksternal, Anda harus login ke gcloud CLI dengan identitas gabungan Anda terlebih dahulu.
-
Untuk melakukan inisialisasi gcloud CLI, jalankan perintah berikut:
gcloud init - Perbarui komponen gcloud CLI:
gcloud components update
- Login menggunakan akun Anda:
gcloud auth login
Merutekan peristiwa Pub/Sub di seluruh project
Karena Pub/Sub adalah layanan yang didistribusikan secara global, Anda dapat membuat topik di satu project, memublikasikan ke topik tersebut dari project lain, lalu memicu Eventarc yang merutekan pesan ke layanan Cloud Run:
Setel Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Ganti
PROJECT_TWO_IDdengan ID project kedua Google Cloud Anda.Di project kedua Anda, lakukan hal berikut:
Aktifkan Cloud Run dan Eventarc API:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Tetapkan lokasi default:
REGION=REGION
Ganti
REGIONdengan lokasi Eventarc yang didukung pilihan Anda. Contohnya,us-central1.Buat topik Pub/Sub:
TOPIC=my-topic gcloud pubsub topics create $TOPIC
Deploy layanan Cloud Run yang dapat diakses secara publik menggunakan image bawaan,
us-docker.pkg.dev/cloudrun/container/hello:gcloud run deploy hello \ --image=us-docker.pkg.dev/cloudrun/container/hello \ --allow-unauthenticated \ --region=$REGION
Jika Anda melihat URL layanan, berarti deployment selesai.
Hubungkan topik ke layanan dengan pemicu Eventarc:
gcloud eventarc triggers create cross-project-trigger \ --destination-run-service=hello \ --destination-run-region=${REGION} \ --location=${REGION} \ --event-filters="type=google.cloud.pubsub.topic.v1.messagePublished" \ --transport-topic=projects/PROJECT_TWO_ID/topics/$TOPIC
Tindakan ini akan membuat pemicu yang disebut
cross-project-trigger.
Setel Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Ganti
PROJECT_ONE_IDdengan ID project pertama Google Cloud Anda.Di project pertama Anda, publikasikan pesan ke topik di project kedua:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Setel Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua Anda, pastikan peristiwa yang dihasilkan dicatat:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:hello" --format=json
Entri logging yang mirip dengan berikut ini akan ditampilkan:
"message": "Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: hello"
Merutekan peristiwa Cloud Storage di seluruh project
Gunakan notifikasi Pub/Sub untuk Cloud Storage guna memublikasikan peristiwa dari satu project ke project lain, lalu merutekan peristiwa ke layanan Cloud Run melalui pemicu Eventarc:
Setel Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Buat bucket Cloud Storage:
PROJECT1=$(gcloud config get-value project) BUCKET=$PROJECT1-cross-project gcloud storage buckets create gs://$BUCKET --location=${REGION}
Buat notifikasi Pub/Sub untuk bucket ke topik di project kedua Anda:
gcloud storage buckets notifications create gs://$BUCKET --topic=projects/PROJECT_TWO_ID/topics/$TOPIC --payload-format=json
Upload file ke bucket:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Setel Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua Anda, pastikan peristiwa yang dihasilkan dicatat:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:random.txt" --format=json
Entri logging yang mirip dengan berikut ini akan ditampilkan:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Event data: { "kind": "storage#object", "id": "project1-cross-project/random.txt/1635327604259719", "selfLink": "https://www.googleapis.com/storage/v1/b/project1-cross-project/o/random.txt", "name": "random.txt", "bucket": "project1-cross-project", "generation": "1635327604259719", [...] }
Merutekan peristiwa Cloud Audit Logs di seluruh project
Permintaan ke layanan Anda dapat dipicu saat entri log audit dibuat yang cocok dengan kriteria filter pemicu. (Untuk mengetahui informasi selengkapnya, lihat Menentukan filter peristiwa untuk Cloud Audit Logs.) Dalam hal ini, saat instance VM Compute Engine dibuat di project pertama Anda, entri log audit yang cocok dengan kriteria filter pemicu memungkinkan Anda menangkap dan merutekan peristiwa ke layanan Cloud Run di project kedua:
Setel Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Di project pertama Anda, aktifkan Jenis Log Admin Read, Data Read, dan Data Write untuk Compute Engine:
Perhatikan bahwa di tingkat project, Anda memerlukan peran
roles/ownerIdentity and Access Management (IAM) untuk mengonfigurasi log audit Akses Data untuk resource Google Cloud Anda.Baca kebijakan IAM project Anda dan simpan dalam file:
gcloud projects get-iam-policy PROJECT_ONE_ID > /tmp/policy.yaml
Edit
/tmp/policy.yaml, tambahkan atau ubah hanya konfigurasi log audit Akses Data.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.comTulis kebijakan IAM baru Anda:
gcloud projects set-iam-policy PROJECT_ONE_ID /tmp/policy.yaml
Jika perintah sebelumnya melaporkan konflik dengan perubahan lain, ulangi langkah-langkah ini, mulai dengan membaca kebijakan IAM project.
Di project pertama Anda, buat sink Cloud Logging untuk merutekan Cloud Audit Logs ke topik di project kedua Anda:
gcloud logging sinks create cross-project-sink \ pubsub.googleapis.com/projects/PROJECT_TWO_ID/topics/my-topic \ --log-filter='protoPayload.methodName="beta.compute.instances.insert"'
Pengingat yang mirip dengan berikut ini akan ditampilkan:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Setel Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua Anda, berikan peran ke akun layanan:
gcloud pubsub topics add-iam-policy-binding my-topic \ --member=SERVICE_ACCOUNT \ --role=roles/pubsub.publisher
Ganti
SERVICE_ACCOUNTdengan alamat email akun layanan yang ditampilkan pada langkah sebelumnya.Setel Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Di project pertama Anda, buat instance VM Compute Engine.
Jika menggunakan Google Cloud konsol untuk membuat instance VM, Anda dapat menerima nilai default untuk tujuan tutorial ini.
Setel Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua Anda, pastikan peristiwa yang dihasilkan dicatat:
gcloud logging read "resource.labels.service_name=hello AND jsonPayload.message:beta.compute.instances.insert" --format=json
Entri logging yang mirip dengan berikut ini akan ditampilkan:
Received event of type google.cloud.pubsub.topic.v1.messagePublished. Eventdata: { "logName": "projects/workflows-atamel/logs/cloudaudit.googleapis.com%2Factivity", "operation": { "id": "operation-1635330842489-5cf5321f4f454-ecc363cd-3883c08d", "last": true, "producer": "compute.googleapis.com" }, "protoPayload": { "@type": "type.googleapis.com/google.cloud.audit.AuditLog", "methodName": "beta.compute.instances.insert", } [...] }
Pembersihan
Jika Anda membuat project baru untuk tutorial ini, hapus project tersebut. Jika Anda menggunakan project yang sudah ada dan ingin mempertahankannya tanpa perubahan yang ditambahkan dalam tutorial ini, hapus resource yang dibuat untuk tutorial.
Menghapus project
Cara termudah untuk menghilangkan penagihan adalah dengan menghapus project yang Anda buat untuk tutorial.
Untuk menghapus project:
- Di Google Cloud konsol, buka halaman Manage resources.
- Pada daftar project, pilih project yang Anda ingin Anda hapus, lalu klik Delete.
- Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.
Menghapus resource tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE_NAME
Dengan
SERVICE_NAMEadalah nama layanan pilihan Anda.Anda juga dapat menghapus layanan Cloud Run dari Google Cloud konsol.
Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial.
Contoh:
gcloud config unset run/regionatau
gcloud config unset projectHapusresource lain yang dibuat dalam tutorial ini: Google Cloud
Hapus pemicu Eventarc:
Gantigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAMEdengan nama pemicu Anda.Menghapus topik Pub/Sub
Gantigcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_IDdengan ID topik Anda.Hapus sink Cloud Logging:
Gantigcloud logging sinks delete SINK_NAME
SINK_NAMEdengan nama sink Anda.