デプロイガイド

Cloud Telemetry Simulation プラットフォームでは、インフラストラクチャを Google Cloud プロジェクトにデプロイする必要があります。

ソースコードにアクセスする

Cloud Telemetry Simulation プラットフォームのソースコードは、GitHub の aaos-sdv-telemetry-simulator でホストされています。

前提条件

プラットフォームをデプロイするには、次の前提条件を満たしていることを確認してください。

  • 課金が有効 になっている Google Cloud プロジェクト。
  • ウェブ デモのセキュリティ: ウェブ デモをデプロイする場合は、Google Cloud の[API とサービス] > [認証情報]OAuth 2.0 クライアント ID を構成して、App Engine アプリケーションを保護し、承認された Google アカウントへのアクセスを制限する必要があります。
  • Software Defined Vehicle(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 CLIgcloud CLI
    • Terraform (リポジトリで使用されているバージョン)
    • Docker
    • Go (リポジトリのオーケストレータ関数で使用されているバージョン)

Google Cloud インフラストラクチャをデプロイする

シミュレーション プラットフォームのデプロイには、Terraform を使用してコア インフラストラクチャを Google Cloud にデプロイする手順と、シミュレーション エージェントの Docker イメージをビルドして Artifact Registry に push する手順の 2 つの主な手順があります。このセクションでは、インフラストラクチャをデプロイする手順について説明します。

次の変数の値を入力して、このページのコード スニペットを更新します。

  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)
    image_fingerprints = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_concurrent_simulations = 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
    

シミュレーション エージェント イメージをビルドして push する

シミュレーション エージェントは、Compute Engine 仮想マシン(VM)でシミュレーションを実行します。SDV アーティファクトを使用してビルドし、Artifact Registry に push します。

シミュレーション エージェント イメージをビルドして push するには:

  1. アーティファクトを配置する: cvd-host_package.tar.gz および sdv_core_cf-img-<version>.zip ファイルを simulation-agent/sdv-image-resources/ ディレクトリにコピーします。

  2. ビルドして push する: simulation-agent ディレクトリに移動し、イメージをビルドして push します。イメージパスを、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. フィンガープリントを更新する: 新しいイメージを push した後、SHA256 ダイジェストを取得して variables.tfvars ファイルの image_fingerprints マップを更新し、terraform apply を再実行する必要がある場合があります。

    # Get the digest using gcloud
    gcloud container 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 のオペレーション スイートと統合されています。

  • ログ エクスプローラ: トラブルシューティングの主要なツールです。リソースごとにログをフィルタできます。
    • Cloud Functions: receive-request 関数または schedule-simulation 関数のログを確認して、オーケストレーションの問題をデバッグします。
    • Compute Engine: VM インスタンスのログを確認して、起動またはシャットダウンの問題を確認します。
    • シミュレーション エージェント: Docker コンテナ内で実行されているエージェントは、ログをログ エクスプローラに転送します。VM インスタンス名でフィルタして、シミュレーションの詳細な進行状況を確認します。
  • Cloud Storage: 完了したシミュレーションの場合、Cuttlefish デバイスの logcat ファイルと bugreport ファイルが Cloud Storage バケットのシミュレーションの出力ディレクトリにアップロードされ、Android 環境の動作を詳細に把握できます。

サービス アカウント

Terraform は、安全な最小権限環境を実現するために、複数のサービス アカウントを作成します。主なサービス アカウントは次のとおりです。

  1. 実行 ID(VM):

    • simulation-agent:
      • 接続先: シミュレーションを実行する Compute Engine VM。
      • ロール: VM が結果をアップロードして完了を通知できるようにします。
      • 権限:
        • roles/storage.objectUser: 入力を読み取り、アーティファクト(ログ、レポート)を Cloud Storage にアップロードします。
        • roles/run.invoker: finish-simulation 関数を認証して呼び出します。
  2. オーケストレーション ID(関数):

    • read-simulations-function:
      • 接続先: read-simulation Cloud Functions。
      • 権限:
        • roles/datastore.user: Firestore でシミュレーションと実行中の VM レコードを読み取ります。
    • receive-request-function:

      • 接続先: receive-request Cloud Functions。
      • 権限:
        • roles/datastore.user: Firestore に新しい PENDING シミュレーション レコードを作成します。
        • roles/storage.objectUser: Cloud Storage に入力ファイルが存在することを確認します。
    • scheduler-function:

      • 接続先: schedule-simulation Cloud Functions。
      • 権限:

        -   `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:

      • 接続先: finish-simulation Cloud Functions。
      • 権限: - roles/compute.instanceAdmin.v1: 実行が 完了したら VM を削除します。 - roles/datastore.user: シミュレーション ステータスを COMPLETED または FAILED に更新します。
    • delete-simulation-function:

      • 接続先: delete-simulation Cloud Functions。
      • 権限: - roles/compute.instanceAdmin.v1: キャンセル時に仮想マシンを強制的に削除します。 - roles/datastore.user: キャンセルされたジョブのステータスを更新します。
  3. トリガー ID:

    • scheduler-trigger:

      • 使用元: Eventarc(イベント)と Cloud Scheduler トリガー。
      • 権限: オーケストレータ関数をトリガーする roles/eventarc.eventReceiverroles/run.invoker
    • cleanup-scheduler:

      • 使用元: クリーンアップ用の Cloud Scheduler cron ジョブ。
      • 権限: クリーンアップ ロジックをトリガーする roles/run.invoker

これらのサービス アカウントの Identity and Access Management ポリシーを管理することは、システム内のアクセスと権限を制御する主な方法です。