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

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:

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

  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. 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 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 palców: po przesłaniu nowego obrazu może być konieczne pobranie jego skrótu SHA256 i zaktualizowanie mapy image_fingerprints w pliku variables.tfvars, a następnie ponowne uruchomienie polecenia terraform 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-request lub schedule-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 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 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:

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

      • Dołączone do: funkcji Cloud receive-request.
      • Uprawnienia:
        • roles/datastore.user: tworzy nowe rekordy symulacji PENDING w Firestore.
        • roles/storage.objectUser: sprawdza istnienie plików wejściowych w Cloud Storage.
    • 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.
        
    • 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 na COMPLETED lub FAILED.
    • 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ń.
  3. Tożsamości aktywatorów:

    • scheduler-trigger:

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

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