使用 App Topology API

您可以使用 REST API 或 Google Cloud CLI,以程式輔助方式執行查詢,關聯不同來源的資料。 Google Cloud

總覽

執行 App Topology API 查詢時,API 會傳回與查詢相符的圖形節點 (資源) 和邊緣 (關係) 清單。App Topology 會整合下列 Google Cloud 服務的資料:

  • Cloud Asset Inventory、App Hub、Agent Registry 的資源中繼資料
  • 部署資料,例如 Git 提交或容器映像檔的建構作業來源資訊
  • Security Command Center 的安全性資料,例如安全漏洞或身分與存取權管理 (IAM) 擁有權
  • Google Cloud Observability 資料,例如追蹤記錄和快訊

如要執行查詢,請提供下列資訊:

  • 要查詢的網域。SRE 網域包含所有支援的資料。如要瞭解如何列出可用的網域,請參閱列出網域。
  • 支援的圖表節點、邊緣和屬性,可納入查詢。您可以取得網域的完整或部分結構定義。詳情請參閱「取得結構定義」。
  • 要搜尋的節點和邊緣查詢模式。請參閱「執行查詢」。

事前準備

  1. 設定 App Topology。

  2. 選取這個頁面上範例的預計用途分頁:

    gcloud

    在 Google Cloud 控制台中啟用 Cloud Shell。

    啟用 Cloud Shell

    Google Cloud 控制台底部會開啟 Cloud Shell 工作階段,並顯示指令列提示。Cloud Shell 是已安裝 Google Cloud CLI 的殼層環境,並已設定適用於您目前專案的值。工作階段可能要幾秒鐘的時間才能初始化。

    REST

    如要在本機開發環境中使用本頁的 REST API 範例,請使用您提供給 gcloud CLI 的憑證。

      安裝 Google Cloud CLI。

      如果您使用外部識別資訊提供者 (IdP),請先 使用聯合身分登入 gcloud CLI。

    詳情請參閱 Google Cloud 驗證說明文件中的「使用 REST 進行驗證」。

    如要瞭解如何為正式環境設定驗證機制,請參閱 Google Cloud 驗證說明文件中的「 為在 Google Cloud上執行的程式碼設定應用程式預設憑證 」。

必要的角色

如要取得使用 App Topology API 的權限,請要求管理員授予您下列 IAM 角色:

  • 執行查詢: 在要使用 App Topology 的專案中,App Topology Viewer (roles/apptopology.viewer)

如要進一步瞭解如何授予角色,請參閱「管理專案、資料夾和組織的存取權」。

這些預先定義的角色具備使用 App Topology API 所需的權限。如要查看確切的必要權限,請展開「Required permissions」(必要權限) 部分:

所需權限

如要使用 App Topology API,必須具備下列權限:

  • 取得網域:
    • apptopology.domains.get
    • apptopology.domains.list
  • 取得結構定義: apptopology.schemas.get
  • 取得探索到的資源資料: apptopology.discoveredResourcesTopologies.generate
  • 取得開發運作網域資料: apptopology.devOpsDomainTopologies.generate
  • 取得安全性網域資料: apptopology.securityDomainTopologies.generate
  • 取得 SRE 網域資料 (所有支援的資料): apptopology.sreDomainTopologies.generate

您或許還可透過自訂角色或其他預先定義的角色取得這些權限。

列出網域

網域是資源資料集,著重於特定類型的查詢。

  • 如要查詢 App Topology 支援的所有資料,請使用 SRE 網域。
  • 如要取得有關代理資源的資料,請使用 SRE 網域。
  • 本文中的所有要求回覆範例都使用 SRE 網域。

如有需要,您可以列出專案中的可用網域。

gcloud

列出網域

使用下列任何指令資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID

執行 gcloud app-topology domains list 指令:

Linux、macOS 或 Cloud Shell

gcloud app-topology domains list --project=PROJECT_ID

Windows (PowerShell)

gcloud app-topology domains list --project=PROJECT_ID

