پلتفرم شبیهسازی تلهمتری ابری (Cloud Telemetry Simulation) شما را ملزم میکند که زیرساخت را در پروژه گوگل کلود خود مستقر کنید.
دسترسی به کد منبع
کد منبع پلتفرم شبیهسازی تلهمتری ابری در گیتهاب، در aaos-sdv-telemetry-simulator، میزبانی میشود.
پیشنیازها
برای استقرار پلتفرم، اطمینان حاصل کنید که پیشنیازهای زیر را برآورده میکنید:
- یک پروژه گوگل کلود با قابلیت پرداخت صورتحساب .
- امنیت نسخه آزمایشی وب: اگر نسخه آزمایشی وب را پیادهسازی میکنید، باید یک شناسه کلاینت OAuth 2.0 را در Google Cloud APIs & Services > Credentials پیکربندی کنید تا برنامه App Engine را ایمن کرده و دسترسی به حسابهای گوگل مجاز را محدود کنید.
- Software Defined Vehicle (SDV) build artifacts: You must have your own compiled SDV image artifacts. These are not provided in this repository.
-
cvd-host_package.tar.gz -
sdv_core_cf-img-<version>.zip
-
- مجوزها: حساب کاربری یا سرویسی که Terraform را اجرا میکند باید مجوزهای کافی برای ایجاد منابع تعریفشده در پیکربندی (مثلاً ویرایشگر پروژه یا یک نقش سفارشی با مجوزهایی برای موتور محاسبات، توابع ابری، مدیریت هویت و دسترسی، ذخیرهسازی ابری و سایر سرویسهای لازم) را داشته باشد.
- ابزارها:
- رابط خط فرمان گوگل کلود (
gcloud CLI) - Terraform (نسخه استفاده شده در مخزن)
- داکر
- Go (نسخه مورد استفاده برای توابع هماهنگکننده در مخزن)
- رابط خط فرمان گوگل کلود (
زیرساخت ابری گوگل را مستقر کنید
استقرار پلتفرم شبیهسازی شامل دو مرحله اصلی است: استفاده از Terraform برای استقرار زیرساخت اصلی در Google Cloud، و ساخت و ارسال تصویر Docker عامل شبیهسازی به Artifact Registry. این بخش شما را در استقرار زیرساخت راهنمایی میکند.
برای بهروزرسانی قطعه کدهای این صفحه، مقادیر متغیرهای زیر را وارد کنید:
Configure the Terraform backend: Create a file to specify where Terraform stores its state file in Cloud Storage. Name the file using this syntax:
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 = 5اعمال پیکربندی 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 ارسال میکنید.
برای ساخت و ارسال تصویر عامل شبیهسازی:
Place artifacts: Copy your
cvd-host_package.tar.gzandsdv_core_cf-img-<version>.zipfiles into thesimulation-agent/sdv-image-resources/directory.ساخت و انتشار: به پوشه
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 آن را دریافت کرده و نقشه
image_fingerprintsرا در فایلvariables.tfvarsبهروزرسانی کنید، سپسterraform applyدوباره اجرا کنید.# Get the digest using gcloud gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"پلتفرم شبیهسازی تلهمتری ابری شما مستقر شده و آماده پذیرش درخواستهای شبیهسازی است.
عملیات و عیبیابی
این راهکار به شما امکان میدهد از ابزارهای داخلی Google Cloud برای مشاهدهپذیری استفاده کنید. این راهکار فقط به ازای هر درخواست و در طول اجرای شبیهسازی، منابع محاسباتی را مصرف میکند.
مدیریت هزینه
این معماری به گونهای طراحی شده است که با استفاده از منابع بدون سرور و زودگذر، مقرون به صرفه باشد. هزینهها عمدتاً توسط موارد زیر تعیین میشوند:
- موتور محاسباتی: هزینه زمانی که ماشینهای مجازی شبیهسازی در حال اجرا هستند، محاسبه میشود. استفاده از ماشینهای مجازی نقطهای میتواند این هزینه را به میزان قابل توجهی کاهش دهد.
- توابع ابری: به ازای هر بار فراخوانی، صورتحساب دریافت میشود.
- فضای ذخیرهسازی ابری: برای ذخیره فایلها و گزارشهای ورودی و خروجی هزینه دریافت میشود.
- Firestore: Billed for reads, writes, and data storage.
مشاهدهپذیری
همه اجزا با مجموعه عملیات گوگل کلود یکپارچه شدهاند.
- کاوشگر لاگها: این ابزار اصلی شما برای عیبیابی است. میتوانید لاگها را بر اساس منبع فیلتر کنید:
- توابع ابری: لاگهای مربوط به توابع
receive-requestیاschedule-simulationرا بررسی کنید تا مشکلات مربوط به هماهنگی را اشکالزدایی کنید. - موتور محاسبه: گزارشهای نمونه ماشین مجازی را برای مشکلات راهاندازی یا خاموش شدن بررسی کنید.
- عامل شبیهسازی: عاملی که درون کانتینر داکر اجرا میشود، گزارشهای خود را به Logs Explorer ارسال میکند. برای مشاهده جزئیات پیشرفت شبیهسازی، موارد را بر اساس نام نمونه ماشین مجازی فیلتر کنید.
- توابع ابری: لاگهای مربوط به توابع
- فضای ذخیرهسازی ابری: برای شبیهسازیهای تکمیلشده، فایلهای
logcatوbugreportاز دستگاه Cuttlefish در دایرکتوری خروجی شبیهسازی در فضای ذخیرهسازی ابری بارگذاری میشوند و بینش عمیقی از رفتار محیط اندروید ارائه میدهند.
حسابهای خدماتی
Terraform چندین حساب کاربری سرویس ایجاد میکند تا محیطی امن و با حداقل دسترسی را فراهم کند. حسابهای کاربری سرویس کلیدی عبارتند از:
هویت اجرا (VM):
-
simulation-agent:- پیوست شده به: ماشینهای مجازی موتور محاسباتی که شبیهسازی را اجرا میکنند.
- نقش: به ماشین مجازی اجازه میدهد تا نتایج را آپلود کند و تکمیل را اعلام کند.
- مجوزها:
-
roles/storage.objectUser: ورودیها را میخواند و مصنوعات (لاگها، گزارشها) را در فضای ذخیرهسازی ابری بارگذاری میکند. -
roles/run.invoker: Authenticates and invokes thefinish-simulationfunction.
-
-
هویتهای ارکستراسیون (عملکردها):
-
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: وضعیت کارهای لغو شده را بهروزرسانی میکند.
- پیوست شده به: تابع ابری
-
هویتهای محرک:
scheduler-trigger:- مورد استفاده توسط: Eventarc (رویدادها) و محرکهای زمانبندی ابری.
- مجوزها:
roles/eventarc.eventReceiverوroles/run.invokerبرای اجرای توابع هماهنگکننده.
cleanup-scheduler:- استفاده شده توسط: زمانبندی ابری (Cloud Scheduler) برای پاکسازی، کرون جاب (cron job) انجام میدهد.
- مجوزها:
roles/run.invokerبرای راهاندازی منطق پاکسازی.
مدیریت سیاستهای مدیریت هویت و دسترسی برای این حسابهای خدماتی، روش اصلی برای کنترل دسترسی و مجوزها در سیستم است.