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

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

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

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

  1. กำหนดค่าแบ็กเอนด์ของ Terraform: สร้างไฟล์ชื่อ environments/ENVIRONMENT/backend.hcl เพื่อระบุตำแหน่งที่ Terraform จัดเก็บไฟล์สถานะใน Cloud Storage

    # 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)
    image_fingerprints = {
    "latest" = "sha256:e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
    "stable" = "sha256:88d4266fd4e6338d13b845fcf289579d209c897823b9217da3e161936f031589"
    }
    
    # Parallel Execution Limit (Default: 5)
    max_concurrent_simulations = 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
    

สร้างและพุชอิมเมจของ Agent จำลอง

Simulation Agent จะเรียกใช้การจำลองบนเครื่องเสมือน (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 ของอิมเมจนั้นและอัปเดตแมป 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 Storage: สำหรับการจำลองที่เสร็จสมบูรณ์ ระบบจะอัปโหลดไฟล์ logcat และ bugreport จากอุปกรณ์ Cuttlefish ไปยังไดเรกทอรีเอาต์พุตของการจำลอง ใน Bucket ของ 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:
      • เชื่อมโยงกับ: read-simulation Cloud Function
      • สิทธิ์:
        • roles/datastore.user: อ่านบันทึกการจำลองและ VM ที่ทำงาน ใน Firestore
    • receive-request-function:

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

      • เชื่อมโยงกับ: schedule-simulation Cloud 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-simulation Cloud Function
      • สิทธิ์: - roles/compute.instanceAdmin.v1: ลบ VM หลังจากดำเนินการเสร็จสมบูรณ์ - roles/datastore.user: อัปเดตสถานะการจำลองเป็น COMPLETED หรือ FAILED
    • delete-simulation-function:

      • เชื่อมโยงกับ: delete-simulation Cloud Function
      • สิทธิ์: - 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 สำหรับบัญชีบริการเหล่านี้เป็นวิธีหลักในการควบคุมการเข้าถึงและสิทธิ์ภายในระบบ