Руководство по развертыванию

Чтобы использовать платформу Cloud Telemetry Simulation, вам нужно развернуть инфраструктуру в проекте Google Cloud.

Как получить доступ к исходному коду

Исходный код платформы Cloud Telemetry Simulation размещен на GitHub в репозитории aaos-sdv-telemetry-simulator.

Требования

Чтобы развернуть платформу, убедитесь, что вы соответствуете следующим требованиям:

  • Проект Google Cloud с включенными платежными функциями.
  • Безопасность веб-демо. Если вы развертываете веб-демо, вам необходимо настроить идентификатор клиента OAuth 2.0 в Google Cloud (API и сервисы > Учетные данные), чтобы защитить приложение App Engine и ограничить доступ к авторизованным аккаунтам Google.
  • Артефакты сборки программно-определяемого автомобиля (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 (используемая версия для функций оркестратора в хранилище)

Развертывание облачной инфраструктуры Google Cloud

Развертывание платформы симуляции состоит из двух основных этапов: развертывание базовой инфраструктуры в Google Cloud с помощью Terraform, а также создание и отправка образа Docker агента симуляции в 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
    

Создайте и отправьте образ агента симуляции

Агент симуляции запускает симуляцию на виртуальной машине 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)"
    

    Платформа Cloud Telemetry Simulation развернута и готова принимать запросы на симуляцию.

Операции и устранение неполадок

Это решение позволяет использовать встроенные инструменты Google Cloud для наблюдаемости. Вычислительные ресурсы используются только для обработки запросов и выполнения моделирования.

Управление расходами

Архитектура разработана с учетом экономической эффективности за счет использования бессерверных и временных ресурсов. Основные причины расходов:

  • Compute Engine. Оплата взимается за время работы виртуальных машин, на которых выполняется моделирование. Использование виртуальных машин Spot может значительно снизить эти расходы.
  • Cloud Functions. Оплата за вызов.
  • Cloud Storage. Плата взимается за хранение входных и выходных файлов и журналов.
  • Firestore. Оплата за чтение, запись и хранение данных.

Наблюдаемость

Все компоненты интегрированы с пакетом операций Google Cloud.

  • Просмотр журналов. Это основной инструмент для устранения неполадок. Вы можете отфильтровать журналы по ресурсу:
    • Cloud Functions. Проверьте журналы функций receive-request или schedule-simulation, чтобы устранить неполадки с оркестрацией.
    • Compute Engine. Проверьте журналы экземпляров виртуальных машин на наличие проблем с запуском или завершением работы.
    • Агент симуляции. Агент, работающий внутри контейнера Docker, пересылает свои журналы в Logs Explorer. Чтобы посмотреть подробные сведения о ходе симуляции, отфильтруйте данные по названию экземпляра виртуальной машины.
  • Cloud Storage. Файлы logcat и bugreport с устройства Cuttlefish загружаются в выходной каталог симуляции в сегменте Cloud Storage. Это позволяет получить подробные сведения о поведении среды Android.

Сервисные аккаунты

Terraform создает несколько сервисных аккаунтов, чтобы обеспечить безопасную среду с минимальными привилегиями. Ключевые сервисные аккаунты:

  1. Идентификационные данные для выполнения (виртуальная машина):

    • simulation-agent:
      • Подключено к: виртуальным машинам Compute Engine, на которых выполняется симуляция.
      • Роль. Позволяет виртуальной машине загружать результаты и сигнализировать о завершении.
      • Разрешения:
        • roles/storage.objectUser – считывает входные данные и загружает артефакты (журналы, отчеты) в Cloud Storage.
        • roles/run.invoker – выполняет аутентификацию и вызывает функцию finish-simulation.
  2. Идентификаторы оркестрации (функции):

    • read-simulations-function:
      • Прикреплено к: функция Cloud Functions read-simulation.
      • Разрешения:
        • roles/datastore.user: чтение записей о симуляции и запущенных виртуальных машинах в Firestore.
    • receive-request-function:

      • Прикреплено к: функция Cloud Functions receive-request.
      • Разрешения:
        • roles/datastore.user – создает новые записи симуляции PENDING в Firestore.
        • roles/storage.objectUser – проверяет наличие входных файлов в Cloud Storage.
    • scheduler-function:

      • Прикреплено к: функция Cloud Functions schedule-simulation.
      • Разрешения:
        • roles/pubsub.subscriber: извлекает сообщения из очереди симуляции.
        • roles/datastore.user: выполняет атомарные операции чтения и записи в счетчик running-vms.
        • roles/compute.instanceAdmin.v1: создает и запускает виртуальные машины Compute Engine.
        • roles/iam.serviceAccountUser – позволяет этой функции назначать сервисный аккаунт simulation-agent создаваемым виртуальным машинам.
    • simulation-finisher-function:

      • Прикреплено к: функция Cloud Functions finish-simulation.
      • Разрешения:
        • roles/compute.instanceAdmin.v1 – удаляет виртуальную машину после завершения выполнения.
        • roles/datastore.user – обновляет статус симуляции до COMPLETED или FAILED.
    • delete-simulation-function:

      • Прикреплено к: функция Cloud Functions delete-simulation.
      • Разрешения:
        • roles/compute.instanceAdmin.v1 – принудительно удаляет виртуальные машины во время отмены.
        • roles/datastore.user – обновляет статус отмененных заданий.
  3. Идентификаторы триггеров:

    • scheduler-trigger:

      • Используется: триггерами Eventarc (события) и Cloud Scheduler.
      • Разрешения: roles/eventarc.eventReceiver и roles/run.invoker для запуска функций оркестратора.
    • cleanup-scheduler:

      • Используется: заданием cron Cloud Scheduler для очистки.
      • Разрешения: roles/run.invoker для запуска логики очистки.

Управление политиками Identity and Access Management для этих сервисных аккаунтов – основной способ контроля доступа и разрешений в системе.