คู่มือการทำให้ใช้งานได้

แพลตฟอร์มการจำลองการส่งข้อมูลทางไกลในระบบคลาวด์กำหนดให้คุณต้องติดตั้งใช้งานโครงสร้างพื้นฐานในโปรเจ็กต์ 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.gz
    • sdv_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

การติดตั้งใช้งานแพลตฟอร์มการจำลองมี 2 ขั้นตอนหลักๆ ได้แก่ การใช้ Terraform เพื่อติดตั้งใช้งานโครงสร้างพื้นฐานหลักใน Google Cloud และการสร้างและพุชอิมเมจ Docker ของ Agent การจำลองไปยัง Artifact Registry ส่วนนี้จะแนะนำคุณเกี่ยวกับการติดตั้งใช้งานโครงสร้างพื้นฐาน

ป้อนค่าสำหรับตัวแปรต่อไปนี้เพื่ออัปเดตข้อมูลโค้ดในหน้านี้

  1. กำหนดค่าแบ็กเอนด์ Terraform: สร้างไฟล์เพื่อระบุตำแหน่งที่ Terraform จัดเก็บไฟล์สถานะใน Cloud Storage ตั้งชื่อไฟล์โดยใช้ไวยากรณ์ต่อไปนี้

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. กำหนดค่าตัวแปรของโปรเจ็กต์: สร้างไฟล์ที่มีชื่อพร้อมรายละเอียดของโปรเจ็กต์ ตั้งชื่อไฟล์โดยใช้ไวยากรณ์ต่อไปนี้

    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
    
  3. ใช้การกำหนดค่า 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

วิธีสร้างและพุชอิมเมจตัวแทนการจำลอง

  1. วางอาร์ติแฟกต์: คัดลอกไฟล์ cvd-host_package.tar.gz และ sdv_core_cf-img-<version>.zip ไปยังไดเรกทอรี simulation-agent/sdv-image-resources/

  2. สร้างและพุช: ไปที่ไดเรกทอรี 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
    
  3. อัปเดตฟิงเกอร์ปรินต์: หลังจากพุชอิมเมจใหม่ คุณอาจต้องรับไดเจสต์ 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 Storage: สำหรับการจำลองที่เสร็จสมบูรณ์ ระบบจะอัปโหลดไฟล์ logcat และ bugreport จากอุปกรณ์ Cuttlefish ไปยังไดเรกทอรีเอาต์พุตของการจำลองในที่เก็บข้อมูล Cloud Storage เพื่อให้ข้อมูลเชิงลึกเกี่ยวกับลักษณะการทำงานของสภาพแวดล้อม Android

บัญชีบริการ

Terraform จะสร้างบัญชีบริการหลายบัญชีเพื่อเปิดใช้สภาพแวดล้อมที่ปลอดภัยและมีสิทธิ์ขั้นต่ำที่สุด บัญชีบริการที่สำคัญมีดังนี้

  1. ข้อมูลระบุตัวตนในการดำเนินการ (VM):

    • simulation-agent:
      • แนบกับ: VM ของ Compute Engine ที่เรียกใช้การจำลอง
      • บทบาท: อนุญาตให้ VM อัปโหลดผลลัพธ์และส่งสัญญาณว่าเสร็จสมบูรณ์
      • สิทธิ์
        • roles/storage.objectUser: อ่านอินพุตและอัปโหลดอาร์ติแฟกต์ (บันทึก รายงาน) ไปยัง Cloud Storage
        • roles/run.invoker: ตรวจสอบสิทธิ์และเรียกใช้ฟังก์ชัน finish-simulation
  2. ข้อมูลประจำตัวของการจัดการ (ฟังก์ชัน):

    • read-simulations-function:
      • แนบกับ: Cloud Function read-simulation
      • สิทธิ์
        • roles/datastore.user: อ่านบันทึกการจำลองและ VM ที่ทำงานอยู่ใน Firestore
    • receive-request-function:

      • แนบกับ: Cloud Function receive-request
      • สิทธิ์
        • roles/datastore.user: สร้างระเบียนการจำลอง PENDING รายการใหม่ใน Firestore
        • roles/storage.objectUser: ยืนยันการมีอยู่ของไฟล์อินพุตใน Cloud Storage
    • scheduler-function:

      • แนบกับ: Cloud Function schedule-simulation
      • สิทธิ์
        • roles/pubsub.subscriber: ดึงข้อความจากคิวการจำลอง
        • roles/datastore.user: ดำเนินการอ่านและเขียนแบบอะตอมมิกไปยังตัวนับ running-vms
        • roles/compute.instanceAdmin.v1: สร้างและเริ่ม VM ของ Compute Engine
        • roles/iam.serviceAccountUser: อนุญาตให้ฟังก์ชันนี้กำหนดบัญชีบริการ simulation-agent ให้กับ VM ที่สร้างขึ้น
    • simulation-finisher-function:

      • แนบกับ: Cloud Function finish-simulation
      • สิทธิ์
        • roles/compute.instanceAdmin.v1: ลบ VM หลังจากดำเนินการเสร็จสมบูรณ์
        • roles/datastore.user: อัปเดตสถานะการจำลองเป็น COMPLETED หรือ FAILED
    • delete-simulation-function:

      • แนบกับ: Cloud Function delete-simulation
      • สิทธิ์
        • roles/compute.instanceAdmin.v1: บังคับลบเครื่องเสมือนระหว่างการยกเลิก
        • roles/datastore.user: อัปเดตสถานะของงานที่ยกเลิก
  3. ข้อมูลระบุตัวตนของทริกเกอร์

    • scheduler-trigger:

      • ใช้โดย: ทริกเกอร์ Eventarc (เหตุการณ์) และ Cloud Scheduler
      • สิทธิ์: roles/eventarc.eventReceiver และ roles/run.invoker เพื่อเรียกใช้ฟังก์ชัน Orchestrator
    • cleanup-scheduler:

      • ใช้โดย: งาน Cron ของ Cloud Scheduler สำหรับการล้างข้อมูล
      • สิทธิ์: roles/run.invoker เพื่อเรียกใช้ตรรกะการล้างข้อมูล

การจัดการนโยบาย Identity and Access Management สำหรับบัญชีบริการเหล่านี้เป็นวิธีหลักในการควบคุมการเข้าถึงและสิทธิ์ภายในระบบ