Windows (cmd.exe)

gcloud app-topology domains list --project=PROJECT_ID

您應該會收到類似以下的回應:

NAME
DEVOPS
SECURITY
SRE

REST

列出網域

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID

HTTP 方法和網址:

GET https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains

請展開以下其中一個選項,以傳送要求:

您應該會收到如下的 JSON 回覆:

{
  "domains": [
    {
      "name": "projects/PROJECT_ID/locations/global/domains/DEVOPS"
    },
    {
      "name": "projects/PROJECT_ID/locations/global/domains/SECURITY"
    },
    {
      "name": "projects/PROJECT_ID/locations/global/domains/SRE"
    }
  ]
}

取得結構定義

為協助您建構查詢,您可以取得網域的所有支援節點、邊緣和屬性清單。您也可以透過 REST API 取得部分結構定義。

由於架構中的項目數量龐大,完整架構的要求可能需要比部分架構的要求長得多的時間。

取得完整結構定義

gcloud

取得完整結構定義

使用下列任何指令資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID
  • DOMAIN:要查詢的網域。SRE 網域包含所有支援的資料。

執行 gcloud app-topology domains schema describe 指令:

Linux、macOS 或 Cloud Shell

gcloud app-topology domains schema describe DOMAIN --project=PROJECT_ID

Windows (PowerShell)

gcloud app-topology domains schema describe DOMAIN --project=PROJECT_ID

Windows (cmd.exe)

gcloud app-topology domains schema describe DOMAIN --project=PROJECT_ID

以下範例摘錄自回應,僅包含節點類型、邊緣類型、邊緣規則和標籤屬性的結構定義中第一個項目。

{
  "nodeTypes": [
    {
      "type": "Base/compute.googleapis.com/UrlMap",
      "labels": [
        "Base/Resource",
        "Base/compute.googleapis.com/UrlMap"
      ],
      "description": "Represents a Compute UrlMap."
    }
  ],
  "edgeTypes": [
    {
      "type": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
      "labels": [
        "Observability/SENDS_TRAFFIC"
      ]
    }
  ],
  "labelProperties": [
    {
      "label": "Base/compute.googleapis.com/InstanceSettings",
      "description": "Classifies a node as a Compute Instance Settings."
    }
  ],
  "edgeRules": [
    {
      "edgeType": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
      "srcNodeType": "Base/geminidataanalytics.googleapis.com/DataAgent",
      "destNodeType": "Base/apps.k8s.io/DaemonSet"
    }
  ]
}

REST

取得完整結構定義

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID
  • DOMAIN:要查詢的網域。SRE 網域包含所有支援的資料。

HTTP 方法和網址:

GET https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains/DOMAIN/schema

請展開以下其中一個選項,以傳送要求:

以下範例摘錄自回應,僅包含節點類型、邊緣類型、邊緣規則和標籤屬性結構定義中的第一個項目。

{
  "nodeTypes": [
    {
      "type": "Base/compute.googleapis.com/UrlMap",
      "labels": [
        "Base/Resource",
        "Base/compute.googleapis.com/UrlMap"
      ],
      "description": "Represents a Compute UrlMap."
    }
  ],
  "edgeTypes": [
    {
      "type": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
      "labels": [
        "Observability/SENDS_TRAFFIC"
      ]
    }
  ],
  "labelProperties": [
    {
      "label": "Base/compute.googleapis.com/InstanceSettings",
      "description": "Classifies a node as a Compute Instance Settings."
    }
  ],
  "edgeRules": [
    {
      "edgeType": "Observability/SENDS_TRAFFIC/Base/geminidataanalytics.googleapis.com/DataAgent:Base/apps.k8s.io/DaemonSet",
      "srcNodeType": "Base/geminidataanalytics.googleapis.com/DataAgent",
      "destNodeType": "Base/apps.k8s.io/DaemonSet"
    }
  ]
}

取得部分結構定義

