Tutorial ini menunjukkan cara menggunakan Eventarc untuk membaca peristiwa dari sumber dalam satu Google Cloud project dan merutekannya ke tujuan target dalam project Google Cloud lain. Hal ini dapat dilakukan dengan menggunakan Pub/Sub sebagai lapisan transpor lintas project.
Tujuan
Dalam tutorial ini, Anda akan:
Buat topik di satu project, lalu publikasikan ke topik tersebut dari project lain. Tindakan ini akan merutekan peristiwa ke layanan Cloud Run yang tidak diautentikasi menggunakan pemicu Eventarc.
Gunakan notifikasi Pub/Sub untuk Cloud Storage guna memublikasikan peristiwa Cloud Storage dari satu project ke project lainnya. Rutekan peristiwa ke layanan Cloud Run yang tidak diautentikasi menggunakan pemicu Eventarc.
Gunakan sink Cloud Logging untuk memublikasikan Cloud Audit Logs dari satu project ke project lainnya. Rutekan peristiwa ke layanan Cloud Run yang tidak diautentikasi menggunakan pemicu Eventarc.
Biaya
Dalam dokumen ini, Anda akan menggunakan komponen Google Cloudyang dapat ditagih berikut:
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 Google Cloud yang terbatas.
Perhatikan bahwa Anda memerlukan dua project untuk tutorial ini. Langkah-langkah berikut berlaku untuk kedua project.
- Sign in to your Google Cloud account. If you're new to Google Cloud, create an account to evaluate how our products perform in real-world scenarios. New customers also get $300 in free credits to run, test, and deploy workloads.
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
In the Google Cloud console, on the project selector page, select or create a Google Cloud project.
-
Make sure that billing is enabled for your Google Cloud project.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
- Perbarui komponen gcloud:
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:
Tetapkan Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Ganti
PROJECT_TWO_ID
dengan ID projectGoogle Cloud kedua Anda.Dalam project kedua, lakukan hal berikut:
Aktifkan Cloud Run dan Eventarc API:
gcloud services enable run.googleapis.com eventarc.googleapis.com
Tetapkan lokasi default:
REGION=REGION
Ganti
REGION
dengan 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 tidak diautentikasi 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
.
Tetapkan Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Ganti
PROJECT_ONE_ID
dengan ID projectGoogle Cloud pertama Anda.Di project pertama, publikasikan pesan ke topik di project kedua:
gcloud pubsub topics publish projects/PROJECT_TWO_ID/topics/$TOPIC --message="hello"
Tetapkan Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua, pastikan peristiwa yang dihasilkan dicatat ke dalam log:
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 arahkan peristiwa ke layanan Cloud Run melalui pemicu Eventarc:
Tetapkan Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Membuat 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
Tetapkan Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua, pastikan peristiwa yang dihasilkan dicatat ke dalam log:
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 informasi selengkapnya, lihat Menentukan filter peristiwa untuk Log Audit Cloud.) Dalam hal ini, saat instance VM Compute Engine dibuat di project pertama, entri log audit yang cocok dengan kriteria filter pemicu memungkinkan Anda merekam dan merutekan peristiwa ke layanan Cloud Run di project kedua:
Tetapkan Google Cloud project ID ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Di project pertama Anda, aktifkan Jenis Log Pembacaan Admin, Pembacaan Data, dan Penulisan Data untuk Compute Engine:
Perhatikan bahwa di tingkat project, Anda memerlukan peran Identity and Access Management (IAM)
roles/owner
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
Mengedit
/tmp/policy.yaml
, menambahkan atau mengubah hanya konfigurasi log audit Akses Data.auditConfigs: - auditLogConfigs: - logType: ADMIN_READ - logType: DATA_READ - logType: DATA_WRITE service: compute.googleapis.com
Tulis 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, dimulai dengan membaca kebijakan IAM project.
Di project pertama, buat sink Cloud Logging untuk merutekan Cloud Audit Logs ke topik di project kedua:
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.
Tetapkan 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_ACCOUNT
dengan alamat email akun layanan yang ditampilkan di langkah sebelumnya.Tetapkan 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 konsol Google Cloud untuk membuat instance VM, Anda dapat menerima setelan default untuk tujuan tutorial ini.
Tetapkan Google Cloud project ID ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Di project kedua, pastikan peristiwa yang dihasilkan dicatat ke dalam log:
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 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:
- In the Google Cloud console, go to the Manage resources page.
- In the project list, select the project that you want to delete, and then click Delete.
- In the dialog, type the project ID, and then click Shut down to delete the project.
Menghapus referensi tutorial
Hapus layanan Cloud Run yang Anda deploy dalam tutorial ini:
gcloud run services delete SERVICE_NAME
Dengan
SERVICE_NAME
adalah nama layanan pilihan Anda.Anda juga dapat menghapus layanan Cloud Run dari Google Cloud Console.
Hapus konfigurasi default gcloud CLI yang Anda tambahkan selama penyiapan tutorial.
Contoh:
gcloud config unset run/region
atau
gcloud config unset project
Hapus resource Google Cloud lain yang dibuat dalam tutorial ini:
Hapus pemicu Eventarc:
Gantigcloud eventarc triggers delete TRIGGER_NAME
TRIGGER_NAME
dengan nama pemicu Anda.Menghapus topik Pub/Sub
Gantigcloud pubsub topics delete TOPIC TOPIC_ID
TOPIC_ID
dengan ID topik Anda.Hapus sink Cloud Logging:
Gantigcloud logging sinks delete SINK_NAME
SINK_NAME
dengan nama sink Anda.