Cloud Telemetry Simulation प्लैटफ़ॉर्म के लिए, आपको Google Cloud प्रोजेक्ट पर इन्फ़्रास्ट्रक्चर डिप्लॉय करना होगा.
सोर्स कोड ऐक्सेस करना
Cloud Telemetry Simulation प्लैटफ़ॉर्म का सोर्स कोड, GitHub पर होस्ट किया जाता है, aaos-sdv-telemetry-simulator में.
ज़रूरी शर्तें
प्लैटफ़ॉर्म डिप्लॉय करने के लिए, पक्का करें कि आपने ये ज़रूरी शर्तें पूरी की हों:
- बिलिंग की सुविधा वाला Google Cloud प्रोजेक्ट.
- वेब डेमो की सुरक्षा: अगर वेब डेमो डिप्लॉय किया जाता है, तो आपको Google Cloud में एपीआई और सेवाएं > क्रेडेंशियल में OAuth 2.0 क्लाइंट आईडी कॉन्फ़िगर करना होगा. इससे App Engine ऐप्लिकेशन को सुरक्षित किया जा सकेगा और सिर्फ़ अनुमति वाले Google खातों को ऐक्सेस दिया जा सकेगा.
- सॉफ़्टवेयर से तय होने वाले वाहन (एसडीवी) के बिल्ड आर्टफ़ैक्ट: आपके पास, कंपाइल किए गए एसडीवी इमेज आर्टफ़ैक्ट होने चाहिए. ये इस रिपॉज़िटरी में उपलब्ध नहीं हैं.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- अनुमतियां: Terraform चलाने वाले उपयोगकर्ता या सेवा खाते के पास, कॉन्फ़िगरेशन में तय किए गए संसाधन बनाने की ज़रूरी अनुमतियां होनी चाहिए. जैसे, प्रोजेक्ट एडिटर या Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage, और अन्य ज़रूरी सेवाओं के लिए अनुमतियों वाली कोई कस्टम भूमिका.
- टूल:
- Google Cloud CLI (
gcloud CLI) - Terraform (रिपॉज़िटरी में इस्तेमाल किया गया वर्शन)
- Docker
- Go (रिपॉज़िटरी में ऑर्केस्ट्रेटर फ़ंक्शन के लिए इस्तेमाल किया गया वर्शन)
- Google Cloud CLI (
Google Cloud का इन्फ़्रास्ट्रक्चर डिप्लॉय करना
सिमुलेशन प्लैटफ़ॉर्म डिप्लॉय करने के लिए, दो मुख्य चरण पूरे करने होते हैं: Google Cloud पर मुख्य इन्फ़्रास्ट्रक्चर डिप्लॉय करने के लिए Terraform का इस्तेमाल करना. इसके अलावा, Artifact Registry पर सिमुलेशन एजेंट की Docker इमेज बनाना और उसे पुश करना. इस सेक्शन में, इन्फ़्रास्ट्रक्चर डिप्लॉय करने का तरीका बताया गया है.
इस पेज पर मौजूद कोड स्निपेट अपडेट करने के लिए, इन वैरिएबल की वैल्यू डालें:
Terraform बैकएंड कॉन्फ़िगर करना: एक फ़ाइल बनाएं, ताकि यह तय किया जा सके कि Terraform, Cloud Storage में अपनी स्टेट फ़ाइल कहां सेव करे. फ़ाइल का नाम इस सिंटैक्स का इस्तेमाल करके रखें:
environments/ENVIRONMENT/backend.hcl# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"प्रोजेक्ट के वैरिएबल कॉन्फ़िगर करना: अपने प्रोजेक्ट की जानकारी के साथ एक फ़ाइल बनाएं. फ़ाइल का नाम इस सिंटैक्स का इस्तेमाल करके रखें:
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 कॉन्फ़िगरेशन लागू करना:
infrastructureडायरेक्ट्री पर जाएं. इसके बाद, कॉन्फ़िगरेशन को शुरू करें और लागू करें:# 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
सिमुलेशन एजेंट की इमेज बनाना और उसे पुश करना
सिमुलेशन एजेंट, Compute Engine की वर्चुअल मशीन (वीएम) पर सिमुलेशन चलाता है. इसे एसडीवी आर्टफ़ैक्ट की मदद से बनाया जाता है और Artifact Registry पर पुश किया जाता है.
सिमुलेशन एजेंट की इमेज बनाने और उसे पुश करने के लिए:
आर्टफ़ैक्ट रखना: अपनी
cvd-host_package.tar.gzऔरsdv_core_cf-img-<version>.zipफ़ाइलों कोsimulation-agent/sdv-image-resources/डायरेक्ट्री में कॉपी करें.बनाना और पुश करना:
simulation-agentडायरेक्ट्री पर जाएं. इसके बाद, इमेज बनाएं और उसे पुश करें. इमेज के पाथ को, अपनी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फ़िंगरप्रिंट अपडेट करना: नई इमेज पुश करने के बाद, हो सकता है कि आपको उसका SHA256 डाइजेस्ट पाना पड़े. इसके बाद, अपनी
variables.tfvarsफ़ाइल मेंimage_fingerprintsमैप को अपडेट करना पड़ सकता है. इसके बाद,terraform applyको फिर से चलाएं.# Get the digest using gcloud gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"आपका Cloud Telemetry Simulation प्लैटफ़ॉर्म डिप्लॉय हो गया है और अब यह सिमुलेशन के अनुरोध स्वीकार करने के लिए तैयार है.
ऑपरेशन और समस्या हल करना
इस समाधान की मदद से, जांचने की क्षमता के लिए Google Cloud के बिल्ट-इन टूल इस्तेमाल किए जा सकते हैं. यह सिर्फ़ अनुरोध के हिसाब से और सिमुलेशन के दौरान, कंप्यूटेशन के संसाधनों का इस्तेमाल करता है.
लागत मैनेज करना
आर्किटेक्चर को इस तरह डिज़ाइन किया गया है कि सर्वरलेस और इफ़ेमरल संसाधनों का इस्तेमाल करके, लागत को कम किया जा सके. लागत मुख्य तौर पर इन वजहों से तय होती है:
- Compute Engine: सिमुलेशन वीएम के चलने के समय के हिसाब से बिल भेजा जाता है. स्पॉट वीएम का इस्तेमाल करने से, इस लागत को काफ़ी हद तक कम किया जा सकता है.
- Cloud Functions: हर बार शुरू होने पर बिल भेजा जाता है.
- Cloud Storage: इनपुट और आउटपुट फ़ाइलों के साथ-साथ लॉग सेव करने के लिए बिल भेजा जाता है.
- Firestore: पढ़ने, लिखने, और डेटा सेव करने के लिए बिल भेजा जाता है.
जांचने की क्षमता
सभी कॉम्पोनेंट, Google Cloud के कार्रवाइयों वाले सुइट के साथ इंटिग्रेट किए जाते हैं.
- Logs Explorer: यह समस्या हल करने के लिए आपका मुख्य टूल है. लॉग को संसाधन के हिसाब से फ़िल्टर किया जा सकता है:
- Cloud Functions: ऑर्केस्ट्रेशन से जुड़ी समस्याओं को डीबग करने के लिए,
receive-requestयाschedule-simulationफ़ंक्शन के लॉग देखें. - Compute Engine: स्टार्टअप या शटडाउन की समस्याओं के लिए, वीएम इंस्टेंस के लॉग देखें.
- सिमुलेशन एजेंट: Docker कंटेनर में चलने वाला एजेंट, अपने लॉग को Logs Explorer पर फ़ॉरवर्ड करता है. सिमुलेशन की पूरी प्रोसेस देखने के लिए, वीएम इंस्टेंस के नाम के हिसाब से फ़िल्टर करें.
- Cloud Functions: ऑर्केस्ट्रेशन से जुड़ी समस्याओं को डीबग करने के लिए,
- Cloud Storage: पूरे हो चुके सिमुलेशन के लिए, Cuttlefish डिवाइस की
logcatऔरbugreportफ़ाइलें, Cloud Storage बकेट में सिमुलेशन की आउटपुट डायरेक्ट्री पर अपलोड की जाती हैं. इससे Android एनवायरमेंट के व्यवहार के बारे में पूरी जानकारी मिलती है.
सेवा खाते
Terraform, सुरक्षित और कम से कम विशेषाधिकार वाले एनवायरमेंट को चालू करने के लिए, कई सेवा खाते बनाता है. मुख्य सेवा खातों में ये शामिल हैं:
एक्ज़ीक्यूशन आइडेंटिटी (वीएम):
simulation-agent:- इससे अटैच: सिमुलेशन चलाने वाले Compute Engine वीएम.
- भूमिका: वीएम को नतीजे अपलोड करने और पूरा होने का सिग्नल देने की अनुमति मिलती है.
- अनुमतियां:
roles/storage.objectUser: Cloud Storage पर इनपुट पढ़ता है और आर्टफ़ैक्ट (लॉग, रिपोर्ट) अपलोड करता है.roles/run.invoker:finish-simulationफ़ंक्शन को पुष्टि करता है और शुरू करता है.
ऑर्केस्ट्रेशन आइडेंटिटी (फ़ंक्शन):
read-simulations-function:- इससे अटैच:
read-simulationCloud Function. - अनुमतियां:
roles/datastore.user: Firestore में सिमुलेशन और रनिंग-वीएम रिकॉर्ड पढ़ता है.
- इससे अटैच:
receive-request-function:- इससे अटैच:
receive-requestCloud Function. - अनुमतियां:
roles/datastore.user: Firestore में नएPENDINGसिमुलेशन रिकॉर्ड बनाता है.roles/storage.objectUser: Cloud Storage में इनपुट फ़ाइलों के मौजूद होने की पुष्टि करता है.
- इससे अटैच:
scheduler-function:- इससे अटैच:
schedule-simulationCloud Function. अनुमतियां:
- `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:- इससे अटैच:
finish-simulationCloud Function. - अनुमतियां:
-
roles/compute.instanceAdmin.v1: एक्ज़ीक्यूशन पूरा होने के बाद, वीएम मिटाता है. -roles/datastore.user: सिमुलेशन के स्टेटस कोCOMPLETEDयाFAILEDपर अपडेट करता है.
- इससे अटैच:
delete-simulation-function:- इससे अटैच:
delete-simulationCloud Function. - अनुमतियां:
-
roles/compute.instanceAdmin.v1: रद्द करने के दौरान, वर्चुअल मशीनें फ़ोर्स-डिलीट करता है. -roles/datastore.user: रद्द की गई जॉब के स्टेटस को अपडेट करता है.
- इससे अटैच:
ट्रिगर आइडेंटिटी:
scheduler-trigger:- इसका इस्तेमाल करने वाले: Eventarc (इवेंट) और Cloud Scheduler ट्रिगर.
- अनुमतियां: ऑर्केस्ट्रेटर फ़ंक्शन को ट्रिगर करने के लिए,
roles/eventarc.eventReceiverऔरroles/run.invoker.
cleanup-scheduler:- इसका इस्तेमाल करने वाले: साफ़-सफ़ाई के लिए, Cloud Scheduler की क्रॉन जॉब.
- अनुमतियां: साफ़-सफ़ाई की लॉजिक को ट्रिगर करने के लिए,
roles/run.invoker.
इन सेवा खातों के लिए, Identity and Access Management की नीतियां मैनेज करना, सिस्टम में ऐक्सेस और अनुमतियों को कंट्रोल करने का मुख्य तरीका है.