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.gzsdv_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 KSA (
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:
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"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 = 5Terraform yapılandırmasını uygulayın:
infrastructuredizinine 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:
Yapıları yerleştirme:
cvd-host_package.tar.gzvesdv_core_cf-img-<version>.zipdosyalarınızısimulation-agent/sdv-image-resources/dizinine kopyalayın.Derleme ve aktarma:
simulation-agentdizinine gidin, ardından görüntüyü derleyip aktarın. Resim yolunu,variables.tfvarsdosyanı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_IMAGEParmak izlerini güncelleme: Yeni bir görüntü gönderdikten sonra SHA256 özetini almanız ve
variables.tfvarsdosyanızdakisupported_agent_buildseşlemesini güncellemeniz, ardındanterraform applykomutunu 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-requestveyaschedule-simulationiş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 Functions: Düzenleme sorunlarını gidermek için
- Cloud Storage: Tamamlanan simülasyonlarda, Cuttlefish cihazındaki
logcatvebugreportdosyaları 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:
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-simulationişlevinin kimliğini doğrular ve işlevi çağırır.
Düzenleme kimlikleri (işlevler):
read-simulations-function:- Ekli olduğu yer:
read-simulationCloud Functions işlevi. - İzinler:
roles/datastore.user: Firestore'daki simülasyon ve çalışan sanal makine kayıtlarını okur.
- Ekli olduğu yer:
receive-request-function:- Ekli olduğu yer:
receive-requestCloud Functions işlevi. - İzinler:
roles/datastore.user: Firestore'da yeniPENDINGsimülasyon kayıtları oluşturur.roles/storage.objectUser: Cloud Storage'da giriş dosyalarının varlığını doğrular.
- Ekli olduğu yer:
scheduler-function:- Ekli olduğu yer:
schedule-simulationCloud Functions işlevi. - İzinler:
roles/pubsub.subscriber: Simülasyon sırasından mesajları alır.roles/datastore.user:running-vmssayacı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 makineleresimulation-agenthizmet hesabını atamasına olanak tanır.
- Ekli olduğu yer:
simulation-finisher-function:- Ekli olduğu yer:
finish-simulationCloud Functions işlevi. - İzinler:
roles/compute.instanceAdmin.v1: Yürütme tamamlandıktan sonra sanal makineyi siler.roles/datastore.user: Simülasyon durumunuCOMPLETEDveyaFAILEDolarak günceller.
- Ekli olduğu yer:
delete-simulation-function:- Ekli olduğu yer:
delete-simulationCloud 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.
- Ekli olduğu yer:
Tetikleyici kimlikleri:
scheduler-trigger:- Kullanıldığı yerler: Eventarc (etkinlikler) ve Cloud Scheduler tetikleyicileri.
- İzinler: Düzenleyici işlevlerini tetiklemek için
roles/eventarc.eventReceiververoles/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.