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

Для использования платформы Cloud Telemetry Simulation необходимо развернуть инфраструктуру в вашем проекте Google Cloud.

Получите доступ к исходному коду

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

Предварительные требования

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

  • Проект Google Cloud с включенной функцией выставления счетов .
  • Безопасность веб-демоверсии: Если вы развертываете веб-демоверсию, необходимо настроить идентификатор клиента OAuth 2.0 в разделе Google Cloud APIs & Services > Credentials , чтобы защитить приложение 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 ( gcloud CLI )
    • Terraform (используемая версия из репозитория)
    • Docker
    • Go (используемая версия для функций оркестратора в репозитории)

Разверните инфраструктуру Google Cloud.

Развертывание платформы моделирования включает два основных этапа: использование Terraform для развертывания основной инфраструктуры в Google Cloud и сборка и отправка образа Docker агента моделирования в реестр артефактов. В этом разделе описан процесс развертывания инфраструктуры.

Введите значения для следующих переменных, чтобы обновить фрагменты кода на этой странице:

  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)
    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
    

Соберите и загрузите образ агента моделирования.

Агент моделирования запускает моделирование на виртуальной машине Compute Engine. Вы создаете его с помощью артефактов SDV и отправляете в реестр артефактов.

Для создания и отправки образа агента моделирования:

  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)"
    

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

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

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

Управление затратами

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

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

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

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

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

Служебные счета

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

  1. Идентификатор выполнения (VM):

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

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

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

      • Прикреплено к: Облачной функции schedule-simulation .
      • Права доступа:

        -   `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 .
      • Права доступа: - roles/compute.instanceAdmin.v1 : Удаляет виртуальную машину после завершения выполнения. - roles/datastore.user : Обновляет статус моделирования на COMPLETED или FAILED .
    • delete-simulation-function :

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

    • scheduler-trigger :

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

      • Используется: заданием cron планировщика облачных задач для очистки.
      • Права доступа: roles/run.invoker для запуска логики очистки.

Управление политиками управления идентификацией и доступом для этих служебных учетных записей является основным способом контроля доступа и разрешений в системе.