Przewodnik wdrożeniowy

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.gz
    • sdv_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)

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:

  1. 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"
    
  2. 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 = 5
    
  3. Zastosuj 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:

  1. Umieść artefakty: skopiuj pliki cvd-host_package.tar.gz i sdv_core_cf-img-<version>.zip do katalogu simulation-agent/sdv-image-resources/.

  2. 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 pliku 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. Zaktualizuj odciski cyfrowe: po przesłaniu nowego obrazu może być konieczne pobranie jego skrótu SHA256 i zaktualizowanie mapy supported_agent_builds w pliku variables.tfvars, a następnie ponowne uruchomienie terraform 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-request lub schedule-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 Storage: w przypadku ukończonych symulacji pliki logcat i bugreport z 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:

  1. 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.
  2. 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.
    • receive-request-function:

      • Dołączono do: funkcja w Cloud Functions receive-request.
      • Uprawnienia:
        • roles/datastore.user: tworzy nowe rekordy symulacji PENDING w Firestore.
        • roles/storage.objectUser: sprawdza, czy pliki wejściowe znajdują się w Cloud Storage.
    • 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 liczniku running-vms.
        • roles/compute.instanceAdmin.v1: tworzy i uruchamia maszyny wirtualne Compute Engine.
        • roles/iam.serviceAccountUser: umożliwia tej funkcji przypisanie konta usługi simulation-agent do tworzonych przez nią maszyn wirtualnych.
    • 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 do COMPLETED lub FAILED.
    • 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ń.
  3. Tożsamości aktywujące:

    • scheduler-trigger:

      • Używane przez: Eventarc (zdarzenia) i aktywatory Cloud Scheduler.
      • Uprawnienia: roles/eventarc.eventReceiver i roles/run.invoker do aktywowania funkcji orkiestratora.
    • cleanup-scheduler:

      • Używane przez: zadanie cron usługi Cloud Scheduler do czyszczenia.
      • Uprawnienia: roles/run.invoker do 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.