แพลตฟอร์มการจำลองการวัดและส่งข้อมูลทางไกลของระบบคลาวด์กำหนดให้คุณต้องติดตั้งใช้งานโครงสร้างพื้นฐานในโปรเจ็กต์ Google Cloud
เข้าถึงซอร์สโค้ด
ซอร์สโค้ดสำหรับแพลตฟอร์มการจำลองการวัดและส่งข้อมูลทางไกลของระบบคลาวด์โฮสต์อยู่ใน GitHub, ที่ aaos-sdv-telemetry-simulator
สิ่งที่ต้องมีก่อน
หากต้องการติดตั้งใช้งานแพลตฟอร์ม โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามสิ่งที่ต้องมีก่อนต่อไปนี้
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- ความปลอดภัยของเว็บเดโม: หากคุณติดตั้งใช้งานเว็บเดโม คุณต้องกำหนดค่ารหัสไคลเอ็นต์ OAuth 2.0 ใน Google Cloud APIs & Services > ข้อมูลเข้าสู่ระบบ เพื่อรักษาความปลอดภัยของแอปพลิเคชัน App Engine และจำกัดการเข้าถึงบัญชี Google ที่ได้รับอนุญาต
- อาร์ติแฟกต์บิลด์ของยานยนต์ที่กำหนดโดยซอฟต์แวร์ (SDV): คุณต้องมีอาร์ติแฟกต์อิมเมจ SDV ที่คอมไพล์แล้ว ซึ่งเราไม่ได้ให้ไว้ในที่เก็บนี้
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- สิทธิ์: ผู้ใช้หรือบัญชีบริการที่เรียกใช้ Terraform ต้องมี สิทธิ์เพียงพอในการสร้างทรัพยากรที่กำหนดไว้ในการกำหนดค่า (เช่น ผู้แก้ไขโปรเจ็กต์ หรือบทบาทที่กำหนดเองที่มีสิทธิ์สำหรับ Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage และบริการอื่นๆ ที่จำเป็น)
- เครื่องมือ
- Google Cloud CLI (
gcloud CLI) - Terraform (เวอร์ชันที่ใช้ในที่เก็บ)
- Docker
- Go (เวอร์ชันที่ใช้สำหรับฟังก์ชัน Orchestrator ในที่เก็บ)
- Google Cloud CLI (
ติดตั้งใช้งานโครงสร้างพื้นฐานของ Google Cloud
การติดตั้งใช้งานแพลตฟอร์มการจำลองมี 2 ขั้นตอนหลัก ได้แก่ การใช้ Terraform เพื่อติดตั้งใช้งานโครงสร้างพื้นฐานหลักใน Google Cloud และการสร้างและพุชอิมเมจ Docker ของ Agent การจำลองไปยัง 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
สร้างและพุชอิมเมจ Agent การจำลอง
Agent การจำลองจะเรียกใช้การจำลองในเครื่องเสมือน (VM) ของ Compute Engine คุณสร้าง Agent ด้วยอาร์ติแฟกต์ SDV และพุชไปยัง Artifact Registry
วิธีสร้างและพุชอิมเมจ Agent การจำลอง
วางอาร์ติแฟกต์: คัดลอกไฟล์
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)"แพลตฟอร์มการจำลองการวัดและส่งข้อมูลทางไกลของระบบคลาวด์ได้รับการติดตั้งใช้งานแล้วและพร้อมรับคำขอการจำลอง
การดำเนินการและการแก้ปัญหา
โซลูชันนี้ช่วยให้คุณใช้เครื่องมือในตัวของ Google Cloud เพื่อความสามารถในการสังเกต โดยจะใช้ทรัพยากรการคำนวณต่อคำขอเท่านั้นและระหว่างการดำเนินการจำลอง
การจัดการค่าใช้จ่าย
สถาปัตยกรรมได้รับการออกแบบมาให้คุ้มค่าโดยใช้ทรัพยากรแบบ Serverless และชั่วคราว ค่าใช้จ่ายส่วนใหญ่มาจากปัจจัยต่อไปนี้
- Compute Engine: ระบบจะเรียกเก็บเงินตามเวลาที่ VM การจำลองทำงาน การใช้ Spot VM สามารถลดค่าใช้จ่ายนี้ได้อย่างมาก
- Cloud Functions: ระบบจะเรียกเก็บเงินต่อการเรียกใช้
- Cloud Storage: ระบบจะเรียกเก็บเงินสำหรับการจัดเก็บไฟล์อินพุตและเอาต์พุต รวมถึงบันทึก
- Firestore: ระบบจะเรียกเก็บเงินสำหรับการอ่าน การเขียน และการจัดเก็บข้อมูล
ความสามารถในการสังเกต
คอมโพเนนต์ทั้งหมดผสานรวมกับชุดเครื่องมือการดำเนินการของ Google Cloud
- Logs Explorer: เครื่องมือหลักสำหรับการแก้ปัญหา คุณสามารถกรองบันทึกตามทรัพยากรได้ ดังนี้
- Cloud Functions: ตรวจสอบบันทึกของฟังก์ชัน
receive-requestหรือschedule-simulationเพื่อแก้ไขข้อบกพร่องของปัญหาการจัดการเป็นกลุ่ม - Compute Engine: ตรวจสอบบันทึกอินสแตนซ์ VM เพื่อดูปัญหาการเริ่มต้นหรือการปิด
- Agent การจำลอง: Agent ที่ทำงานภายในคอนเทนเนอร์ Docker จะส่งต่อบันทึกไปยัง Logs Explorer กรองตามชื่ออินสแตนซ์ VM เพื่อดูความคืบหน้าการจำลองโดยละเอียด
- Cloud Functions: ตรวจสอบบันทึกของฟังก์ชัน
- Cloud Storage: สำหรับการจำลองที่เสร็จสมบูรณ์แล้ว ระบบจะอัปโหลดไฟล์
logcatและbugreportจากอุปกรณ์ Cuttlefish ไปยังไดเรกทอรีเอาต์พุตของการจำลองใน Bucket ของ Cloud Storage ซึ่งจะช่วยให้คุณเข้าใจพฤติกรรมของสภาพแวดล้อม Android ได้อย่างลึกซึ้ง
บัญชีบริการ
Terraform สร้างบัญชีบริการหลายบัญชีเพื่อเปิดใช้สภาพแวดล้อมที่ปลอดภัยและมีสิทธิ์น้อยที่สุด บัญชีบริการหลักมีดังนี้
ข้อมูลประจำตัวในการดำเนินการ (VM):
simulation-agent:- แนบกับ: VM ของ Compute Engine ที่เรียกใช้การจำลอง
- บทบาท: อนุญาตให้ VM อัปโหลดผลลัพธ์และส่งสัญญาณการดำเนินการเสร็จสมบูรณ์
- สิทธิ์:
roles/storage.objectUser: อ่านอินพุตและอัปโหลดอาร์ติแฟกต์ (บันทึก รายงาน) ไปยัง Cloud Storageroles/run.invoker: ตรวจสอบสิทธิ์และเรียกใช้ฟังก์ชันfinish-simulation
ข้อมูลประจำตัวในการจัดระเบียบ (ฟังก์ชัน):
read-simulations-function:- แนบกับ: Cloud Function
read-simulation - สิทธิ์:
roles/datastore.user: อ่านบันทึกการจำลองและ VM ที่ทำงานอยู่ใน Firestore
- แนบกับ: Cloud Function
receive-request-function:- แนบกับ: Cloud Function
receive-request - สิทธิ์:
roles/datastore.user: สร้างบันทึกการจำลองPENDINGใหม่ใน Firestoreroles/storage.objectUser: ตรวจสอบว่ามีไฟล์อินพุตอยู่ใน Cloud Storage
- แนบกับ: Cloud Function
scheduler-function:- แนบกับ: Cloud 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.
- แนบกับ: Cloud Function
simulation-finisher-function:- แนบกับ: Cloud Function
finish-simulation - สิทธิ์:
-
roles/compute.instanceAdmin.v1: ลบ VM หลังจากดำเนินการ เสร็จสมบูรณ์ -roles/datastore.user: อัปเดตสถานะการจำลองเป็นCOMPLETEDหรือFAILED
- แนบกับ: Cloud Function
delete-simulation-function:- แนบกับ: Cloud Function
delete-simulation - สิทธิ์:
-
roles/compute.instanceAdmin.v1: บังคับลบเครื่องเสมือน ระหว่างการยกเลิก -roles/datastore.user: อัปเดตสถานะของงานที่ยกเลิก
- แนบกับ: Cloud Function
ข้อมูลประจำตัวของทริกเกอร์:
scheduler-trigger:- ใช้โดย: ทริกเกอร์ Eventarc (เหตุการณ์) และ Cloud Scheduler
- สิทธิ์:
roles/eventarc.eventReceiverและroles/run.invokerเพื่อทริกเกอร์ฟังก์ชัน Orchestrator
cleanup-scheduler:- ใช้โดย: งาน Cron ของ Cloud Scheduler สำหรับการล้างข้อมูล
- สิทธิ์:
roles/run.invokerเพื่อทริกเกอร์ตรรกะการล้างข้อมูล
การจัดการนโยบาย Identity and Access Management สำหรับบัญชีบริการเหล่านี้เป็นวิธีหลักในการควบคุมการเข้าถึงและสิทธิ์ภายในระบบ