تتطلّب منصة Cloud Telemetry Simulation نشر البنية الأساسية في مشروعك على Google Cloud.
الوصول إلى رمز المصدر
تتم استضافة الرمز المصدر لمنصّة محاكاة بيانات القياس عن بُعد على السحابة الإلكترونية على GitHub، في aaos-sdv-telemetry-simulator.
المتطلبات الأساسية
لتنفيذ المنصة، تأكَّد من استيفاء المتطلبات الأساسية التالية:
- مشروع Google Cloud تم تفعيل الفوترة فيه
- أمان العرض التوضيحي على الويب: في حال نشر العرض التوضيحي على الويب، يجب إعداد معرّف عميل OAuth 2.0 في واجهات برمجة التطبيقات والخدمات > بيانات الاعتماد على Google Cloud لتأمين تطبيق App Engine وحصر الوصول على حسابات Google المصرّح لها.
- عناصر إنشاء "المركبة المحدّدة بالبرامج" (SDV): يجب أن تتوفّر لديك عناصر صور SDV مجمّعة. ولا يتم توفيرها في هذا المستودع.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- الأذونات: يجب أن يكون لدى المستخدم أو حساب الخدمة الذي يشغّل Terraform أذونات كافية لإنشاء الموارد المحدّدة في الإعداد (على سبيل المثال، محرِّر المشروع أو دور مخصّص يتضمّن أذونات لخدمات Compute Engine وCloud Functions و"إدارة الهوية وإمكانية الوصول" وCloud Storage والخدمات الأخرى اللازمة).
- الأدوات:
- Google Cloud CLI (
gcloud CLI) - Terraform (الإصدار المستخدَم في المستودع)
- Docker
- Go (الإصدار المستخدَم لوظائف المنسّق في المستودع)
- Google Cloud CLI (
نشر البنية الأساسية لـ Google Cloud
يتضمّن نشر منصة المحاكاة خطوتَين رئيسيتَين: استخدام Terraform لنشر البنية الأساسية إلى Google Cloud، وإنشاء صورة Docker الخاصة بوكيل المحاكاة ونشرها إلى Artifact Registry. يرشدك هذا القسم إلى كيفية نشر البنية الأساسية.
أدخِل قيمًا للمتغيرات التالية لتعديل مقتطفات الرمز في هذه الصفحة:
ضبط إعدادات الخلفية في 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 = 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
إنشاء صورة وكيل المحاكاة ونشرها
يشغّل وكيل المحاكاة المحاكاة على الجهاز الافتراضي (VM) في Compute Engine. يمكنك إنشاء هذا المستودع باستخدام عناصر SDV وتحميله إلى 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 الخاص بها وتعديل خريطة
image_fingerprintsفي ملفvariables.tfvars، ثم إعادة تشغيل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.
- أداة "مستكشف السجلات": هذه هي أداتك الأساسية لتحديد المشاكل وحلّها. يمكنك فلترة السجلّات حسب المرجع:
- Cloud Functions: تحقَّق من السجلات بحثًا عن الدالتَين
receive-requestأوschedule-simulationلتصحيح أخطاء مشاكل التنسيق. - Compute Engine: تحقَّق من سجلات الآلة الافتراضية بحثًا عن مشاكل في بدء التشغيل أو إيقافه.
- عامل المحاكاة: يرسل العامل الذي يتم تشغيله داخل حاوية Docker سجلاته إلى "مستكشف السجلات". يمكنك الفلترة حسب اسم مثيل الجهاز الافتراضي للاطّلاع على تفاصيل حول تقدّم المحاكاة.
- Cloud Functions: تحقَّق من السجلات بحثًا عن الدالتَين
- Cloud Storage: بالنسبة إلى عمليات المحاكاة المكتملة، يتم تحميل الملفَين
logcatوbugreportمن جهاز Cuttlefish إلى دليل الإخراج الخاص بعملية المحاكاة في حزمة 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: لإنشاء سجلات محاكاةPENDINGجديدة في Firestoreroles/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:- يستخدمها: مهمة cron في Cloud Scheduler لإجراء عملية التنظيف.
- الأذونات:
roles/run.invokerلتفعيل منطق التنظيف
وتُعدّ إدارة سياسات إدارة الهوية وإمكانية الوصول لحسابات الخدمة هذه الطريقة الأساسية للتحكّم في إمكانية الوصول والأذونات داخل النظام.