사용자 가이드

제공된 웹 데모를 사용하거나 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)과 같은 사용자 계정에 필요한 권한을 부여하는 방법은 Cloud Functions 액세스 관리를 참고하세요.

사용자 워크플로

  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'). 중요: 인프라의 허용된 이미지 맵에 정의된 태그 (예: 'latest', 'stable')와 일치해야 합니다. Terraform에 SHA256 맵이 정의되어 있으면 시스템에서 알 수 없는 태그를 거부합니다.
    • 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 메서드를 사용하여 기록, 상태, 시스템 구성을 가져옵니다.

1. 시뮬레이션 나열

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

  • 엔드포인트: 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"
    }
    

2. 특정 시뮬레이션 가져오기

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
    }
    

3. 시스템 측정항목 및 구성 가져오기

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

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

    • 엔드포인트:

      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
      }