部署指南

您必須將基礎架構部署至 Google Cloud 專案,才能使用 Cloud Telemetry Simulation 平台。

存取原始碼

Cloud Telemetry Simulation 平台的原始碼託管於 GitHub 的 aaos-sdv-telemetry-simulator。

必要條件

如要部署平台,請確認您符合下列必要條件:

  • 已啟用計費功能的 Google Cloud 專案。
  • 網頁試用版安全性:如要部署網頁試用版,請在 Google Cloud 的「API 和服務」>「憑證」中設定 OAuth 2.0 用戶端 ID,保護 App Engine 應用程式,並限制只有授權的 Google 帳戶才能存取。
  • 軟體定義車輛 (SDV) 建構構件:您必須擁有自行編譯的 SDV 映像檔構件。這個存放區不提供這些項目。
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • 權限:執行 Terraform 的使用者或服務帳戶必須具備足夠權限,才能建立設定中定義的資源 (例如專案編輯者,或具備 Compute Engine、Cloud Functions、Identity and Access Management、Cloud Storage 和其他必要服務權限的自訂角色)。
  • 工具:
    • Google Cloud CLI (gcloud CLI)
    • Terraform (存放區中使用的版本)
    • Docker
    • Go (用於存放區中自動化調度管理函式的版本)

部署 Google Cloud 雲端基礎架構

部署模擬平台有兩個主要步驟:使用 Terraform 將核心基礎架構部署至 Google Cloud,以及建構模擬代理 Docker 映像檔並推送至 Artifact Registry。本節將引導您部署基礎架構。

輸入下列變數的值,更新本頁的程式碼片段:

  1. 設定 Terraform 後端:建立檔案,指定 Terraform 在 Cloud Storage 中儲存狀態檔案的位置。請使用下列語法命名檔案:

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. 設定專案變數:建立檔案,並以專案詳細資料命名。請使用下列語法命名檔案:

    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)
    supported_agent_builds = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_vm_count = 5
    
  3. 套用 Terraform 設定:前往 infrastructure 目錄,然後初始化並套用設定:

    # 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
    

建構及推送模擬代理映像檔

模擬代理程式會在 Compute Engine 虛擬機器 (VM) 上執行模擬。您可以使用 SDV 構件建構映像檔,並推送至 Artifact Registry。

如要建構及推送模擬代理映像檔,請按照下列步驟操作:

  1. 放置構件:將 cvd-host_package.tar.gz 和 sdv_core_cf-img-<version>.zip 檔案複製到 simulation-agent/sdv-image-resources/ 目錄。

  2. 建構及推送:前往 simulation-agent 目錄,然後建構及推送映像檔。將圖片路徑替換為您在 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. 更新指紋:推送新映像檔後,您可能需要取得其 SHA256 摘要,並更新 variables.tfvars 檔案中的 supported_agent_builds 對應,然後重新執行 terraform apply。

    # Get the digest using gcloud
    gcloud artifacts docker images describe $AGENT_IMAGE --format="value(image_summary.digest)"
    

    Cloud Telemetry Simulation 平台已部署完畢,可接受模擬要求。

作業和疑難排解

這項解決方案可讓您使用 Google Cloud 內建工具進行觀測。只有在執行模擬作業時,才會根據要求耗用運算資源。

成本管理

這項架構採用無伺服器和臨時資源,符合成本效益。費用主要取決於:

  • Compute Engine:依模擬 VM 的執行時間計費。使用 Spot VM 可大幅降低這項費用。
  • Cloud Functions:依叫用次數計費。
  • Cloud Storage:儲存輸入和輸出檔案及記錄檔的費用。
  • Firestore:依讀取、寫入和資料儲存庫量計費。

觀測能力

所有元件都與 Google Cloud 作業套件整合。

  • Logs Explorer:這是您排解問題的主要工具。您可以依資源篩選記錄:
    • Cloud Functions:查看 receive-request 或 schedule-simulation 函式的記錄,對自動化調度管理問題進行偵錯。
    • Compute Engine:查看 VM 執行個體記錄,找出啟動或關機問題。
    • 模擬代理程式:在 Docker 容器中執行的代理程式會將記錄轉送至 Logs Explorer。依 VM 執行個體名稱篩選,即可查看詳細的模擬進度。
  • Cloud Storage:模擬作業完成後,Cuttlefish 裝置的 logcat 和 bugreport 檔案會上傳到 Cloud Storage bucket 的模擬輸出目錄,讓您深入瞭解 Android 環境的行為。

服務帳戶

Terraform 會建立多個服務帳戶,以啟用安全的最小權限環境。主要服務帳戶包括:

  1. 執行身分 (VM):

    • simulation-agent:
      • Attached to: 執行模擬作業的 Compute Engine VM。
      • 角色:允許 VM 上傳結果並發出完成信號。
      • 權限:
        • roles/storage.objectUser:讀取輸入內容,並將構件 (記錄、報表) 上傳至 Cloud Storage。
        • roles/run.invoker:驗證並叫用 finish-simulation 函式。
  2. 自動化調度管理身分 (函式):

    • read-simulations-function:
      • 附加至:read-simulation Cloud 函式。
      • 權限:
        • roles/datastore.user:讀取 Firestore 中的模擬和 running-vm 記錄。
    • receive-request-function:

      • 附加至:receive-request Cloud 函式。
      • 權限:
        • roles/datastore.user:在 Firestore 中建立新的 PENDING 模擬記錄。
        • roles/storage.objectUser:驗證 Cloud Storage 中是否存在輸入檔案。
    • scheduler-function:

      • 附加至:schedule-simulation Cloud 函式。
      • 權限:
        • roles/pubsub.subscriber:從模擬佇列提取訊息。
        • roles/datastore.user:對 running-vms 計數器執行不可分割的讀取和寫入作業。
        • roles/compute.instanceAdmin.v1:建立並啟動 Compute Engine VM。
        • roles/iam.serviceAccountUser:允許這個函式將 simulation-agent 服務帳戶指派給建立的 VM。
    • simulation-finisher-function:

      • 附加至:finish-simulation Cloud 函式。
      • 權限:
        • roles/compute.instanceAdmin.v1:執行完成後刪除 VM。
        • roles/datastore.user:將模擬狀態更新為 COMPLETED 或 FAILED。
    • delete-simulation-function:

      • 附加至:delete-simulation Cloud 函式。
      • 權限:
        • roles/compute.instanceAdmin.v1:在取消期間強制刪除虛擬機器。
        • roles/datastore.user:更新已取消工作的狀態。
  3. 觸發條件身分:

    • scheduler-trigger:

      • 使用者:Eventarc (事件) 和 Cloud Scheduler 觸發條件。
      • 權限: roles/eventarc.eventReceiver 和 roles/run.invoker,用於觸發 orchestrator 函式。
    • cleanup-scheduler:

      • 使用這項屬性的工具:用於清除作業的 Cloud Scheduler cron 工作。
      • 權限: roles/run.invoker,用於觸發清理邏輯。

管理這些服務帳戶的 Identity and Access Management 政策,是控管系統內存取權和權限的主要方式。