사용자 가이드

제공된 웹 데모를 사용하거나 REST API를 직접 호출하여 시뮬레이션을 실행할 수 있습니다.

입력 및 출력

입력 및 출력 파일은 Terraform 설정의 Cloud Storage 버킷을 사용합니다.

입력 디렉터리에는 metrics_config.zippublisher_config.zip 파일이 포함되어야 합니다. 필요에 따라 경로를 정의할 수 있습니다.

출력 버킷에는 각 시뮬레이션을 ID별로 저장하는 simulations 디렉터리가 포함되어 있습니다. 각 시뮬레이션 디렉터리에는 복사된 입력 파일이 있는 입력 폴더와 출력 폴더가 포함되어 있습니다. 출력 폴더에는 버그 신고, logcat 파일, 생성된 시뮬레이터 파일이 포함되어 있습니다.

웹 데모 사용

이 플랫폼에는 시뮬레이션을 보고, 만들고, 관리할 수 있는 데모용 Flutter 기반 웹 애플리케이션이 포함되어 있습니다. 필요에 맞게 사용자 인터페이스를 직접 빌드하는 것이 좋습니다.

데모 앱은 App Engine에 배포되며 Google 계정으로 로그인해야 합니다. 이는 Google Cloud 프로젝트에 구성된 OAuth 2.0 클라이언트 ID를 사용하여 보호됩니다. 로그인한 계정에는 배포된 Cloud Functions를 호출할 수 있는 IAM 권한이 있어야 합니다. Cloud Functions 호출자 역할 (roles/cloudfunctions.invoker)과 같은 사용자 계정에 필요한 권한을 부여하는 방법은 IAM으로 액세스 승인을 참고하세요.

사용자 워크플로

  1. OAuth 2.0 프로세스를 사용하여 인증된 Google 계정으로 로그인합니다.
  2. 모든 실행 정보를 보유하는 Firestore 데이터베이스를 쿼리하여 모든 시뮬레이션을 나열하는 기본 페이지에서 시뮬레이션을 확인합니다.
  3. 오른쪽 하단의 + 작업 버튼을 클릭하여 새 시뮬레이션을 예약할 양식으로 이동합니다. 입력 경로, 빌드 ID, 인스턴스 유형을 비롯한 여러 매개변수를 제공합니다. 자세한 내용은 시뮬레이션 만들기를 참고하세요.
  4. 새 시뮬레이션의 상태(예: PENDING, RUNNING, COMPLETED)를 보여주는 시뮬레이션 목록 업데이트에서 모니터 상태를 확인합니다.
  5. 시뮬레이션이 완료되면 생성된 보고서와 아티팩트를 확인합니다. 입력 파일, 출력 보고서, 로그, Logcat, 버그 신고는 Cloud Storage에 저장됩니다.
  6. 선택사항: 예약된 시뮬레이션 또는 실행 중인 시뮬레이션을 취소합니다.

API 사용

자동화 및 다른 시스템과의 통합을 위해 REST API를 사용할 수 있습니다.

인증 섹션 및 엔드포인트 정의에 사용되는 자리표시자 CLOUD_FUNCTION_URL 은 호출되는 Cloud 함수의 기본 URL을 나타냅니다. Google Cloud 콘솔의 Cloud Functions 페이지에서 함수 URL을 찾을 수 있습니다. 각 함수의 URL은 함수 세부정보 페이지의 트리거 탭에 표시됩니다. 또는 apply 명령어를 실행한 후 출력되는 Terraform 출력에서 이러한 URL을 찾을 수 있습니다.

인증

