แพลตฟอร์มการจำลองการส่งข้อมูลทางไกลในระบบคลาวด์กำหนดให้คุณต้องติดตั้งใช้งานโครงสร้างพื้นฐานในโปรเจ็กต์ Google Cloud
เข้าถึงซอร์สโค้ด
ซอร์สโค้ดสำหรับแพลตฟอร์มการจำลองการส่งข้อมูลทางไกลในระบบคลาวด์โฮสต์อยู่ใน GitHub ใน aaos-sdv-telemetry-simulator
สิ่งที่ต้องมีก่อน
หากต้องการติดตั้งใช้งานแพลตฟอร์ม โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นต่อไปนี้
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- ความปลอดภัยของการสาธิตบนเว็บ: หากติดตั้งใช้งานการสาธิตบนเว็บ คุณต้องกำหนดค่ารหัสไคลเอ็นต์ OAuth 2.0 ใน API และบริการ > ข้อมูลเข้าสู่ระบบของ Google Cloud เพื่อรักษาความปลอดภัยให้กับแอปพลิเคชัน App Engine และจำกัดการเข้าถึงเฉพาะบัญชี Google ที่ได้รับอนุญาต
- อาร์ติแฟกต์บิลด์ของ Software Defined Vehicle (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) supported_agent_builds = { "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855", "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589" } # Parallel Execution Limit (Default: 5) max_vm_count = 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 และอัปเดตแผนที่
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 เพื่อความสามารถในการสังเกตได้ โดยจะใช้ทรัพยากรการประมวลผลต่อคำขอและระหว่างการดำเนินการจำลองเท่านั้น
การจัดการต้นทุน
สถาปัตยกรรมนี้ออกแบบมาให้คุ้มค่าโดยใช้ทรัพยากรแบบ Serverless และทรัพยากรชั่วคราว ค่าใช้จ่ายส่วนใหญ่มาจาก
- Compute Engine: เรียกเก็บเงินตามเวลาที่ VM การจำลองทำงาน การใช้ Spot VM จะช่วยลดค่าใช้จ่ายนี้ได้อย่างมาก
- Cloud Functions: เรียกเก็บเงินตามการเรียกใช้
- Cloud Storage: มีการเรียกเก็บเงินสำหรับการจัดเก็บไฟล์อินพุตและเอาต์พุต รวมถึงบันทึก
- Firestore: เรียกเก็บเงินสำหรับการอ่าน การเขียน และพื้นที่เก็บข้อมูล
ความสามารถในการสังเกต
คอมโพเนนต์ทั้งหมดผสานรวมกับชุดเครื่องมือการดำเนินการของ Google Cloud
- Logs Explorer: เครื่องมือหลักในการแก้ปัญหา คุณสามารถกรองบันทึกตามแหล่งข้อมูลได้ดังนี้
- Cloud Functions: ตรวจสอบบันทึกสำหรับฟังก์ชัน
receive-requestหรือschedule-simulationเพื่อแก้ไขข้อบกพร่องของปัญหาการจัดการระบบ - Compute Engine: ตรวจสอบบันทึกอินสแตนซ์ VM เพื่อหาปัญหาการเริ่มต้นหรือการปิดระบบ
- เอเจนต์การจำลอง: เอเจนต์ที่ทำงานภายในคอนเทนเนอร์ Docker จะส่งต่อบันทึกไปยัง Logs Explorer กรองตามชื่ออินสแตนซ์ VM เพื่อดูความคืบหน้าของการจำลองโดยละเอียด
- Cloud Functions: ตรวจสอบบันทึกสำหรับฟังก์ชัน
- Cloud Storage: สำหรับการจำลองที่เสร็จสมบูรณ์ ระบบจะอัปโหลดไฟล์
logcatและbugreportจากอุปกรณ์ Cuttlefish ไปยังไดเรกทอรีเอาต์พุตของการจำลองในที่เก็บข้อมูล 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: ดึงข้อความจากคิวการจำลองroles/datastore.user: ดำเนินการอ่านและเขียนแบบอะตอมมิกไปยังตัวนับrunning-vmsroles/compute.instanceAdmin.v1: สร้างและเริ่ม VM ของ Compute Engineroles/iam.serviceAccountUser: อนุญาตให้ฟังก์ชันนี้กำหนดบัญชีบริการsimulation-agentให้กับ VM ที่สร้างขึ้น
- แนบกับ: 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 สำหรับบัญชีบริการเหล่านี้เป็นวิธีหลักในการควบคุมการเข้าถึงและสิทธิ์ภายในระบบ