Dağıtım kılavuzu

Cloud Telemetry Simulation platformu, altyapıyı Google Cloud projenize dağıtmanızı gerektirir.

Kaynak koduna erişme

Cloud Telemetry Simulation platformunun kaynak kodu, GitHub'da aaos-sdv-telemetry-simulator adresinde 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 etkin olduğu 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 erişimi yetkili Google Hesapları ile 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ım tanımlı araç (SDV) derleme yapıları: Kendi derlenmiş SDV görüntü yapılarınız olmalıdır. Bunlar 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 izinleri olan ö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 platformunu dağıtmak için iki ana adım gerekir: Terraform kullanarak temel altyapıyı Google Cloud'a dağıtmak ve simülasyon temsilcisi Docker görüntüsünü oluşturup Artifact Registry'ye göndermek. Bu bölümde, altyapıyı dağıtma adımları açıklanmaktadır.

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 nerede depolayacağını 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ırma: 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)
    supported_agent_builds = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_vm_count = 5
    
  3. Terraform yapılandırmasını uygulayın: infrastructure dizinine gidin, ardından yapılandırmayı ilk kullanıma hazırlayıp 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 temsilcisi görüntüsünü derleme ve gönderme

Simülasyon aracısı, simülasyonu Compute Engine sanal makinesinde (VM) çalıştırır. SDV yapılarınızla derleyip Artifact Registry'ye aktarırsınız.

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

  1. Yapıları 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 aktarma: simulation-agent dizinine gidin, ardından görüntüyü derleyip aktarın. 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 variables.tfvars dosyanızdaki supported_agent_builds eşlemesini güncellemeniz, ardından terraform apply komutunu yeniden çalıştırmanız gerekebilir.

    # Get the digest using gcloud
    gcloud artifacts docker 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ütme sırasında işlem kaynaklarını kullanır.

Maliyet yönetimi

Mimari, sunucusuz ve geçici kaynaklar kullanarak uygun maliyetli olacak şekilde tasarlanmıştır. Maliyetlerin başlıca nedenleri:

  • 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ı ile günlüklerin depolanması için faturalandırılır.
  • Firestore: Okuma, yazma ve veri depolama işlemleri için faturalandırılır.

Gözlemlenebilirlik

Tüm bileşenler Google Cloud operasyon paketine entegre edilmiştir.

  • Günlük Gezgini: Sorun giderme için kullanacağınız birincil araçtır. Günlükleri kaynağa göre filtreleyebilirsiniz:
    • Cloud Functions: Düzenleme sorunlarını gidermek 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'ında çalışan aracı, günlüklerini Günlük Gezgini'ne yönlendirir. Sanal makine örneği adına göre filtreleyerek simülasyonun ilerleme durumunu ayrıntılı olarak görebilirsiniz.
  • Cloud Storage: Tamamlanan simülasyonlarda, Cuttlefish cihazındaki logcat ve bugreport dosyaları Cloud Storage paketindeki simülasyonun çıkış dizinine yüklenir. Bu sayede Android ortamının davranışı hakkında ayrıntılı bilgi edinilir.

Hizmet hesapları

Terraform, güvenli ve en az ayrıcalık ilkesine uygun bir ortam oluşturmak için birkaç hizmet hesabı oluşturur. Başlıca hizmet hesapları şunlardır:

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

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

    • read-simulations-function:
      • Ekli olduğu yer: read-simulation Cloud Functions işlevi.
      • İzinler:
        • roles/datastore.user: Firestore'daki simülasyon ve çalışan sanal makine kayıtlarını okur.
    • receive-request-function:

      • Ekli olduğu yer: receive-request Cloud Functions işlevi.
      • İzinler:
        • roles/datastore.user: Firestore'da yeni PENDING simülasyon kayıtları oluşturur.
        • roles/storage.objectUser: Cloud Storage'da giriş dosyalarının varlığını doğrular.
    • scheduler-function:

      • Ekli olduğu yer: schedule-simulation Cloud Functions işlevi.
      • İzinler:
        • roles/pubsub.subscriber: Simülasyon sırasından mesajları alır.
        • roles/datastore.user: running-vms sayacına atomik okuma ve yazma işlemleri gerçekleştirir.
        • roles/compute.instanceAdmin.v1: Compute Engine sanal makineleri oluşturur ve başlatır.
        • roles/iam.serviceAccountUser: Bu işlevin, oluşturduğu sanal makinelere simulation-agent hizmet hesabını atamasına olanak tanır.
    • simulation-finisher-function:

      • Ekli olduğu yer: 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:

      • Ekli olduğu yer: 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ıldığı yerler: 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 yeri: 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 birincil yoludur.