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.gzsdv_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 CLI (
Google Cloud インフラストラクチャをデプロイする
シミュレーション プラットフォームのデプロイには、Terraform を使用してコア インフラストラクチャを Google Cloud にデプロイする手順と、シミュレーション エージェントの Docker イメージをビルドして Artifact Registry に push する手順の 2 つの主な手順があります。このセクションでは、インフラストラクチャをデプロイする手順について説明します。
次の変数の値を入力して、このページのコード スニペットを更新します。
Terraform バックエンドを構成する: Terraform が状態ファイルを Cloud Storage に保存する場所を指定するファイルを作成します。次の構文を使用してファイルに名前を付けます。
environments/ENVIRONMENT/backend.hcl# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"プロジェクト変数を構成する: プロジェクトの詳細を含む という名前のファイルを作成します。次の構文を使用してファイルに名前を付けます。
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 = 5Terraform 構成を適用する:
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 するには:
アーティファクトを配置する:
cvd-host_package.tar.gzおよびsdv_core_cf-img-<version>.zipファイルをsimulation-agent/sdv-image-resources/ディレクトリにコピーします。ビルドして 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フィンガープリントを更新する: 新しいイメージを 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 Functions:
- Cloud Storage: 完了したシミュレーションの場合、Cuttlefish デバイスの
logcatファイルとbugreportファイルが Cloud Storage バケットのシミュレーションの出力ディレクトリにアップロードされ、Android 環境の動作を詳細に把握できます。
サービス アカウント
Terraform は、安全な最小権限環境を実現するために、複数のサービス アカウントを作成します。主なサービス アカウントは次のとおりです。
実行 ID(VM):
simulation-agent:- 接続先: シミュレーションを実行する Compute Engine VM。
- ロール: VM が結果をアップロードして完了を通知できるようにします。
- 権限:
roles/storage.objectUser: 入力を読み取り、アーティファクト(ログ、レポート)を Cloud Storage にアップロードします。roles/run.invoker:finish-simulation関数を認証して呼び出します。
オーケストレーション ID(関数):
read-simulations-function:- 接続先:
read-simulationCloud Functions。 - 権限:
roles/datastore.user: Firestore でシミュレーションと実行中の VM レコードを読み取ります。
- 接続先:
receive-request-function:- 接続先:
receive-requestCloud Functions。 - 権限:
roles/datastore.user: Firestore に新しいPENDINGシミュレーション レコードを作成します。roles/storage.objectUser: Cloud Storage に入力ファイルが存在することを確認します。
- 接続先:
scheduler-function:- 接続先:
schedule-simulationCloud 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-simulationCloud Functions。 - 権限:
-
roles/compute.instanceAdmin.v1: 実行が 完了したら VM を削除します。 -roles/datastore.user: シミュレーション ステータスをCOMPLETEDまたはFAILEDに更新します。
- 接続先:
delete-simulation-function:- 接続先:
delete-simulationCloud Functions。 - 権限:
-
roles/compute.instanceAdmin.v1: キャンセル時に仮想マシンを強制的に削除します。 -roles/datastore.user: キャンセルされたジョブのステータスを更新します。
- 接続先:
トリガー ID:
scheduler-trigger:- 使用元: Eventarc(イベント)と Cloud Scheduler トリガー。
- 権限: オーケストレータ関数をトリガーする
roles/eventarc.eventReceiverとroles/run.invoker。
cleanup-scheduler:- 使用元: クリーンアップ用の Cloud Scheduler cron ジョブ。
- 権限: クリーンアップ ロジックをトリガーする
roles/run.invoker。
これらのサービス アカウントの Identity and Access Management ポリシーを管理することは、システム内のアクセスと権限を制御する主な方法です。