모든 API 요청은 호출자의 ID를 증명하는 ID 토큰으로 인증되어야 합니다. ID (사용자 또는 서비스 계정)에는 대상 함수에 대한 Cloud Functions 호출자 권한이 있어야 합니다.

  1. 사용자 호출 (로컬 및 CLI): 로컬 머신 또는 Google Cloud 이외의 환경에서 API를 호출할 때는 사용자 계정에 대해 획득한 Google에서 발급한 ID 토큰을 사용해야 합니다.

    TOKEN=$(gcloud auth print-identity-token)
    
  2. 서비스 계정 호출 (Google Cloud 내): Google Cloud 리소스 (예: Compute Engine VM, 다른 Cloud 함수 또는 Kubernetes 클러스터)에서 API를 호출할 때는 리소스에 연결된 서비스 계정의 ID를 사용합니다. 토큰은 리소스의 메타데이터 서버에서 가져와야 합니다.

    TOKEN=$(curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/identity?audience=CLOUD_FUNCTION_URL" -H "Metadata-Flavor: Google")
    

검색된 토큰을 요청의 Authorization 헤더에 Bearer 토큰으로 포함합니다.

엔드포인트

Cloud Telemetry Simulation 스택의 사용자 대상 엔드포인트를 사용하면 시뮬레이션을 만들고 삭제하거나 데이터베이스에서 시뮬레이션 정보를 읽을 수 있습니다.

시뮬레이션 만들기

이 엔드포인트는 새 시뮬레이션 요청을 만들고 실행을 예약합니다.

  • 엔드포인트: POST https://CLOUD_FUNCTION_URL/simulation-orchestrator-receive-request
  • 요청 본문:

    {
      "build_id": "latest",
      "file_path": "inputs/my-test-case/",
      "instance_type": "n1-standard-8",
      "owner": "user@example.com",
      "max_simulation_time": 300,
      "max_report_count": 5
    }
    
    • build_id (문자열): 사용할 에이전트 Docker 이미지의 태그(예: latest)

    • file_path (문자열): metrics_config.zippublisher_config.zip이 포함된 폴더의 GCS 버킷 내 경로입니다.

    • instance_type (문자열): Compute Engine 머신 유형입니다. 이 유형은 n1, n2, t2d 시리즈와 같이 중첩된 가상화를 지원해야 합니다. 자세한 내용은 중첩된 가상화 개요를 참고하세요.

    • owner (문자열): 시뮬레이션을 시작하는 사용자의 이메일입니다.

    • max_simulation_time (정수): 시뮬레이션이 실행되는 최대 시간(초)입니다.

    • max_report_count (정수): 시뮬레이션이 완료되는 원격 분석 보고서 수입니다.

  • 성공 응답 (200 OK):

    { "id": "sim-a1b2c3d4e5f6" }
    

시뮬레이션 삭제

이 엔드포인트는 대기 중이거나 실행 중인 시뮬레이션을 취소하고 연결된 리소스를 삭제합니다.

  • 엔드포인트: POST https://CLOUD_FUNCTION_URL/simulation-orchestrator-delete-simulation
  • 헤더:
    • Content-Type: application/json
  • 요청 본문:

    { "id": "sim-a1b2c3d4e5f6" }
    
  • 성공 응답 (200 OK): 빈 JSON 객체 {}.

시뮬레이션 데이터 읽기

시뮬레이션 데이터를 읽으려면 simulation-reader 함수와 상호작용하면 됩니다. 이러한 엔드포인트는 GET 메서드를 사용하여 기록, 상태, 시스템 구성을 가져옵니다.

시뮬레이션 나열

필터링 및 정렬을 지원하는 시뮬레이션의 페이지가 나뉜 목록을 가져옵니다.

  • 엔드포인트: GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations
  • 쿼리 매개변수 (모두 선택사항):

    • status (문자열): 시뮬레이션 상태 (running, Simulation request received, cancelled, completed)로 필터링합니다.
    • owner (문자열): 소유자의 이메일로 필터링합니다.
    • sort_by (문자열): 정렬할 필드 (received_at, status_updated_at, started_at). 기본값은 received_at입니다.
    • sort_order(문자열): 정렬 방향(asc 또는 desc). 기본값은 desc입니다.
    • page_size (정수): 페이지당 결과 수입니다. 기본값은 20입니다.
    • page_token (문자열): 결과의 다음 페이지를 가져오는 토큰입니다.
  • 요청 예시:

    curl -H "Authorization: Bearer $TOKEN"
    "https://CLOUD_FUNCTION_URL/simulation-reader/simulations?status=completed&owner=user@example.com&sort_by=status_updated_at"
    
  • 성공 응답 (200 OK):

    • 시뮬레이션 배열과 선택적 next_page_token이 포함된 JSON 객체를 반환합니다.
    {
      "simulations": [
        {
          "id": "1234-abcd",
          "owner": "some@email.com",
          "status": "completed",
          "status_updated_at": "2025-12-05T14:50:00.952Z",
          "received_at": "2025-12-05T14:46:43.106Z",
          "started_at": "2025-12-05T14:47:05.848Z",
          "ended_at": "0001-01-01T00:00:00Z",
          "instance_id": "sim-1234-abcd",
          "ip": "10.156.15.230",
          "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest",
          "instance_type": "n1-standard-8",
          "file_path": "gs://your-project-simulation_files/path/",
          "max_simulation_time": 60,
          "max_report_count": 1
        },
        {
          "id": "5678-efgh",
          "owner": "some@email.com",
          "status": "completed",
          "status_updated_at": "2025-11-07T14:49:54.25Z",
          "received_at": "2025-11-07T14:46:54.959Z",
          "started_at": "2025-11-07T14:47:13.714Z",
          "ended_at": "0001-01-01T00:00:00Z",
          "instance_id": "sim-5678-efgh",
          "ip": "10.156.15.221",
          "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest",
          "instance_type": "n1-standard-8",
          "file_path": "gs://your-project-simulation_files/path/",
          "max_simulation_time": 60,
          "max_report_count": 1
        }
      ],
      "next_page_token": "M7bydGsAptLncj8SOCb1"
    }
    
특정 시뮬레이션 가져오기

ID별로 특정 시뮬레이션의 전체 세부정보를 가져옵니다.

  • 엔드포인트:

    GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/[SIMULATION_ID]
    
  • 성공 응답 (200 OK): 요청된 시뮬레이션의 세부정보가 포함된 JSON 객체를 반환합니다.

    {
      "id": "1234-abcd",
      "owner": "some@email.com",
      "status": "completed",
      "status_updated_at": "2025-12-05T14:50:00.952Z",
      "received_at": "2025-12-05T14:46:43.106Z",
      "started_at": "2025-12-05T14:47:05.848Z",
      "ended_at": "0001-01-01T00:00:00Z",
      "instance_id": "sim-1234-abcd",
      "ip": "10.156.15.230",
      "build_id": "europe-west3-docker.pkg.dev/your-project/simulation/simulation-agent:latest",
      "instance_type": "n1-standard-8",
      "file_path": "gs://your-project-simulation_files/path/",
      "max_simulation_time": 60,
      "max_report_count": 1
    }
    
시스템 측정항목 및 구성 가져오기

이러한 엔드포인트는 시뮬레이션 인프라의 현재 부하 및 구성에 대한 통계를 제공합니다.

  • 실행 수 가져오기: 실행 중인 시뮬레이션 수를 반환합니다.

    • 엔드포인트:

      GET https://CLOUD_FUNCTION_URL/simulation-reader/simulations/running/count
      
    • 성공 응답 (200 OK):

      {
        "count": 0
      }
      
  • 최대 동시 VM 가져오기: 구성된 최대 동시 실행 VM 수를 반환합니다.

    • 엔드포인트:

      GET https://CLOUD_FUNCTION_URL/simulation-reader/config/max-running-vms
      
    • 성공 응답 (200 OK):

      {
        "max_running_vms": 5
      }