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

این پلتفرم مستلزم آن است که زیرساخت را در پروژه Google Cloud خود مستقر کنید.

دریافت کد منبع

کد منبع پلتفرم شبیه‌سازی تله‌متری ابری در sdv.googlesource.com میزبانی می‌شود که نیازمند احراز هویت مطابق با آنچه در مخازن ابزار اکسس توضیح داده شده است، می‌باشد.

برای دسترسی به کد منبع، مخزن شبیه‌سازی تله‌متری ابری را کلون کنید:

git clone https://sdv.googlesource.com/external/cloud_telemetry_simulation-external

پیش‌نیازها

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

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

زیرساخت ابری گوگل را مستقر کنید

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

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

  1. پیکربندی بک‌اند Terraform: فایلی با نام environments/ ENVIRONMENT /backend.hcl ایجاد کنید تا مشخص کنید Terraform فایل وضعیت خود را در فضای ذخیره‌سازی ابری کجا ذخیره می‌کند.

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

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

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

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

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

مدیریت هزینه

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

  • موتور محاسباتی: هزینه زمانی که ماشین‌های مجازی شبیه‌سازی در حال اجرا هستند، محاسبه می‌شود. استفاده از ماشین‌های مجازی نقطه‌ای می‌تواند این هزینه را به میزان قابل توجهی کاهش دهد.
  • توابع ابری: به ازای هر بار فراخوانی، صورتحساب دریافت می‌شود.
  • فضای ذخیره‌سازی ابری: برای ذخیره فایل‌ها و گزارش‌های ورودی و خروجی هزینه دریافت می‌شود.
  • فایراستور: هزینه خواندن، نوشتن و ذخیره‌سازی داده‌ها را دریافت می‌کند.

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

همه اجزا با مجموعه عملیات گوگل کلود یکپارچه شده‌اند.

  • کاوشگر لاگ‌ها: این ابزار اصلی شما برای عیب‌یابی است. می‌توانید لاگ‌ها را بر اساس منبع فیلتر کنید:
    • توابع ابری: لاگ‌های مربوط به توابع receive-request یا schedule-simulation را بررسی کنید تا مشکلات مربوط به هماهنگی را اشکال‌زدایی کنید.
    • موتور محاسبه: گزارش‌های نمونه ماشین مجازی را برای مشکلات راه‌اندازی یا خاموش شدن بررسی کنید.
    • عامل شبیه‌سازی: عاملی که درون کانتینر داکر اجرا می‌شود، گزارش‌های خود را به Logs Explorer ارسال می‌کند. برای مشاهده جزئیات پیشرفت شبیه‌سازی، موارد را بر اساس نام نمونه ماشین مجازی فیلتر کنید.
  • فضای ذخیره‌سازی ابری: برای شبیه‌سازی‌های تکمیل‌شده، فایل‌های logcat و bugreport از دستگاه Cuttlefish در دایرکتوری خروجی شبیه‌سازی در فضای ذخیره‌سازی ابری آپلود می‌شوند و بینش عمیقی از رفتار محیط اندروید ارائه می‌دهند.

حساب‌های خدماتی

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

  1. هویت اجرا (VM):

    • simulation-agent :
      • پیوست شده به: ماشین‌های مجازی موتور محاسباتی که شبیه‌سازی را اجرا می‌کنند.
      • نقش: به ماشین مجازی اجازه می‌دهد تا نتایج را آپلود کند و تکمیل را اعلام کند.
      • مجوزها:
        • roles/storage.objectUser : ورودی‌ها را می‌خواند و مصنوعات (لاگ‌ها، گزارش‌ها) را در فضای ذخیره‌سازی ابری بارگذاری می‌کند.
        • 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 : وجود فایل‌های ورودی در فضای ذخیره‌سازی ابری را تأیید می‌کند.
    • scheduler-function :

      • پیوست شده به: تابع ابری schedule-simulation .
      • مجوزها:

        -   `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 .
      • مجوزها: - 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 (رویدادها) و محرک‌های زمان‌بندی ابری.
      • مجوزها: roles/eventarc.eventReceiver و roles/run.invoker برای اجرای توابع هماهنگ‌کننده.
    • cleanup-scheduler :

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

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