您可以取得指定開始標籤指定跳躍次數內的網域結構定義部分。

這些操作說明中的範例指令會從 Base/Agent 節點開始取得部分結構定義,深度為 1,頁面大小為 5。

取得部分結構定義

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID
  • DOMAIN:要查詢的網域。SRE 網域包含所有支援的資料。

HTTP 方法和網址:

POST https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/domains/DOMAIN/schema:explore

JSON 要求主體:

{
  "startLabels": [
    "Base/Agent"
  ],
  "depth": 1,
  "pageSize": 5
}

請展開以下其中一個選項,以傳送要求:

在回應中,nodeTypes 和 edgeTypes 的順序一致,但 labelProperties 的順序可能因要求而異。

展開「回應」標題,即可查看回應範例。

執行查詢

執行查詢時,您會指定查詢模式,其中包含要搜尋的節點、邊緣和屬性。

查詢模式採用 AIP-160 篩選語法。如要瞭解查詢模式和查詢限制,請參閱「關於查詢」。這些操作說明假設您已閱讀查詢結構和限制資訊。

下列操作說明會使用範例查詢,找出指定專案中的所有 App Hub 服務和工作負載,包括已註冊 (Base/apphub.googleapis.com/Service、Base/apphub.googleapis.com/Workload) 和已探索 (Base/DiscoveredService、Base/DiscoveredWorkload) 的服務和工作負載。

指令會以 JSON 檔案指定查詢模式。在這些操作說明中,gcloud CLI 和 REST 要求使用的檔案略有不同。

  • 如果是 gcloud CLI,請將要查詢的網域指定為指令的參數。查詢模式檔案中未包含網域。
  • 如果是 REST 要求,請在要求的 JSON 內文中指定網域和查詢模式。在 topologyDomains 欄位中設定網域,並在 filter 物件下指定查詢模式。

gcloud

生成拓撲

使用下列任何指令資料之前,請先替換以下項目:

  • PROJECT_ID:專案 ID
  • DOMAIN:要查詢的網域。SRE 網域包含所有支援的資料。

將下列內容儲存至名為 request.json 的檔案:

{
  "startingNode": {
    "alias": "sw",
    "labelPropertiesPattern": {
      "labelMatcherExpr": "Base/apphub.googleapis.com/Service OR Base/apphub.googleapis.com/Workload OR Base/DiscoveredService OR Base/DiscoveredWorkload"
    }
  }
}

執行 gcloud app-topology resources-graph generate 指令:

Linux、macOS 或 Cloud Shell

gcloud app-topology resources-graph generate --domains=DOMAIN --project=PROJECT_ID --pattern-file=request.json --format=json

Windows (PowerShell)

gcloud app-topology resources-graph generate --domains=DOMAIN --project=PROJECT_ID --pattern-file=request.json --format=json

Windows (cmd.exe)

gcloud app-topology resources-graph generate --domains=DOMAIN --project=PROJECT_ID --pattern-file=request.json --format=json

以下範例回應摘錄內容顯示前 2 個節點。這些節點是 MCP 伺服器。Google MCP 伺服器的標籤為 Base/DiscoveredService,這是查詢模式中的其中一個標籤。

在輸出內容中,下列變數代表與您使用 PROJECT_ID 指定的專案相關聯的值:

  • PROJECT_NUMBER:指定專案的專案編號。
  • ORGANIZATION_NUMBER - 包含指定專案的 Google Cloud 機構的機構編號。
{
  "graph": {
    "nodes": [
      {
        "properties": {
          "project": "projects/PROJECT_NUMBER",
          "Base/location": "global",
          "createTime": "2026-08-13T15:14:53.477680Z",
          "Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
          "Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
          "organization": "organizations/ORGANIZATION_NUMBER"
        },
        "name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
        "labels": [
          "Base/MCPServer",
          "Base/DiscoveredService",
          "Base/Resource",
          "Base/agentregistry.googleapis.com/GoogleMcpServer"
        ],
        "context": {
          "type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
        }
      },
      {
        "properties": {
          "createTime": "2026-08-13T16:22:24.732600Z",
          "Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
          "Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
          "Base/location": "global",
          "organization": "organizations/ORGANIZATION_NUMBER",
          "project": "projects/PROJECT_NUMBER"
        },
        "name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
        "labels": [
          "Base/agentregistry.googleapis.com/GoogleMcpServer",
          "Base/Resource",
          "Base/DiscoveredService",
          "Base/MCPServer"
        ],
        "context": {
          "type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
        }
      }
    ]
  }
}

