Tutorial ini menunjukkan cara menggunakan Eventarc untuk membaca peristiwa dari sumber di satu project Google Cloud dan merutekannya ke tujuan target di project Google Cloud lain. Hal ini dapat dilakukan dengan menggunakan Pub/Sub sebagai lapisan transpor lintas project.
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, dan kemudian memicu Eventarc yang merutekan pesan ke layanan Cloud Run:
Tetapkan ID project Google Cloud ke project kedua Anda:
gcloud config set project PROJECT_TWO_ID
Ganti
PROJECT_TWO_ID
dengan ID project Google Cloud kedua Anda.Di 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 ID project Google Cloud ke project pertama Anda:
gcloud config set project PROJECT_ONE_ID
Ganti
PROJECT_ONE_ID
dengan ID project Google 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 ID project Google Cloud 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 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 ID project Google Cloud 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
Mengupload file ke bucket:
echo "Hello World" > random.txt gcloud storage cp random.txt gs://$BUCKET/random.txt
Tetapkan ID project Google Cloud 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 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 merekam dan merutekan peristiwa ke layanan Cloud Run di project kedua:
Tetapkan ID project Google Cloud 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
roles/owner
Identity 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.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, mulai 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 serupa dengan berikut akan ditampilkan:
Please remember to grant `serviceAccount:p1011272509317-375795@gcp-sa-logging.iam.gserviceaccount.com` the Pub/Sub Publisher role on the topic.
Tetapkan ID project Google Cloud 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 pada langkah sebelumnya.Tetapkan ID project Google Cloud 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 nilai default untuk tujuan tutorial ini.
Tetapkan ID project Google Cloud 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 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", } [...] }