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 アカウントへのアクセスを制限する必要があります。
- ソフトウェア定義車両(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) supported_agent_builds = { "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589" } # Parallel Execution Limit (Default: 5) max_vm_count = 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ファイルの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 のオペレーション スイートと統合されています。
- ログ エクスプローラ: トラブルシューティングの主要なツールです。ログはリソースでフィルタできます。
- 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 のシミュレーション レコードと running-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: シミュレーション キューからメッセージを pull します。roles/datastore.user:running-vmsカウンタに対してアトミックな読み取りと書き込みを実行します。roles/compute.instanceAdmin.v1: Compute Engine VM を作成して起動します。roles/iam.serviceAccountUser: この関数が作成する VM にsimulation-agentサービス アカウントを割り当てることができます。
- 接続先:
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 ポリシーを管理することは、システム内のアクセスと権限を制御する主な方法です。