Hướng dẫn triển khai

Nền tảng Cloud Telemetry Simulation yêu cầu bạn triển khai cơ sở hạ tầng cho dự án Google Cloud của mình.

Truy cập vào mã nguồn

Mã nguồn cho nền tảng Mô phỏng dữ liệu đo từ xa trên đám mây được lưu trữ trên GitHub, trong aaos-sdv-telemetry-simulator.

Điều kiện tiên quyết

Để triển khai nền tảng này, hãy đảm bảo bạn đáp ứng các điều kiện tiên quyết sau:

  • Một dự án trên Google Cloud đã bật tính năng Thanh toán.
  • Bảo mật bản minh hoạ trên web: Nếu triển khai Bản minh hoạ trên web, bạn phải định cấu hình Mã ứng dụng OAuth 2.0 trong API và dịch vụ > Thông tin đăng nhập của Google Cloud để bảo mật ứng dụng App Engine và hạn chế quyền truy cập vào các Tài khoản Google được uỷ quyền.
  • Các cấu phần phần mềm bản dựng Xe được xác định bằng phần mềm (SDV): Bạn phải có các cấu phần phần mềm hình ảnh SDV đã biên dịch của riêng mình. Những tệp này không có trong kho lưu trữ này.
    • cvd-host_package.tar.gz
    • sdv_core_cf-img-<version>.zip
  • Quyền: Người dùng hoặc tài khoản dịch vụ chạy Terraform phải có đủ quyền để tạo các tài nguyên được xác định trong cấu hình (ví dụ: Người chỉnh sửa dự án hoặc một vai trò tuỳ chỉnh có quyền đối với Compute Engine, Cloud Functions, Identity and Access Management, Cloud Storage và các dịch vụ cần thiết khác).
  • Công cụ:
    • Google Cloud CLI (gcloud CLI)
    • Terraform (phiên bản được dùng trong kho lưu trữ)
    • Docker
    • Go (phiên bản được dùng cho các hàm điều phối trong kho lưu trữ)

Triển khai cơ sở hạ tầng Google Cloud

Việc triển khai nền tảng mô phỏng bao gồm 2 bước chính: sử dụng Terraform để triển khai cơ sở hạ tầng cốt lõi cho Google Cloud, đồng thời tạo và đẩy hình ảnh Docker của tác nhân mô phỏng lên Artifact Registry. Phần này hướng dẫn bạn cách triển khai cơ sở hạ tầng.

Nhập giá trị cho các biến sau để cập nhật đoạn mã trên trang này:

  1. Định cấu hình phần phụ trợ Terraform: Tạo một tệp để chỉ định vị trí Terraform lưu trữ tệp trạng thái trong Cloud Storage. Đặt tên cho tệp bằng cú pháp sau:

    environments/ENVIRONMENT/backend.hcl
    
    # environments/ENVIRONMENT/backend.hcl
    bucket = "TF_BUCKET_NAME"
    prefix = "sdv-telemetry-simulation"
    
  2. Định cấu hình các biến dự án: Tạo một tệp có tên chứa thông tin chi tiết về dự án của bạn. Đặt tên cho tệp bằng cú pháp sau:

    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. Áp dụng cấu hình Terraform: Chuyển đến thư mục infrastructure, sau đó khởi động và áp dụng cấu hình:

    # 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
    

Tạo và đẩy hình ảnh tác nhân mô phỏng

Tác nhân mô phỏng chạy mô phỏng trên máy ảo (VM) Compute Engine. Bạn tạo bản dựng bằng các cấu phần phần mềm SDV và đẩy bản dựng đó lên Artifact Registry.

Cách tạo và đẩy hình ảnh tác nhân mô phỏng:

  1. Đặt cấu phần phần mềm: Sao chép các tệp cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip vào thư mục simulation-agent/sdv-image-resources/.

  2. Tạo và đẩy: Chuyển đến thư mục simulation-agent, sau đó tạo và đẩy hình ảnh. Thay thế đường dẫn hình ảnh bằng đường dẫn bạn đã định cấu hình trong tệp 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. Cập nhật vân tay: Sau khi đẩy một hình ảnh mới, bạn có thể cần lấy thông tin tóm tắt SHA256 của hình ảnh đó và cập nhật bản đồ image_fingerprints trong tệp variables.tfvars, sau đó chạy lại terraform apply.

    # Get the digest using gcloud
    gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"
    

    Nền tảng Mô phỏng dữ liệu đo từ xa trên đám mây đã được triển khai và sẵn sàng chấp nhận các yêu cầu mô phỏng.

Hoạt động và khắc phục sự cố

Giải pháp này cho phép bạn sử dụng các công cụ tích hợp sẵn của Google Cloud để quan sát. Thao tác này chỉ sử dụng tài nguyên tính toán cho mỗi yêu cầu và trong quá trình thực thi mô phỏng.

