Panduan deployment

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.gz
    • sdv_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)

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:

  1. 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"
    
  2. 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 = 5
    
  3. Menerapkan 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:

  1. Menempatkan artefak: Salin file cvd-host_package.tar.gz dan sdv_core_cf-img-<version>.zip ke dalam direktori simulation-agent/sdv-image-resources/.

  2. Membangun dan mengirim: Buka direktori simulation-agent, lalu bangun dan kirim image. Ganti jalur image dengan jalur yang Anda konfigurasi dalam file variables.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_IMAGE
    
  3. Memperbarui sidik jari: Setelah mengirim image baru, Anda mungkin perlu mendapatkan ringkasan SHA256-nya dan memperbarui peta image_fingerprints di file variables.tfvars, lalu menjalankan kembali terraform 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-request atau schedule-simulation untuk 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 Storage: Untuk simulasi yang telah selesai, file logcat dan bugreport dari 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:

  1. 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 fungsi finish-simulation.
  2. Identitas orkestrasi (fungsi):

    • read-simulations-function:
      • Terlampir ke: Cloud Function read-simulation.
      • Izin:
        • roles/datastore.user: Membaca simulasi dan menjalankan catatan VM di Firestore.
    • receive-request-function:

      • Terlampir ke: Cloud Function receive-request.
      • Izin:
        • roles/datastore.user: Membuat catatan simulasi PENDING baru di Firestore.
        • roles/storage.objectUser: Memverifikasi keberadaan file input di Cloud Storage.
    • 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.
        
    • 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 menjadi COMPLETED atau FAILED.
    • 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.
  3. Identitas pemicu:

    • scheduler-trigger:

      • Digunakan oleh: Pemicu Eventarc (peristiwa) dan Cloud Scheduler.
      • Izin: roles/eventarc.eventReceiver dan roles/run.invoker untuk memicu fungsi pengelola.
    • cleanup-scheduler:

      • Digunakan oleh: cron job Cloud Scheduler untuk pembersihan.
      • Izin: roles/run.invoker untuk memicu logika pembersihan.

Mengelola kebijakan Identity and Access Management untuk akun layanan ini adalah cara utama untuk mengontrol akses dan izin dalam sistem.