Platforma Cloud Telemetry Simulation wymaga wdrożenia infrastruktury w projekcie Google Cloud.
Dostęp do kodu źródłowego
Kod źródłowy platformy Cloud Telemetry Simulation jest hostowany na GitHubie, w repozytorium aaos-sdv-telemetry-simulator.
Wymagania wstępne
Aby wdrożyć platformę, musisz spełnić te wymagania wstępne:
- Projekt Google Cloud z włączonymi płatnościami.
- Zabezpieczenia wersji demonstracyjnej w internecie: jeśli wdrażasz wersję demonstracyjną w internecie, musisz skonfigurować identyfikator klienta OAuth 2.0 w Google Cloud w sekcji Interfejsy API i usługi > Dane logowania , aby zabezpieczyć aplikację App Engine i ograniczyć dostęp do autoryzowanych kont Google.
- Artefakty kompilacji oprogramowania SDV: musisz mieć własne skompilowane artefakty obrazu SDV. Nie są one dostępne w tym repozytorium.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- Uprawnienia: użytkownik lub konto usługi, na którym działa Terraform, musi mieć wystarczające uprawnienia do tworzenia zasobów zdefiniowanych w konfiguracji (np. Edytujący projekt lub rola niestandardowa z uprawnieniami do Compute Engine, Cloud Functions, zarządzania tożsamościami i dostępem, Cloud Storage i innych niezbędnych usług).
- Narzędzia:
- Google Cloud CLI (
gcloud CLI) - Terraform (wersja używana w repozytorium)
- Docker
- Go (wersja używana w repozytorium do funkcji orkiestratora)
- Google Cloud CLI (
Wdrażanie infrastruktury Google Cloud
Wdrożenie platformy symulacyjnej obejmuje 2 główne kroki: wdrożenie podstawowej infrastruktury w Google Cloud za pomocą Terraform oraz utworzenie i przesłanie obrazu Dockera agenta symulacji do Artifact Registry. W tej sekcji znajdziesz instrukcje wdrażania infrastruktury.
Wpisz wartości tych zmiennych, aby zaktualizować fragmenty kodu na tej stronie:
Skonfiguruj backend Terraform: utwórz plik, aby określić, gdzie Terraform ma przechowywać plik stanu w Cloud Storage. Nazwij plik zgodnie z tą składnią:
environments/ENVIRONMENT/backend.hcl# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"Skonfiguruj zmienne projektu: utwórz plik o nazwie zawierającej szczegóły projektu. Nazwij plik zgodnie z tą składnią:
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 = 5Zastosuj konfigurację Terraform: otwórz katalog
infrastructure, a następnie zainicjuj i zastosuj konfigurację:# 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
Tworzenie i przesyłanie obrazu agenta symulacji
Agent symulacji uruchamia symulację w maszynie wirtualnej Compute Engine. Tworzysz go za pomocą artefaktów SDV i przesyłasz do Artifact Registry.
Aby utworzyć i przesłać obraz agenta symulacji:
Umieść artefakty: skopiuj pliki
cvd-host_package.tar.gzisdv_core_cf-img-<version>.zipdo katalogusimulation-agent/sdv-image-resources/.Utwórz i prześlij: otwórz katalog
simulation-agent, a następnie utwórz i prześlij obraz. Zastąp ścieżkę obrazu ścieżką skonfigurowaną w plikuvariables.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_IMAGEZaktualizuj odciski palców: po przesłaniu nowego obrazu może być konieczne pobranie jego skrótu SHA256 i zaktualizowanie mapy
image_fingerprintsw plikuvariables.tfvars, a następnie ponowne uruchomienie poleceniaterraform apply.# Get the digest using gcloud gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"Platforma Cloud Telemetry Simulation jest wdrożona i gotowa do przyjmowania żądań symulacji.
Operacje i rozwiązywanie problemów
To rozwiązanie umożliwia korzystanie z wbudowanych narzędzi Google Cloud do obserwacji. Zużywa zasoby obliczeniowe tylko na żądanie i podczas wykonywania symulacji.
Zarządzanie kosztami
Architektura została zaprojektowana tak, aby była opłacalna dzięki wykorzystaniu zasobów bezserwerowych i tymczasowych. Koszty są głównie związane z tymi usługami:
- Compute Engine: opłata jest naliczana za czas działania maszyn wirtualnych symulacji. Korzystanie z maszyn wirtualnych typu spot może znacznie obniżyć ten koszt.
- Cloud Functions: opłata jest naliczana za każde wywołanie.
- Cloud Storage: opłata jest naliczana za przechowywanie plików wejściowych i wyjściowych oraz logów.
- Firestore: opłata jest naliczana za odczyty, zapisy i przechowywanie danych.
Dostrzegalność
Wszystkie komponenty są zintegrowane z pakietem operacyjnym Google Cloud.
- Eksplorator logów: to główne narzędzie do rozwiązywania problemów. Możesz filtrować logi według zasobu:
- Cloud Functions: sprawdź logi funkcji
receive-requestlubschedule-simulation, aby debugować problemy z orkiestracją. - Compute Engine: sprawdź logi instancji maszyn wirtualnych pod kątem problemów z uruchamianiem lub zamykaniem.
- Agent symulacji: agent działający w kontenerze Dockera przekazuje swoje logi do Eksploratora logów. Filtruj według nazwy instancji maszyny wirtualnej, aby zobaczyć szczegółowy postęp symulacji.
- Cloud Functions: sprawdź logi funkcji
- Cloud Storage: w przypadku ukończonych symulacji pliki
logcatibugreportz urządzenia Cuttlefish są przesyłane do katalogu wyjściowego symulacji w zasobniku Cloud Storage, co zapewnia szczegółowy wgląd w działanie środowiska Androida.
Konta usługi
Terraform tworzy kilka kont usługi, aby zapewnić bezpieczne środowisko z najmniejszymi uprawnieniami. Główne konta usługi:
Tożsamość wykonania (maszyna wirtualna):
simulation-agent:- Dołączone do: maszyn wirtualnych Compute Engine, na których działa symulacja.
- Rola: umożliwia maszynie wirtualnej przesyłanie wyników i sygnalizowanie zakończenia.
- Uprawnienia:
roles/storage.objectUser: odczytuje dane wejściowe i przesyła artefakty (logi, raporty) do Cloud Storage.roles/run.invoker: uwierzytelnia i wywołuje funkcjęfinish-simulation.
Tożsamości orkiestracji (funkcje):
read-simulations-function:- Dołączone do: funkcji Cloud
read-simulation. - Uprawnienia:
roles/datastore.user: odczytuje rekordy symulacji i działających maszyn wirtualnych w Firestore.
- Dołączone do: funkcji Cloud
receive-request-function:- Dołączone do: funkcji Cloud
receive-request. - Uprawnienia:
roles/datastore.user: tworzy nowe rekordy symulacjiPENDINGw Firestore.roles/storage.objectUser: sprawdza istnienie plików wejściowych w Cloud Storage.
- Dołączone do: funkcji Cloud
scheduler-function:- Dołączone do: funkcji Cloud
schedule-simulation. Uprawnienia:
- `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.
- Dołączone do: funkcji Cloud
simulation-finisher-function:- Dołączone do: funkcji Cloud
finish-simulation. - Uprawnienia:
-
roles/compute.instanceAdmin.v1: usuwa maszynę wirtualną po zakończeniu wykonywania. -roles/datastore.user: aktualizuje stan symulacji naCOMPLETEDlubFAILED.
- Dołączone do: funkcji Cloud
delete-simulation-function:- Dołączone do: funkcji Cloud
delete-simulation. - Uprawnienia:
-
roles/compute.instanceAdmin.v1: wymusza usunięcie maszyn wirtualnych podczas anulowania. -roles/datastore.user: aktualizuje stan anulowanych zadań.
- Dołączone do: funkcji Cloud
Tożsamości aktywatorów:
scheduler-trigger:- Używane przez: aktywatory Eventarc (zdarzenia) i Cloud Scheduler.
- Uprawnienia:
roles/eventarc.eventReceiveriroles/run.invokerdo aktywowania funkcji orkiestratora.
cleanup-scheduler:- Używane przez: zadanie cron Cloud Scheduler do czyszczenia.
- Uprawnienia:
roles/run.invokerdo aktywowania logiki czyszczenia.
Zarządzanie zasadami zarządzania tożsamościami i dostępem w przypadku tych kont usługi to podstawowy sposób kontrolowania dostępu i uprawnień w systemie.