แพลตฟอร์มนี้กำหนดให้คุณต้องติดตั้งใช้งานโครงสร้างพื้นฐานในโปรเจ็กต์ Google Cloud
รับซอร์สโค้ด
ซอร์สโค้ดสำหรับแพลตฟอร์มการจำลองการวัดและส่งข้อมูลทางไกลของระบบคลาวด์โฮสต์อยู่ใน
sdv.googlesource.com ซึ่งต้องมีการตรวจสอบสิทธิ์ตามที่อธิบายไว้ใน
เข้าถึงที่เก็บเครื่องมือ
หากต้องการเข้าถึงซอร์สโค้ด ให้โคลนที่เก็บการจำลองการวัดระยะทางของ Cloud โดยทำดังนี้
git clone https://sdv.googlesource.com/external/cloud_telemetry_simulation-external
สิ่งที่ต้องมีก่อน
หากต้องการติดตั้งใช้งานแพลตฟอร์ม โปรดตรวจสอบว่าคุณมีคุณสมบัติตรงตามข้อกำหนดเบื้องต้นต่อไปนี้
- โปรเจ็กต์ Google Cloud ที่เปิดใช้การเรียกเก็บเงิน
- ความปลอดภัยของเว็บเดโม: หากนำเว็บเดโมไปใช้งาน คุณต้องกำหนดค่ารหัสไคลเอ็นต์ OAuth 2.0 ใน Google Cloud APIs และบริการ > ข้อมูลเข้าสู่ระบบ เพื่อรักษาความปลอดภัยของแอปพลิเคชัน App Engine และจำกัดการเข้าถึงบัญชี Google ที่ได้รับอนุญาต
- อาร์ติแฟกต์บิลด์ยานพาหนะที่กำหนดด้วยซอฟต์แวร์ (SDV): คุณต้องมีอาร์ติแฟกต์อิมเมจ SDV ที่คอมไพล์แล้วเป็นของตนเอง ซึ่งไม่ได้ระบุไว้ในที่เก็บนี้
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- สิทธิ์: ผู้ใช้หรือบัญชีบริการที่เรียกใช้ Terraform ต้องมีสิทธิ์เพียงพอในการสร้างทรัพยากรที่กำหนดไว้ในการกำหนดค่า (เช่น Project Editor หรือบทบาทที่กำหนดเองที่มีสิทธิ์สำหรับ 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: สร้างไฟล์ชื่อ
environments/ENVIRONMENT/backend.hclเพื่อระบุตำแหน่งที่ Terraform จัดเก็บไฟล์สถานะใน Cloud Storage# 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 จำลอง
Simulation Agent จะเรียกใช้การจำลองบนเครื่องเสมือน (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 ได้รับการติดตั้งใช้งานและพร้อมรับคำขอการจำลองแล้ว
การดำเนินการและการแก้ปัญหา
โซลูชันนี้ช่วยให้คุณใช้เครื่องมือในตัวของ Google Cloud เพื่อความสามารถในการสังเกตได้ โดยจะ ใช้ทรัพยากรการคำนวณต่อคำขอและระหว่างการดำเนินการจำลองเท่านั้น
การจัดการต้นทุน
สถาปัตยกรรมนี้ออกแบบมาให้คุ้มค่าโดยใช้ทรัพยากรแบบ Serverless และ แบบชั่วคราว ค่าใช้จ่ายส่วนใหญ่เกิดจากปัจจัยต่อไปนี้
- Compute Engine: ระบบจะเรียกเก็บเงินตามเวลาที่ VM จำลองทำงาน การใช้ Spot VM จะช่วยลดค่าใช้จ่ายนี้ได้อย่างมาก
- Cloud Functions: เรียกเก็บเงินต่อการเรียกใช้
- Cloud Storage: เรียกเก็บเงินสำหรับการจัดเก็บไฟล์อินพุตและเอาต์พุต รวมถึงบันทึก
- Firestore: เรียกเก็บเงินสำหรับการอ่าน การเขียน และพื้นที่เก็บข้อมูล
ความสามารถในการสังเกต
คอมโพเนนต์ทั้งหมดผสานรวมกับชุดเครื่องมือการดำเนินการของ Google Cloud
- เครื่องมือสำรวจบันทึก: นี่คือเครื่องมือหลักในการแก้ปัญหา คุณสามารถ
กรองบันทึกตามทรัพยากรได้โดยทำดังนี้
- Cloud Functions: ตรวจสอบบันทึกสำหรับฟังก์ชัน
receive-requestหรือschedule-simulationเพื่อแก้ไขข้อบกพร่องของปัญหาการจัดการเป็นกลุ่ม - Compute Engine: ตรวจสอบบันทึกอินสแตนซ์ VM เพื่อดูปัญหาการเริ่มต้นหรือการปิดระบบ
- ตัวแทนการจำลอง: ตัวแทนที่ทำงานภายในคอนเทนเนอร์ 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:- เชื่อมโยงกับ:
read-simulationCloud Function - สิทธิ์:
roles/datastore.user: อ่านบันทึกการจำลองและ VM ที่ทำงาน ใน 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: ลบ VM หลังจากดำเนินการเสร็จสมบูรณ์ -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เพื่อทริกเกอร์ฟังก์ชัน Orchestrator
cleanup-scheduler:- ใช้โดย: งาน Cron ของ Cloud Scheduler สำหรับการล้างข้อมูล
- สิทธิ์:
roles/run.invokerเพื่อทริกเกอร์ตรรกะการล้างข้อมูล
การจัดการนโยบาย Identity and Access Management สำหรับบัญชีบริการเหล่านี้เป็นวิธีหลักในการควบคุมการเข้าถึงและสิทธิ์ภายในระบบ