راهنمای استقرار

پلاتفرم «شبیه‌سازی دورسنجی ابری» از شما می‌خواهد زیرساخت را در پروژه Google Cloud خودتان مستقر کنید.

دسترسی به کد منبع

کد منبع پلاتفرم «شبیه‌سازی دورسنجی ابری» در GitHub، در aaos-sdv-telemetry-simulator میزبانی می‌شود.

پیش‌نیازها

برای استقرار پلاتفرم، مطمئن شوید که پیش‌نیازهای زیر را دارید:

  • پروژه Google Cloud با صورت‌حساب فعال.
  • امنیت نسخه نمایشی وب: اگر «نسخه نمایشی وب» را مستقر می‌کنید، باید شناسه مشتری OAuth 2.0 را در Google Cloud APIs & Services > Credentials پیکربندی کنید تا برنامه App Engine را ایمن کنید و دسترسی را به «حساب‌های Google» مجاز محدود کنید.
  • آرتیفکت‌های ساخت «خودرو نرم‌افزارمحور» (SDV): باید آرتیفکت‌های تصویر SDV کامپایل‌شده خودتان را داشته باشید. این موارد در این مخزن ارائه نشده است.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • اجازه‌ها: حساب سرویس یا کاربر اجراکننده Terraform باید اجازه‌های کافی برای ایجاد منابع تعریف‌شده در پیکربندی را داشته باشد (برای مثال، ویرایشگر پروژه، یا نقش سفارشی با اجازه‌هایی برای Compute Engine،‏ Cloud Functions، «مدیریت هویت و دسترسی‌ها»، Cloud Storage، و دیگر سرویس‌های ضروری).
  • ابزارها:
    • Google Cloud CLI (gcloud CLI)
    • Terraform (نسخه استفاده‌شده در مخزن)
    • Docker
    • Go (نسخه استفاده‌شده برای توابع هماهنگ‌کننده در مخزن)

مستقر کردن زیرساخت Google Cloud

استقرار پلتفرم شبیه‌سازی شامل دو مرحله اصلی است: استفاده از Terraform برای استقرار زیرساخت اصلی در Google Cloud، و ساختن و انتقال تصویر Docker عامل شبیه‌سازی به Artifact Registry. این بخش شما را در پیاده‌سازی زیرساخت راهنمایی می‌کند.

مقادیر متغیرهای زیر را وارد کنید تا تکه‌کدهای این صفحه به‌روزرسانی شود:

  1. پیکربندی Terraform backend: فایلی ایجاد کنید تا مشخص کند 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)
    supported_agent_builds = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_vm_count = 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
    

ساختن و ارسال تصویر عامل شبیه‌سازی

عامل شبیه‌سازی، شبیه‌سازی را در ماشین مجازی (VM) در Compute Engine اجرا می‌کند. آن را با مصنوعات SDV خود می‌سازید و به 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 آن را دریافت کنید و نقشه supported_agent_builds را در فایل variables.tfvars به‌روز کنید، سپس terraform apply را دوباره اجرا کنید.

    # Get the digest using gcloud
    gcloud artifacts docker images describe $AGENT_IMAGE --format="value(image_summary.digest)"
    

    پلاتفرم «شبیه‌سازی دورسنجی ابری» شما مستقر شده و آماده پذیرش درخواست‌های شبیه‌سازی است.

عملیات و عیب‌یابی

این راهکار به شما امکان می‌دهد از ابزارهای داخلی Google Cloud برای مشاهده‌پذیری استفاده کنید. این فقط به‌ازای هر درخواست و درطول اجرای شبیه‌سازی، منابع محاسباتی مصرف می‌کند.

مدیریت هزینه

این معماری بااستفاده از منابع بدون سرور و موقت به‌گونه‌ای طراحی شده است که مقرون‌به‌صرفه باشد. هزینه‌ها عمدتاً تحت‌تأثیر موارد زیر است:

  • Compute Engine: برای مدت زمانی که ماشین‌های مجازی شبیه‌سازی درحال اجرا هستند صورت‌حساب صادر می‌شود. استفاده از Spot VMs می‌تواند این هزینه را به‌طور قابل‌توجهی کاهش دهد.
  • توابع ابری: صورت‌حساب براساس فراخوانی صادر می‌شود.
  • Cloud Storage: برای ذخیره کردن فایل‌های ورودی و خروجی و گزارش‌ها صورت‌حساب صادر می‌شود.
  • Firestore: برای خواندن، نوشتن، و ذخیره‌سازی داده صورت‌حساب صادر می‌شود.

مشاهده‌پذیری

