이 플랫폼에서는 Google Cloud 프로젝트에 인프라를 배포해야 합니다.
소스 코드 가져오기
Cloud Telemetry Simulation 플랫폼의 소스 코드는
sdv.googlesource.com에 호스팅되며, 액세스 도구 저장소에 설명된 대로 인증이 필요합니다.
소스 코드에 액세스하려면 Cloud Telemetry Simulation 저장소를 클론하세요.
git clone https://sdv.googlesource.com/external/cloud_telemetry_simulation-external
기본 요건
플랫폼을 배포하려면 다음 기본 요건을 충족해야 합니다.
- 결제가 사용 설정 된 Google Cloud 프로젝트.
- 웹 데모 보안: 웹 데모를 배포하는 경우 Google Cloud API 및 서비스 > 사용자 인증 정보 에서 OAuth 2.0 클라이언트 ID 를 구성하여 App Engine 애플리케이션을 보호하고 승인된 Google 계정에 대한 액세스를 제한해야 합니다.
- 소프트웨어 정의 차량 (SDV) 빌드 아티팩트: 컴파일된 SDV 이미지 아티팩트가 있어야 합니다. 이 저장소에는 제공되지 않습니다.
cvd-host_package.tar.gzsdv_core_cf-img-<version>.zip
- 권한: Terraform을 실행하는 사용자 또는 서비스 계정에 구성에 정의된 리소스를 만들 수 있는 충분한 권한이 있어야 합니다 (예: 프로젝트 편집자 또는 Compute Engine, Cloud Functions, ID 및 액세스 관리, Cloud Storage, 기타 필요한 서비스에 대한 권한이 있는 커스텀 역할).
- 도구:
- Google Cloud CLI (
gcloud CLI) - Terraform (저장소에서 사용된 버전)
- Docker
- Go (저장소에서 오케스트레이터 함수에 사용된 버전)
- Google Cloud CLI (
Google Cloud 인프라 배포
시뮬레이션 플랫폼 배포에는 두 가지 주요 단계가 있습니다. Terraform을 사용하여 핵심 인프라를 Google Cloud에 배포하고 시뮬레이션 에이전트 Docker 이미지를 빌드하여 Artifact Registry에 푸시하는 것입니다. 이 섹션에서는 인프라 배포 과정을 안내합니다.
다음 변수 값을 입력하여 이 페이지의 코드 스니펫을 업데이트합니다.
Terraform 백엔드 구성:
environments/ENVIRONMENT/backend.hcl이라는 파일을 만들어 Terraform이 Cloud Storage에 상태 파일을 저장하는 위치를 지정합니다.# environments/ENVIRONMENT/backend.hcl bucket = "TF_BUCKET_NAME" prefix = "sdv-telemetry-simulation"프로젝트 변수 구성: 프로젝트 세부정보가 포함된
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 = 5Terraform 구성 적용:
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 가상 머신(VM)에서 시뮬레이션을 실행합니다. SDV 아티팩트로 빌드하고 Artifact Registry에 푸시합니다.
시뮬레이션 에이전트 이미지를 빌드하고 푸시하려면 다음 단계를 따르세요.
아티팩트 배치:
cvd-host_package.tar.gz및sdv_core_cf-img-<version>.zip파일을simulation-agent/sdv-image-resources/디렉터리에 복사합니다.빌드 및 푸시:
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디지털 지문 업데이트: 새 이미지를 푸시한 후 SHA256 다이제스트를 가져와
variables.tfvars파일의image_fingerprints맵을 업데이트한 후terraform apply를 다시 실행해야 할 수 있습니다.# Get the digest using gcloud gcloud container images describe $AGENT_IMAGE --format="value(image_summary.digest)"Cloud Telemetry Simulation 플랫폼이 배포되었으며 시뮬레이션 요청을 수락할 준비가 되었습니다.
작업 및 문제 해결
이 솔루션을 사용하면 Google Cloud 기본 제공 도구를 모니터링 가능성에 사용할 수 있습니다. 요청당 및 시뮬레이션 실행 중에만 컴퓨팅 리소스를 사용합니다.
비용 관리
이 아키텍처는 서버리스 및 임시 리소스를 사용하여 비용 효율적으로 설계되었습니다. 비용은 주로 다음 요소에 따라 달라집니다.
- Compute Engine: 시뮬레이션 VM이 실행되는 시간에 대해 요금이 청구됩니다. 스팟 VM을 사용하면 이 비용을 크게 줄일 수 있습니다.
- Cloud Functions: 호출당 요금이 청구됩니다.
- Cloud Storage: 입력 및 출력 파일과 로그를 저장하는 데 요금이 청구됩니다.
- Firestore: 읽기, 쓰기, 데이터 스토리지에 요금이 청구됩니다.
모니터링 가능성
모든 구성요소는 Google Cloud의 운영 제품군과 통합됩니다.
- 로그 탐색기: 문제 해결을 위한 기본 도구입니다. 리소스별로 로그를 필터링할 수 있습니다.
- Cloud Functions:
receive-request또는schedule-simulation함수의 로그를 확인하여 오케스트레이션 문제를 디버그합니다. - Compute Engine: VM 인스턴스 로그에서 시작 또는 종료 문제를 확인합니다.
- 시뮬레이션 에이전트: Docker 컨테이너 내에서 실행되는 에이전트는 로그를 로그 탐색기로 전달합니다. VM 인스턴스 이름으로 필터링하여 자세한 시뮬레이션 진행 상황을 확인합니다.
- Cloud Functions:
- Cloud Storage: 완료된 시뮬레이션의 경우 Cuttlefish 기기의
logcat및bugreport파일이 Cloud Storage 버킷의 시뮬레이션 출력 디렉터리에 업로드되어 Android 환경의 동작에 대한 심층적인 통계를 제공합니다.
서비스 계정
Terraform은 안전한 최소 권한 환경을 사용 설정하기 위해 여러 서비스 계정을 만듭니다. 주요 서비스 계정은 다음과 같습니다.
실행 ID (VM):
simulation-agent:- 연결됨: 시뮬레이션을 실행하는 Compute Engine VM입니다.
- 역할: VM에서 결과를 업로드하고 완료를 알릴 수 있도록 허용합니다.
- 권한:
roles/storage.objectUser: 입력을 읽고 아티팩트(로그, 보고서)를 Cloud Storage에 업로드합니다.roles/run.invoker:finish-simulation함수를 인증하고 호출합니다.
오케스트레이션 ID (함수):
read-simulations-function:- 연결됨:
read-simulationCloud 함수입니다. - 권한:
roles/datastore.user: Firestore에서 시뮬레이션 및 실행 중인 VM 레코드를 읽습니다.
- 연결됨:
receive-request-function:- 연결됨:
receive-requestCloud 함수입니다. - 권한:
roles/datastore.user: Firestore에서 새PENDING시뮬레이션 레코드를 만듭니다.roles/storage.objectUser: Cloud Storage에서 입력 파일의 존재를 확인합니다.
- 연결됨:
scheduler-function:- 연결됨:
schedule-simulationCloud 함수입니다. 권한:
- `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-simulationCloud 함수입니다. - 권한:
-
roles/compute.instanceAdmin.v1: 실행이 완료된 후 VM을 삭제합니다. -roles/datastore.user: 시뮬레이션 상태를COMPLETED또는FAILED로 업데이트합니다.
- 연결됨:
delete-simulation-function:- 연결됨:
delete-simulationCloud 함수입니다. - 권한:
-
roles/compute.instanceAdmin.v1: 취소 중에 가상 머신을 강제 삭제합니다. -roles/datastore.user: 취소된 작업의 상태를 업데이트합니다.
- 연결됨:
트리거 ID:
scheduler-trigger:- 사용자: Eventarc (이벤트) 및 Cloud Scheduler 트리거입니다.
- 권한: 오케스트레이터 함수를 트리거하는
roles/eventarc.eventReceiver및roles/run.invoker입니다.
cleanup-scheduler:- 사용자: 정리용 Cloud Scheduler 크론 작업입니다.
- 권한: 정리 로직을 트리거하는
roles/run.invoker입니다.
이러한 서비스 계정의 ID 및 액세스 관리 정책을 관리하는 것이 시스템 내에서 액세스 및 권한을 제어하는 기본 방법입니다.