Dağıtım kılavuzu

Cloud Telemetry Simulation platformunu kullanmak için altyapıyı Google Cloud projenize dağıtmanız gerekir.

Kaynak koduna erişme

Cloud Telemetry Simulation platformunun kaynak kodu, GitHub'da aaos-sdv-telemetry-simulator içinde barındırılır.

Ön koşullar

Platformu dağıtmak için aşağıdaki ön koşulları karşıladığınızdan emin olun:

  • Faturalandırmanın etkinleştirildiği bir Google Cloud projesi.
  • Web demosu güvenliği: Web demosunu dağıtırsanız App Engine uygulamasının güvenliğini sağlamak ve yetkili Google Hesaplarına erişimi kısıtlamak için Google Cloud API'ler ve Hizmetler > Kimlik Bilgileri bölümünde bir OAuth 2.0 istemci kimliği yapılandırmanız gerekir.
  • Yazılımla Tanımlanan Araç (SDV) derleme yapıları: Derlenmiş kendi SDV görüntü yapılarınız olmalıdır. Bu bilgiler bu depoda sağlanmaz.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • İzinler: Terraform'u çalıştıran kullanıcı veya hizmet hesabı, yapılandırmada tanımlanan kaynakları oluşturmak için yeterli izinlere sahip olmalıdır (örneğin, Proje Düzenleyici veya Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage ve diğer gerekli hizmetler için izinlere sahip özel bir rol).
  • Araçlar:
    • Google Cloud KSA (gcloud CLI)
    • Terraform (depoda kullanılan sürüm)
    • Docker
    • Go (depodaki düzenleyici işlevleri için kullanılan sürüm)

Google Cloud altyapısını dağıtma

Simülasyon platformunun dağıtılması iki ana adımdan oluşur: temel altyapıyı Google Cloud'a dağıtmak için Terraform'u kullanma ve simülasyon aracısı Docker görüntüsünü oluşturup Artifact Registry'ye aktarma. Bu bölümde, altyapının dağıtılmasıyla ilgili bilgiler verilmektedir.

Bu sayfadaki kod snippet'lerini güncellemek için aşağıdaki değişkenlerin değerlerini girin:

  1. Terraform arka ucunu yapılandırın: Terraform'un durum dosyasını Cloud Storage'da nereye kaydedeceğini belirten bir dosya oluşturun. Dosyayı şu söz dizimini kullanarak adlandırın:

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. Proje değişkenlerini yapılandırın: Projenizin ayrıntılarını içeren bir dosya oluşturun. Dosyayı şu söz dizimini kullanarak adlandırın:

    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. Terraform yapılandırmasını uygulayın: infrastructuredizine gidin, ardından yapılandırmayı başlatın ve uygulayın:

    # 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
    

Simülasyon aracısı görüntüsünü oluşturma ve aktarma

Simülasyon aracısı, simülasyonu Compute Engine sanal makinesinde (VM) çalıştırır. SDV yapay nesnelerinizle oluşturup Artifact Registry'ye aktarırsınız.

Simülasyon aracısı görüntüsünü oluşturmak ve göndermek için:

  1. Yapay nesneleri yerleştirme: cvd-host_package.tar.gz ve sdv_core_cf-img-<version>.zip dosyalarınızı simulation-agent/sdv-image-resources/ dizinine kopyalayın.

  2. Derleme ve gönderme: simulation-agent dizinine gidin, ardından görüntüyü derleyip gönderin. Resim yolunu variables.tfvars dosyanızda yapılandırdığınız yolla değiştirin.

    # 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. Parmak izlerini güncelleme: Yeni bir görüntü gönderdikten sonra SHA256 özetini almanız ve image_fingerprints haritasını variables.tfvars dosyanızda güncellemeniz, ardından terraform apply komutunu yeniden çalıştırmanız gerekebilir.

    # Get the digest using gcloud
    gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"
    

    Cloud Telemetry Simulation platformunuz dağıtıldı ve simülasyon isteklerini kabul etmeye hazır.

İşlemler ve sorun giderme

Bu çözüm, gözlemlenebilirlik için Google Cloud'un yerleşik araçlarını kullanmanıza olanak tanır. Yalnızca istek başına ve simülasyon yürütmesi sırasında bilgi işlem kaynaklarını tüketir.

Maliyet yönetimi