همه مؤلفه‌ها با مجموعه عملیات Google Cloud ادغام شده‌اند.

  • کاوشگر گزارش‌ها: این ابزار اصلی شما برای عیب‌یابی است. می‌توانید گزارش‌ها را براساس منبع فیلتر کنید:
    • توابع ابری: گزارش‌های مربوط به توابع receive-request یا schedule-simulation را برای اشکال‌زدایی مشکلات هماهنگ‌سازی بررسی کنید.
    • Compute Engine: گزارش‌های نمونه VM را برای مشکلات راه‌اندازی یا خاموش شدن بررسی کنید.
    • عامل شبیه‌سازی: عاملی که در محفظه Docker اجرا می‌شود گزارش‌هایش را به «کاوشگر گزارش‌ها» بازارسال می‌کند. براساس نام نمونه VM فیلتر کنید تا پیشرفت شبیه‌سازی را با جزئیات ببینید.
  • فضای ذخیره‌سازی ابری: برای شبیه‌سازی‌های تکمیل‌شده، فایل‌های logcat و bugreport از دستگاه Cuttlefish به دایرکتوری خروجی شبیه‌سازی در باکت «فضای ذخیره‌سازی ابری» بارگذاری می‌شوند و اطلاعات عمیقی درباره رفتار محیط Android ارائه می‌دهند.

حساب‌های سرویس

Terraform چندین حساب خدمات ایجاد می‌کند تا محیطی امن با کمترین امتیاز را فعال کند. حساب‌های سرویس اصلی عبارت‌اند از:

  1. هویت اجرا (ماشین مجازی):

    • ‫simulation-agent:
      • متصل به: ماشین‌های مجازی Compute Engine که شبیه‌سازی را اجرا می‌کنند.
      • نقش: به ماشین مجازی اجازه می‌دهد نتایج را بارگذاری کند و تکمیل را اعلام کند.
      • اجازه‌ها:
        • roles/storage.objectUser: ورودی‌ها را می‌خواند و مصنوعات (گزارش‌ها، گزارش‌های خرابی) را در Cloud Storage بارگذاری می‌کند.
        • roles/run.invoker: تابع finish-simulation را اصالت‌سنجی و فراخوانی می‌کند.
  2. هویت‌های هماهنگ‌سازی (توابع):

    • ‫read-simulations-function:
      • پیوست‌شده به: «تابع ابری» read-simulation.
      • اجازه‌ها:
        • roles/datastore.user: سوابق شبیه‌سازی و ماشین مجازی درحال اجرا را در Firestore می‌خواند.
    • receive-request-function:

      • پیوست‌شده به: «تابع ابری» receive-request.
      • اجازه‌ها:
        • ‫roles/datastore.user: سوابق شبیه‌سازی PENDING جدیدی در Firestore ایجاد می‌کند.
        • ‫roles/storage.objectUser: وجود فایل‌های ورودی را در Cloud Storage تأیید می‌کند.
    • scheduler-function:

      • پیوست‌شده به: «تابع ابری» schedule-simulation.
      • اجازه‌ها:
        • roles/pubsub.subscriber: پیام‌ها را از صف شبیه‌سازی بیرون می‌کشد.
        • roles/datastore.user: خواندن و نوشتن اتمی را در running-vms شمارنده انجام می‌دهد.
        • roles/compute.instanceAdmin.v1: ماشین‌های مجازی Compute Engine را ایجاد و راه‌اندازی می‌کند.
        • roles/iam.serviceAccountUser: به این تابع اجازه می‌دهد حساب سرویس simulation-agent را به ماشین‌های مجازی‌ای که ایجاد می‌کند اختصاص دهد.
    • simulation-finisher-function:

      • پیوست‌شده به: «تابع ابری» finish-simulation.
      • اجازه‌ها:
        • ‫roles/compute.instanceAdmin.v1: ماشین مجازی را پس‌از تکمیل اجرا حذف می‌کند.
        • roles/datastore.user: وضعیت شبیه‌سازی را به COMPLETED یا FAILED به‌روز می‌کند.
    • delete-simulation-function:

      • پیوست‌شده به: «تابع ابری» delete-simulation.
      • اجازه‌ها:
        • roles/compute.instanceAdmin.v1: ماشین‌های مجازی را درطول لغو کردن به‌اجبار حذف می‌کند.
        • ‫roles/datastore.user: وضعیت کارهای لغوشده را به‌روز می‌کند.
  3. هویت‌های راه‌انداز:

    • scheduler-trigger:

      • مورداستفاده: راه‌اندازهای Eventarc (رویدادها) و Cloud Scheduler.
      • اجازه‌ها: roles/eventarc.eventReceiver و roles/run.invoker برای راه‌اندازی توابع هماهنگ‌ساز.
    • cleanup-scheduler:

      • استفاده‌شده توسط: کار cron در Cloud Scheduler برای پاک‌سازی.
      • اجازه‌ها: roles/run.invoker برای راه‌اندازی منطق پاک‌سازی.

مدیریت خط‌مشی‌های «مدیریت هویت و دسترسی‌ها» برای این حساب‌های سرویس روش اصلی برای کنترل دسترسی و اجازه‌ها در سیستم است.