REST

生成拓撲

使用任何要求資料之前,請先修改下列項目的值:

  • PROJECT_ID:專案 ID
  • DOMAIN:要查詢的網域。SRE 網域包含所有支援的資料。

HTTP 方法和網址:

POST https://apptopology.googleapis.com/v1/projects/PROJECT_ID/locations/global/discoveredResourcesTopology:generate

JSON 要求主體:

{
  "topologyDomains": [
    "projects/PROJECT_ID/locations/global/domains/DOMAIN"
  ],
  "filter": {
    "startingNode": {
      "alias": "sw",
      "labelPropertiesPattern": {
        "labelMatcherExpr": "Base/apphub.googleapis.com/Service OR Base/apphub.googleapis.com/Workload OR Base/DiscoveredService OR Base/DiscoveredWorkload"
      }
    }
  }
}

請展開以下其中一個選項,以傳送要求:

以下範例回應摘錄內容顯示前 2 個節點。這些節點是 MCP 伺服器。Google MCP 伺服器的標籤為 Base/DiscoveredService,這是查詢模式中的其中一個標籤。

在輸出內容中,下列變數代表與您使用 PROJECT_ID 指定的專案相關聯的值:

  • PROJECT_NUMBER:指定專案的專案編號。
  • ORGANIZATION_NUMBER - 包含指定專案的 Google Cloud 機構的機構編號。
{
  "graph": {
    "nodes": [
      {
        "properties": {
          "project": "projects/PROJECT_NUMBER",
          "Base/location": "global",
          "createTime": "2026-08-13T15:14:53.477680Z",
          "Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
          "Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
          "organization": "organizations/ORGANIZATION_NUMBER"
        },
        "name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:storage",
        "labels": [
          "Base/MCPServer",
          "Base/DiscoveredService",
          "Base/Resource",
          "Base/agentregistry.googleapis.com/GoogleMcpServer"
        ],
        "context": {
          "type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
        }
      },
      {
        "properties": {
          "createTime": "2026-08-13T16:22:24.732600Z",
          "Base/resourceType": "agentregistry.googleapis.com/GoogleMcpServer",
          "Base/agentregistry/urn": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
          "Base/location": "global",
          "organization": "organizations/ORGANIZATION_NUMBER",
          "project": "projects/PROJECT_NUMBER"
        },
        "name": "urn:mcp:googleapis.com:projects:PROJECT_NUMBER:locations:global:pubsub",
        "labels": [
          "Base/agentregistry.googleapis.com/GoogleMcpServer",
          "Base/Resource",
          "Base/DiscoveredService",
          "Base/MCPServer"
        ],
        "context": {
          "type": "Base/agentregistry.googleapis.com/GoogleMcpServer"
        }
      }
    ]
  }
}

如需其他查詢模式範例,請參閱「查詢模式範例」。

查詢模式範例

請參考下列查詢模式範例,自行建構執行查詢的查詢模式。本節的所有範例都使用 JSON 格式。

具有執行個體群組、網路和磁碟的 VM

查詢執行個體群組中具有網路和磁碟的 Compute Engine 執行個體。

模式從 Base/compute.googleapis.com/Instance 開始,在頂層 neighbors 物件下有三個主要 edge 分支,用於定義下列條件:

  • 屬於代管執行個體群組的執行個體
  • 連線至網路的執行個體
  • 具備 Persistent Disk 的執行個體

