Platform Cloud Telemetry Simulation mengharuskan Anda men-deploy infrastruktur ke project Google Cloud.
Mengakses kode sumber
Kode sumber untuk platform Cloud Telemetry Simulation dihosting di GitHub, di aaos-sdv-telemetry-simulator.
Prasyarat
Untuk men-deploy platform, pastikan Anda memenuhi prasyarat berikut:
- Project Google Cloud dengan Penagihan diaktifkan.
- Keamanan demo web: Jika men-deploy Demo Web, Anda harus mengonfigurasi Client ID OAuth 2.0 di Google Cloud APIs & Services > Credentials untuk mengamankan aplikasi App Engine dan membatasi akses ke Akun Google yang diotorisasi.
- Artefak build Software Defined Vehicle (SDV): Anda harus memiliki artefak image SDV yang dikompilasi sendiri. Artefak ini tidak disediakan di repositori ini.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- Izin: Pengguna atau akun layanan yang menjalankan Terraform harus memiliki izin yang memadai untuk membuat resource yang ditentukan dalam konfigurasi (misalnya, Project Editor, atau peran kustom dengan izin untuk Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage, dan layanan lain yang diperlukan).
- Alat:
- Google Cloud CLI (
gcloud CLI) - Terraform (versi yang digunakan di repositori)
- Docker
- Go (versi yang digunakan untuk fungsi pengelola di repositori)
- Google Cloud CLI (
Men-deploy infrastruktur Google Cloud
Men-deploy platform simulasi melibatkan dua langkah utama: menggunakan Terraform untuk men-deploy infrastruktur inti ke Google Cloud, serta membangun dan mengirim image Docker agen simulasi ke Artifact Registry. Bagian ini memandu Anda dalam men-deploy infrastruktur.
Masukkan nilai untuk variabel berikut guna memperbarui cuplikan kode di halaman ini:
Mengonfigurasi backend Terraform: Buat file untuk menentukan tempat Terraform menyimpan file statusnya di Cloud Storage. Beri nama file menggunakan sintaksis ini:
environments/ENVIRONMENT/backend.hcl# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"Mengonfigurasi variabel project: Buat file bernama dengan detail project Anda. Beri nama file menggunakan sintaksis ini:
environments/ENVIRONMENT/variables.tfvars# environments/ENVIRONMENT/variables.tfvars project_id = "PROJECT_ID" default_region = "REGION" default_zone = "ZONE" agent_docker_image = "REGION-docker.pkg.dev/PROJECT_ID/sim-agents/simulation-agent" # Security: Map logical tags to SHA256 digests # Security: Map logical tags to SHA256 digests (optional) image_fingerprints = { "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589" } # Parallel Execution Limit (Default: 5) max_concurrent_simulations = 5Menerapkan konfigurasi Terraform: Buka direktori
infrastructure, lalu lakukan inisialisasi dan terapkan konfigurasi:# Initialize Terraform with your backend configuration terraform init -backend-config=environments/ENVIRONMENT/backend.hcl # (Optional) Preview the changes terraform plan --var-file=environments/ENVIRONMENT/variables.tfvars # Apply the changes to deploy the infrastructure terraform apply --var-file=environments/ENVIRONMENT/variables.tfvars
Membangun dan mengirim image agen simulasi
Agen simulasi menjalankan simulasi di virtual machine (VM) Compute Engine. Anda membangunnya dengan artefak SDV dan mengirimkannya ke Artifact Registry.
Untuk membangun dan mengirim image agen simulasi:
Menempatkan artefak: Salin file
cvd-host_package.tar.gzdansdv_core_cf-img-<version>.zipke dalam direktorisimulation-agent/sdv-image-resources/.Membangun dan mengirim: Buka direktori
simulation-agent, lalu bangun dan kirim image. Ganti jalur image dengan jalur yang Anda konfigurasi dalam filevariables.tfvars.# Example using the path from the .tfvars example above export AGENT_IMAGE="REGION-docker.pkg.dev/PROJECT_ID/sim-agents/simulation-agent:latest" # Build the image docker build -t $AGENT_IMAGE . # Push the image to Artifact Registry docker push $AGENT_IMAGEMemperbarui sidik jari: Setelah mengirim image baru, Anda mungkin perlu mendapatkan ringkasan SHA256-nya dan memperbarui peta
image_fingerprintsdi filevariables.tfvars, lalu menjalankan kembaliterraform apply.# Get the digest using gcloud gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"Platform Cloud Telemetry Simulation Anda telah di-deploy dan siap menerima permintaan simulasi.
Operasi dan pemecahan masalah
Solusi ini memungkinkan Anda menggunakan alat bawaan Google Cloud untuk kemampuan observasi. Solusi ini hanya menggunakan resource komputasi per permintaan dan selama eksekusi simulasi.
Pengelolaan biaya
Arsitektur ini dirancang agar hemat biaya dengan menggunakan resource serverless dan sementara. Biaya terutama didorong oleh:
- Compute Engine: Ditagih untuk waktu VM simulasi berjalan. Penggunaan Spot VM dapat mengurangi biaya ini secara signifikan.
- Cloud Functions: Ditagih per pemanggilan.
- Cloud Storage: Ditagih untuk penyimpanan file input dan output serta log.
- Firestore: Ditagih untuk pembacaan, penulisan, dan penyimpanan data.
Kemampuan observasi
Semua komponen terintegrasi dengan Google Cloud Operations Suite.
- Logs Explorer: Ini adalah alat utama Anda untuk pemecahan masalah. Anda dapat memfilter log berdasarkan resource:
- Cloud Functions: Periksa log untuk fungsi
receive-requestatauschedule-simulationuntuk men-debug masalah orkestrasi. - Compute Engine: Periksa log instance VM untuk masalah startup atau shutdown.
- Agen simulasi: Agen yang berjalan di dalam container Docker meneruskan log-nya ke Logs Explorer. Filter berdasarkan nama instance VM untuk melihat progres simulasi mendetail.
- Cloud Functions: Periksa log untuk fungsi
- Cloud Storage: Untuk simulasi yang telah selesai, file
logcatdanbugreportdari perangkat Cuttlefish diupload ke direktori output simulasi di bucket Cloud Storage, sehingga memberikan insight mendalam tentang perilaku lingkungan Android.
Akun layanan
Terraform membuat beberapa akun layanan untuk mengaktifkan lingkungan yang aman dan memiliki hak istimewa paling rendah. Akun layanan utama mencakup:
Identitas eksekusi (VM):
simulation-agent:- Terlampir ke: VM Compute Engine yang menjalankan simulasi.
- Peran: Memungkinkan VM mengupload hasil dan menandai penyelesaian.
- Izin:
roles/storage.objectUser: Membaca input dan mengupload artefak (log, laporan) ke Cloud Storage.roles/run.invoker: Mengautentikasi dan memanggil fungsifinish-simulation.
Identitas orkestrasi (fungsi):
read-simulations-function:- Terlampir ke: Cloud Function
read-simulation. - Izin:
roles/datastore.user: Membaca simulasi dan menjalankan catatan VM di Firestore.
- Terlampir ke: Cloud Function
receive-request-function:- Terlampir ke: Cloud Function
receive-request. - Izin:
roles/datastore.user: Membuat catatan simulasiPENDINGbaru di Firestore.roles/storage.objectUser: Memverifikasi keberadaan file input di Cloud Storage.
- Terlampir ke: Cloud Function
scheduler-function:- Terlampir ke: Cloud Function
schedule-simulation. Izin:
- `roles/pubsub.subscriber`: Pulls messages from the simulation queue. - `roles/datastore.user`: Performs atomic reads and writes to the `running-vms` counter. - `roles/compute.instanceAdmin.v1`: Creates and starts Compute Engine VMs. - `roles/iam.serviceAccountUser`: This permission allows this function to assign the `simulation-agent` service account to the VMs it creates.
- Terlampir ke: Cloud Function
simulation-finisher-function:- Terlampir ke: Cloud Function
finish-simulation. - Izin:
-
roles/compute.instanceAdmin.v1: Menghapus VM setelah eksekusi selesai. -roles/datastore.user: Memperbarui status simulasi menjadiCOMPLETEDatauFAILED.
- Terlampir ke: Cloud Function
delete-simulation-function:- Terlampir ke: Cloud Function
delete-simulation. - Izin:
-
roles/compute.instanceAdmin.v1: Menghapus virtual machine secara paksa selama pembatalan. -roles/datastore.user: Memperbarui status untuk tugas yang dibatalkan.
- Terlampir ke: Cloud Function
Identitas pemicu:
scheduler-trigger:- Digunakan oleh: Pemicu Eventarc (peristiwa) dan Cloud Scheduler.
- Izin:
roles/eventarc.eventReceiverdanroles/run.invokeruntuk memicu fungsi pengelola.
cleanup-scheduler:- Digunakan oleh: cron job Cloud Scheduler untuk pembersihan.
- Izin:
roles/run.invokeruntuk memicu logika pembersihan.
Mengelola kebijakan Identity and Access Management untuk akun layanan ini adalah cara utama untuk mengontrol akses dan izin dalam sistem.