Mimari, sunucusuz ve kısa ömürlü kaynaklar kullanılarak uygun maliyetli olacak şekilde tasarlanmıştır. Maliyetler başlıca şu faktörlerden etkilenir:

  • Compute Engine: Simülasyon sanal makinelerinin çalıştığı süre için faturalandırılır. Spot sanal makineleri kullanmak bu maliyeti önemli ölçüde azaltabilir.
  • Cloud Functions: Çağrı başına faturalandırılır.
  • Cloud Storage: Giriş ve çıkış dosyalarının ve günlüklerin depolanması için faturalandırılır.
  • Firestore: Okuma, yazma ve veri depolama için faturalandırılır.

Gözlemlenebilirlik

Tüm bileşenler, Google Cloud işlem paketiyle entegre edilmiştir.

  • Günlük Gezgini: Bu, sorun giderme için kullandığınız birincil araçtır. Günlükleri kaynağa göre filtreleyebilirsiniz:
    • Cloud Functions: Düzenleme sorunlarında hata ayıklamak için receive-request veya schedule-simulation işlevlerinin günlüklerini kontrol edin.
    • Compute Engine: Başlatma veya kapatma sorunları için sanal makine örneği günlüklerini kontrol edin.
    • Simülasyon aracısı: Docker container'ının içinde çalışan aracı, günlüklerini Günlük Gezgini'ne yönlendirir. Ayrıntılı simülasyon ilerleme durumunu görmek için sanal makine örneği adına göre filtreleyin.
  • Cloud Storage: Tamamlanan simülasyonlarda, Cuttlefish cihazındaki logcat ve bugreport dosyaları, Cloud Storage paketindeki simülasyonun çıkış dizinine yüklenerek Android ortamının davranışıyla ilgili ayrıntılı bilgiler sağlanır.

Hizmet hesapları

Terraform, güvenli ve en az ayrıcalıklı bir ortam sağlamak için çeşitli hizmet hesapları oluşturur. Başlıca hizmet hesapları şunlardır:

  1. Yürütme kimliği (VM):

    • simulation-agent:
      • Bağlı olduğu: Simülasyonu çalıştıran Compute Engine sanal makineleri.
      • Rol: Sanal makinenin sonuçları yüklemesine ve tamamlanma sinyali vermesine olanak tanır.
      • İzinler:
        • roles/storage.objectUser: Girişleri okur ve Cloud Storage'a yapılar (günlükler, raporlar) yükler.
        • roles/run.invoker: finish-simulation işlevini doğrular ve çağırır.
  2. Düzenleme kimlikleri (işlevler):

    • read-simulations-function:
      • Şuna bağlı: read-simulation Cloud Functions işlevi.
      • İzinler:
        • roles/datastore.user: Firestore'da simülasyon ve running-vm kayıtlarını okur.
    • receive-request-function:

      • Şuna bağlı: receive-request Cloud Functions işlevi.
      • İzinler:
        • roles/datastore.user: Firestore'da yeni PENDING simülasyon kayıtları oluşturur.
        • roles/storage.objectUser: Giriş dosyalarının Cloud Storage'da mevcut olup olmadığını doğrular.
    • scheduler-function:

      • Şuna bağlı: schedule-simulation Cloud Functions işlevi.
      • İzinler:

        -   `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:

      • Şuna bağlı: finish-simulation Cloud Functions işlevi.
      • İzinler: - roles/compute.instanceAdmin.v1: Yürütme tamamlandıktan sonra sanal makineyi siler. - roles/datastore.user: Simülasyon durumunu COMPLETED veya FAILED olarak günceller.
    • delete-simulation-function:

      • Şuna bağlı: delete-simulation Cloud Functions işlevi.
      • İzinler: - roles/compute.instanceAdmin.v1: İptal sırasında sanal makineleri zorunlu olarak siler. - roles/datastore.user: İptal edilen işlerin durumunu günceller.
  3. Tetikleyici kimlikleri:

    • scheduler-trigger:

      • Kullanım alanları: Eventarc (etkinlikler) ve Cloud Scheduler tetikleyicileri.
      • İzinler: Düzenleyici işlevlerini tetiklemek için roles/eventarc.eventReceiver ve roles/run.invoker.
    • cleanup-scheduler:

      • Kullanım amacı: Temizleme için Cloud Scheduler cron işi.
      • İzinler: Temizleme mantığını tetiklemek için roles/run.invoker.

Bu hizmet hesapları için Kimlik ve Erişim Yönetimi politikalarını yönetmek, sistemdeki erişimi ve izinleri kontrol etmenin temel yoludur.