由於分支機構會與 AND 合併,因此回應只會包含屬於代管執行個體群組,且同時具有網路和磁碟的執行個體。

{
  "startingNode": {
    "alias": "instance",
    "labelPropertiesPattern": {
      "labelMatcherExpr": "Base/compute.googleapis.com/Instance"
    }
  },
  "neighbors": [
    {
      "edge": {
        "direction": "FROM",
        "labelPropertiesPattern": {
          "labelMatcherExpr": "CONTAINS"
        }
      },
      "graph": {
        "startingNode": {
          "alias": "instance_group",
          "labelPropertiesPattern": {
            "labelMatcherExpr": "Base/compute.googleapis.com/InstanceGroup"
          }
        },
        "neighbors": [
          {
            "edge": {
              "direction": "FROM",
              "labelPropertiesPattern": {
                "labelMatcherExpr": "DEPENDS_ON"
              }
            },
            "graph": {
              "startingNode": {
                "alias": "instance_group_manager",
                "labelPropertiesPattern": {
                  "labelMatcherExpr": "Base/compute.googleapis.com/InstanceGroupManager"
                }
              }
            }
          }
        ]
      }
    },
    {
      "edge": {
        "direction": "TO",
        "labelPropertiesPattern": {
          "labelMatcherExpr": "DEPENDS_ON"
        }
      },
      "graph": {
        "startingNode": {
          "alias": "network",
          "labelPropertiesPattern": {
            "labelMatcherExpr": "Base/compute.googleapis.com/Network"
          }
        }
      }
    },
    {
      "edge": {
        "direction": "TO",
        "labelPropertiesPattern": {
          "labelMatcherExpr": "DEPENDS_ON"
        }
      },
      "graph": {
        "startingNode": {
          "alias": "disk",
          "labelPropertiesPattern": {
            "labelMatcherExpr": "Base/compute.googleapis.com/Disk"
          }
        }
      }
    }
  ]
}

代理資源

使用 Agent Registry 中的資訊查詢代理資源及其關係,包括代理、MCP 伺服器、端點和技能的資料。

{
  "startingNode": {
    "alias": "resource",
    "labelPropertiesPattern": {
      "labelMatcherExpr": "Base/Agent OR Base/MCPServer OR Base/agentregistry.googleapis.com/Skill OR Base/agentregistry.googleapis.com/SkillRevision OR Base/agentregistry.googleapis.com/AiApplication OR Base/agentregistry.googleapis.com/GoogleMcpServer OR Base/agentregistry.googleapis.com/McpEnablement OR Base/agentregistry.googleapis.com/Publisher OR Base/agentregistry.googleapis.com/Binding OR Base/agentregistry.googleapis.com/Service OR Base/aiplatform.googleapis.com/Endpoint"
    }
  }
}

App Topology 支援兩種端點:

  • Base/aiplatform.googleapis.com/Endpoint 是 Gemini Enterprise Agent Platform 模型端點。
  • Base/Endpoint 是代理的目標網址,也是代理儲存庫服務 (Base/agentregistry.googleapis.com/Service) 上的標籤。由於查詢模式中包含 Base/agentregistry.googleapis.com/Service,查詢回應結果中會包含代理端點。

代理流量

使用 Cloud Trace 的資料,查詢代理與其他代理或 MCP 伺服器之間的流量。每個邊緣都包含錯誤率和 P95 延遲時間資料。

{
  "startingNode": {
    "alias": "agent",
    "labelPropertiesPattern": {
      "labelMatcherExpr": "Base/Agent"
    }
  },
  "neighbors": [
    {
      "edge": {
        "direction": "ANY",
        "labelPropertiesPattern": {
          "labelMatcherExpr": "Observability/SENDS_TRAFFIC"
        }
      },
      "graph": {
        "startingNode": {
          "alias": "peer",
          "labelPropertiesPattern": {
            "labelMatcherExpr": "Base/Agent OR Base/MCPServer"
          }
        }
      }
    }
  ]
}

後續步驟