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ę, upewnij się, że spełniasz te wymagania:
- projekt Google Cloud z włączonymi płatnościami,
- Zabezpieczenia wersji demonstracyjnej w przeglądarce: jeśli wdrażasz wersję demonstracyjną w przeglądarce, 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 pojazdu definiowanego programowo (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, które uruchamia Terraform, musi mieć wystarczające uprawnienia do tworzenia zasobów zdefiniowanych w konfiguracji (np. Edytujący projekt lub rolę niestandardową z uprawnieniami do Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage i innych niezbędnych usług).
- Narzędzia:
- Google Cloud CLI (
gcloud CLI) - Terraform (używana wersja w repozytorium)
- Docker
- Go (wersja używana w funkcjach orkiestratora w repozytorium)
- Google Cloud CLI (
Wdrażanie infrastruktury Google Cloud
Wdrażanie platformy symulacyjnej obejmuje 2 główne kroki: użycie Terraform do wdrożenia infrastruktury podstawowej w Google Cloud oraz utworzenie i przesłanie obrazu Dockera agenta symulacyjnego do Artifact Registry. W tej sekcji dowiesz się, jak wdrożyć infrastrukturę.
Wpisz wartości tych zmiennych, aby zaktualizować fragmenty kodu na tej stronie:
Skonfiguruj backend Terraform: utwórz plik, aby określić, gdzie Terraform przechowuje plik stanu w Cloud Storage. Nazwij plik, używając tej składni:
environments/ENVIRONMENT/backend.hcl# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"Skonfiguruj zmienne projektu: utwórz plik z danymi projektu. Nazwij plik, używając tej 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) supported_agent_builds = { "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589" } # Parallel Execution Limit (Default: 5) max_vm_count = 5Zastosuj konfigurację Terraform: przejdź do katalogu
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 przekazywanie obrazu agenta symulacji
Agent symulacji uruchamia symulację na maszynie wirtualnej Compute Engine. Tworzysz go za pomocą artefaktów SDV i przesyłasz do Artifact Registry.
Aby utworzyć i wypchnąć obraz agenta symulacji:
Umieść artefakty: skopiuj pliki
cvd-host_package.tar.gzisdv_core_cf-img-<version>.zipdo katalogusimulation-agent/sdv-image-resources/.Tworzenie i przekazywanie: przejdź do katalogu
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 cyfrowe: po przesłaniu nowego obrazu może być konieczne pobranie jego skrótu SHA256 i zaktualizowanie mapy
supported_agent_buildsw plikuvariables.tfvars, a następnie ponowne uruchomienieterraform apply.# Get the digest using gcloud gcloud artifacts docker images describe $AGENT_IMAGE --format="value(image_summary.digest)"Platforma Cloud Telemetry Simulation została wdrożona i jest gotowa do akceptowania żą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 z myślą o opłacalności dzięki wykorzystaniu zasobów bezserwerowych i efemerycznych. Koszty są generowane głównie przez:
- Compute Engine: opłaty są naliczane za czas działania maszyn wirtualnych symulacji. Korzystanie z maszyn wirtualnych typu spot może znacznie obniżyć ten koszt.
- Cloud Functions: opłaty są naliczane za wywołanie.
- Cloud Storage: opłaty za przechowywanie plików wejściowych i wyjściowych oraz logów.
- Firestore: opłaty są naliczane 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 zasobów:
- Cloud Functions: sprawdź logi funkcji
receive-requestlubschedule-simulation, aby rozwiązać problemy z orkiestracją. - Compute Engine: sprawdź logi instancji maszyn wirtualnych pod kątem problemów z uruchamianiem lub wyłączaniem.
- Agent symulacji: agent działający w kontenerze Dockera przekazuje logi do eksploratora logów. Aby zobaczyć szczegółowe informacje o postępie symulacji, przefiltruj według nazwy instancji maszyny wirtualnej.
- 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 zachowanie środowiska Androida.
Konta usługi
Terraform tworzy kilka kont usługi, aby umożliwić bezpieczne środowisko z jak najmniejszymi uprawnieniami. Kluczowe konta usługi:
Tożsamość wykonania (maszyna wirtualna):
simulation-agent:- Podłączono do: maszyny wirtualne 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łączono do: funkcja w Cloud Functions
read-simulation. - Uprawnienia:
roles/datastore.user: odczytuje rekordy symulacji i działających maszyn wirtualnych w Firestore.
- Dołączono do: funkcja w Cloud Functions
receive-request-function:- Dołączono do: funkcja w Cloud Functions
receive-request. - Uprawnienia:
roles/datastore.user: tworzy nowe rekordy symulacjiPENDINGw Firestore.roles/storage.objectUser: sprawdza, czy pliki wejściowe znajdują się w Cloud Storage.
- Dołączono do: funkcja w Cloud Functions
scheduler-function:- Dołączono do: funkcja w Cloud Functions
schedule-simulation. - Uprawnienia:
roles/pubsub.subscriber: pobiera wiadomości z kolejki symulacji.roles/datastore.user: wykonuje pojedyncze odczyty i zapisy w licznikurunning-vms.roles/compute.instanceAdmin.v1: tworzy i uruchamia maszyny wirtualne Compute Engine.roles/iam.serviceAccountUser: umożliwia tej funkcji przypisanie konta usługisimulation-agentdo tworzonych przez nią maszyn wirtualnych.
- Dołączono do: funkcja w Cloud Functions
simulation-finisher-function:- Dołączono do: funkcja w Cloud Functions
finish-simulation. - Uprawnienia:
roles/compute.instanceAdmin.v1: usuwa maszynę wirtualną po zakończeniu wykonywania.roles/datastore.user: aktualizuje stan symulacji doCOMPLETEDlubFAILED.
- Dołączono do: funkcja w Cloud Functions
delete-simulation-function:- Dołączono do: funkcja w Cloud Functions
delete-simulation. - Uprawnienia:
roles/compute.instanceAdmin.v1: wymusza usunięcie maszyn wirtualnych podczas anulowania.roles/datastore.user: aktualizuje stan anulowanych zadań.
- Dołączono do: funkcja w Cloud Functions
Tożsamości aktywujące:
scheduler-trigger:- Używane przez: Eventarc (zdarzenia) i aktywatory Cloud Scheduler.
- Uprawnienia:
roles/eventarc.eventReceiveriroles/run.invokerdo aktywowania funkcji orkiestratora.
cleanup-scheduler:- Używane przez: zadanie cron usługi Cloud Scheduler do czyszczenia.
- Uprawnienia:
roles/run.invokerdo aktywowania logiki czyszczenia.
Zarządzanie zasadami zarządzania tożsamościami i dostępem dla tych kont usługi jest podstawowym sposobem kontrolowania dostępu i uprawnień w systemie.