Quản lý chi phí

Kiến trúc này được thiết kế để tiết kiệm chi phí bằng cách sử dụng các tài nguyên không máy chủ và tài nguyên tạm thời. Chi phí chủ yếu là do:

  • Compute Engine: Tính phí cho thời gian chạy VM mô phỏng. Việc sử dụng VM điểm có thể giảm đáng kể chi phí này.
  • Cloud Functions: Tính phí theo mỗi lần gọi.
  • Bộ nhớ trên đám mây: Tính phí lưu trữ tệp đầu vào và đầu ra cũng như nhật ký.
  • Firestore: Tính phí cho các hoạt động đọc, ghi và lưu trữ dữ liệu.

Khả năng ghi nhận

Tất cả các thành phần đều được tích hợp với bộ công cụ vận hành của Google Cloud.

  • Trình khám phá nhật ký: Đây là công cụ chính để khắc phục sự cố. Bạn có thể lọc nhật ký theo tài nguyên:
    • Cloud Functions: Kiểm tra nhật ký cho các hàm receive-request hoặc schedule-simulation để gỡ lỗi các vấn đề về điều phối.
    • Compute Engine: Kiểm tra nhật ký phiên bản VM để biết các vấn đề khi khởi động hoặc tắt.
    • Tác nhân mô phỏng: Tác nhân chạy bên trong vùng chứa Docker sẽ chuyển nhật ký của tác nhân đó đến Trình khám phá nhật ký. Lọc theo tên phiên bản máy ảo để xem tiến trình mô phỏng chi tiết.
  • Cloud Storage: Đối với các hoạt động mô phỏng đã hoàn tất, các tệp logcatbugreport từ thiết bị Cuttlefish sẽ được tải lên thư mục đầu ra của hoạt động mô phỏng trong bộ chứa Cloud Storage, cung cấp thông tin chi tiết về hành vi của môi trường Android.

Tài khoản dịch vụ

Terraform tạo một số tài khoản dịch vụ để cho phép một môi trường an toàn, có ít đặc quyền nhất. Các tài khoản dịch vụ chính bao gồm:

  1. Danh tính thực thi (VM):

    • simulation-agent:
      • Được đính kèm vào: Các VM Compute Engine đang chạy mô phỏng.
      • Vai trò: Cho phép VM tải kết quả lên và báo hiệu hoàn tất.
      • Quyền:
        • roles/storage.objectUser: Đọc dữ liệu đầu vào và tải các cấu phần phần mềm (nhật ký, báo cáo) lên Cloud Storage.
        • roles/run.invoker: Xác thực và gọi hàm finish-simulation.
  2. Danh tính điều phối (hàm):

    • read-simulations-function:
      • Được đính kèm vào: Cloud Function read-simulation.
      • Quyền:
        • roles/datastore.user: Đọc bản ghi mô phỏng và bản ghi vm đang chạy trong Firestore.
    • receive-request-function:

      • Được đính kèm vào: Cloud Function receive-request.
      • Quyền:
        • roles/datastore.user: Tạo bản ghi mô phỏng PENDING mới trong Firestore.
        • roles/storage.objectUser: Xác minh sự tồn tại của các tệp đầu vào trong Cloud Storage.
    • scheduler-function:

      • Được đính kèm vào: Cloud Function schedule-simulation.
      • Quyền:

        -   `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:

      • Được đính kèm vào: Cloud Function finish-simulation.
      • Quyền:roles/compute.instanceAdmin.v1: Xoá máy ảo sau khi quá trình thực thi hoàn tất. – roles/datastore.user: Cập nhật trạng thái mô phỏng thành COMPLETED hoặc FAILED.
    • delete-simulation-function:

      • Được đính kèm vào: Cloud Function delete-simulation.
      • Quyền:roles/compute.instanceAdmin.v1: Buộc xoá máy ảo trong quá trình huỷ. – roles/datastore.user: Cập nhật trạng thái cho các công việc đã huỷ.
  3. Danh tính của điều kiện kích hoạt:

    • scheduler-trigger:

      • Được dùng bởi: Eventarc (sự kiện) và trình kích hoạt Cloud Scheduler.
      • Quyền: roles/eventarc.eventReceiverroles/run.invoker để kích hoạt các hàm điều phối.
    • cleanup-scheduler:

      • Được dùng bởi: Dịch vụ chạy ngầm theo thời gian định trước của Cloud Scheduler để dọn dẹp.
      • Quyền: roles/run.invoker để kích hoạt logic dọn dẹp.

Quản lý các chính sách Quản lý danh tính và quyền truy cập cho các tài khoản dịch vụ này là cách chính để kiểm soát quyền truy cập và các quyền trong hệ thống.