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.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 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 KSA (
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:
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"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 = 5Terraform 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:
Yapay nesneleri yerleştirme:
cvd-host_package.tar.gzvesdv_core_cf-img-<version>.zipdosyalarınızısimulation-agent/sdv-image-resources/dizinine kopyalayın.Derleme ve gönderme:
simulation-agentdizinine gidin, ardından görüntüyü derleyip gönderin. Resim yolunuvariables.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
image_fingerprintsharitasınıvariables.tfvarsdosyanızda güncellemeniz, ardındanterraform applykomutunu 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-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'ı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 Functions: Düzenleme sorunlarında hata ayıklamak için
- Cloud Storage: Tamamlanan simülasyonlarda, Cuttlefish cihazındaki
logcatvebugreportdosyaları, 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:
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-simulationişlevini doğrular ve çağırır.
Düzenleme kimlikleri (işlevler):
read-simulations-function:- Şuna bağlı:
read-simulationCloud Functions işlevi. - İzinler:
roles/datastore.user: Firestore'da simülasyon ve running-vm kayıtlarını okur.
- Şuna bağlı:
receive-request-function:- Şuna bağlı:
receive-requestCloud Functions işlevi. - İzinler:
roles/datastore.user: Firestore'da yeniPENDINGsimülasyon kayıtları oluşturur.roles/storage.objectUser: Giriş dosyalarının Cloud Storage'da mevcut olup olmadığını doğrular.
- Şuna bağlı:
scheduler-function:- Şuna bağlı:
schedule-simulationCloud 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.
- Şuna bağlı:
simulation-finisher-function:- Şuna bağlı:
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.
- Şuna bağlı:
delete-simulation-function:- Şuna bağlı:
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.
- Şuna bağlı:
Tetikleyici kimlikleri:
scheduler-trigger:- Kullanım alanları: Eventarc (etkinlikler) ve Cloud Scheduler tetikleyicileri.
- İzinler: Düzenleyici işlevlerini tetiklemek için
roles/eventarc.eventReceiververoles/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.