डिप्लॉयमेंट गाइड

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.gz
    • sdv_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 का इन्फ़्रास्ट्रक्चर डिप्लॉय करना

सिमुलेशन प्लैटफ़ॉर्म डिप्लॉय करने के लिए, दो मुख्य चरण पूरे करने होते हैं: Google Cloud पर मुख्य इन्फ़्रास्ट्रक्चर डिप्लॉय करने के लिए Terraform का इस्तेमाल करना. इसके अलावा, Artifact Registry पर सिमुलेशन एजेंट की Docker इमेज बनाना और उसे पुश करना. इस सेक्शन में, इन्फ़्रास्ट्रक्चर डिप्लॉय करने का तरीका बताया गया है.

इस पेज पर मौजूद कोड स्निपेट अपडेट करने के लिए, इन वैरिएबल की वैल्यू डालें:

  1. Terraform बैकएंड कॉन्फ़िगर करना: एक फ़ाइल बनाएं, ताकि यह तय किया जा सके कि Terraform, Cloud Storage में अपनी स्टेट फ़ाइल कहां सेव करे. फ़ाइल का नाम इस सिंटैक्स का इस्तेमाल करके रखें:

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. प्रोजेक्ट के वैरिएबल कॉन्फ़िगर करना: अपने प्रोजेक्ट की जानकारी के साथ एक फ़ाइल बनाएं. फ़ाइल का नाम इस सिंटैक्स का इस्तेमाल करके रखें:

    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 कॉन्फ़िगरेशन लागू करना: 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 पर पुश किया जाता है.

सिमुलेशन एजेंट की इमेज बनाने और उसे पुश करने के लिए:

  1. आर्टफ़ैक्ट रखना: अपनी cvd-host_package.tar.gz और sdv_core_cf-img-<version>.zip फ़ाइलों को simulation-agent/sdv-image-resources/ डायरेक्ट्री में कॉपी करें.

  2. बनाना और पुश करना: 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
    
  3. फ़िंगरप्रिंट अपडेट करना: नई इमेज पुश करने के बाद, हो सकता है कि आपको उसका 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 Storage: पूरे हो चुके सिमुलेशन के लिए, Cuttlefish डिवाइस की logcat और bugreport फ़ाइलें, Cloud Storage बकेट में सिमुलेशन की आउटपुट डायरेक्ट्री पर अपलोड की जाती हैं. इससे Android एनवायरमेंट के व्यवहार के बारे में पूरी जानकारी मिलती है.

सेवा खाते

Terraform, सुरक्षित और कम से कम विशेषाधिकार वाले एनवायरमेंट को चालू करने के लिए, कई सेवा खाते बनाता है. मुख्य सेवा खातों में ये शामिल हैं:

  1. एक्ज़ीक्यूशन आइडेंटिटी (वीएम):

    • simulation-agent:
      • इससे अटैच: सिमुलेशन चलाने वाले Compute Engine वीएम.
      • भूमिका: वीएम को नतीजे अपलोड करने और पूरा होने का सिग्नल देने की अनुमति मिलती है.
      • अनुमतियां:
        • roles/storage.objectUser: Cloud Storage पर इनपुट पढ़ता है और आर्टफ़ैक्ट (लॉग, रिपोर्ट) अपलोड करता है.
        • roles/run.invoker: finish-simulation फ़ंक्शन को पुष्टि करता है और शुरू करता है.
  2. ऑर्केस्ट्रेशन आइडेंटिटी (फ़ंक्शन):

    • read-simulations-function:
      • इससे अटैच: read-simulation Cloud Function.
      • अनुमतियां:
        • roles/datastore.user: Firestore में सिमुलेशन और रनिंग-वीएम रिकॉर्ड पढ़ता है.
    • receive-request-function:

      • इससे अटैच: receive-request Cloud Function.
      • अनुमतियां:
        • roles/datastore.user: Firestore में नए PENDING सिमुलेशन रिकॉर्ड बनाता है.
        • roles/storage.objectUser: Cloud Storage में इनपुट फ़ाइलों के मौजूद होने की पुष्टि करता है.
    • scheduler-function:

      • इससे अटैच: schedule-simulation Cloud 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-simulation Cloud Function.
      • अनुमतियां: - roles/compute.instanceAdmin.v1: एक्ज़ीक्यूशन पूरा होने के बाद, वीएम मिटाता है. - roles/datastore.user: सिमुलेशन के स्टेटस को COMPLETED या FAILED पर अपडेट करता है.
    • delete-simulation-function:

      • इससे अटैच: delete-simulation Cloud Function.
      • अनुमतियां: - roles/compute.instanceAdmin.v1: रद्द करने के दौरान, वर्चुअल मशीनें फ़ोर्स-डिलीट करता है. - roles/datastore.user: रद्द की गई जॉब के स्टेटस को अपडेट करता है.
  3. ट्रिगर आइडेंटिटी:

    • scheduler-trigger:

      • इसका इस्तेमाल करने वाले: Eventarc (इवेंट) और Cloud Scheduler ट्रिगर.
      • अनुमतियां: ऑर्केस्ट्रेटर फ़ंक्शन को ट्रिगर करने के लिए, roles/eventarc.eventReceiver और roles/run.invoker.
    • cleanup-scheduler:

      • इसका इस्तेमाल करने वाले: साफ़-सफ़ाई के लिए, Cloud Scheduler की क्रॉन जॉब.
      • अनुमतियां: साफ़-सफ़ाई की लॉजिक को ट्रिगर करने के लिए, roles/run.invoker.

इन सेवा खातों के लिए, Identity and Access Management की नीतियां मैनेज करना, सिस्टम में ऐक्सेस और अनुमतियों को कंट्रोल करने का मुख्य तरीका है.