你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
部署地理空间消费区
OSDU 地理空间消费区(GCZ)是一项服务,可增强地理空间数据的管理和利用率。 GCZ 简化了基于位置的信息的处理。 它使技术复杂性不再抽象化,让软件应用程序能够访问地理空间数据,而无需处理复杂的细节。 通过提供现成的地图服务,GCZ 有助于与已启用 OSDU 的应用程序无缝集成。
本指南介绍如何部署与 Azure 能源数据管理器 (ADME) 集成的地理空间消费区 (GCZ) 服务。
在 Microsoft Entra ID 中创建应用注册
要部署 GCZ,需要在 Microsoft Entra ID 中创建应用注册。 应用注册用于使用 Azure Data Manager for Energy 对 GCZ API 进行身份验证,以便能够生成地理空间数据的缓存。
- 有关如何创建应用注册的说明,请参阅“在 Microsoft Entra ID 中创建应用注册”。
- 授予应用注册权限,以读取 Azure Data Manager for Energy 中的相关数据。 有关进一步说明,请参阅“如何将成员添加到 OSDU 组”。
安装
GCZ 服务有两个主要部署选项:
- Azure Kubernetes 服务 (AKS):在 AKS 群集上部署 GCZ 服务。 建议在生产环境中使用此部署选项。 设置、配置和维护时需要进行更多操作。
- Windows:在 Windows 上部署 GCZ 服务。 对于开发和测试环境,建议使用此部署选项。
在 Azure Kubernetes 服务 (AKS) 上部署地理空间消费区域 (GCZ)
了解如何在 Azure Kubernetes 服务 (AKS) 上部署地理空间消费区域 (GCZ)。
先决条件
- Azure 订阅。 如果没有 Azure 订阅,可以创建一个免费帐户。
- 具有虚拟网络集成的 Azure Kubernetes 群集 (AKS)。 有关进一步说明,请参阅“创建 Azure Kubernetes 服务 (AKS) 群集”和“Azure 容器网络接口 (CNI) 网络”。
- Azure Cloud Shell 或 Azure CLI、kubectl 和 Git CLI。
部署地理空间消费区 (GCZ) Helm 图表
将 GCZ 存储库克隆到本地环境:
git clone https://community.opengroup.org/osdu/platform/consumption/geospatial.git
将目录切换到
geospatial
文件夹:cd geospatial/devops/azure/charts/geospatial
为部署定义变量:
# Define the variables for Azure Data Manager for Energy AZURE_DNS_NAME="<instanceName>.energy.azure.com" # Example: demo.energy.azure.com DATA_PARTITION_ID="<dataPartitionId>" # Data partition ID. Example: opendes AZURE_TENANT_ID="<tenantId>" # Entra ID tenant ID. Example: aaaabbbb-0000-cccc-1111-dddd2222eeee AZURE_CLIENT_ID="<clientId>" # App Registration client ID. Example: 00001111-aaaa-2222-bbbb-3333cccc4444 AZURE_CLIENT_SECRET="<clientSecret>" # App Registration client secret. Example: Aa1Bb~2Cc3.-Dd4Ee5Ff6Gg7Hh8Ii9_Jj0Kk1Ll2 SCOPE="<scope>" # Scope of the App Registration. Example: 00001111-aaaa-2222-bbbb-3333cccc4444/.default CALLBACK_URL="http://localhost:8080" # Redirect URI of the ADME App Registration (from scope) ie: http://localhost:8080 PRIVATE_NETWORK="true" # Set to false if you want to expose the service publicly using a LoadBalancer. You can still expose the service using an Ingress Controller or Azure API Management at a later stage. # Define the variables for AKS AKS_NAME="<aksName>" # Name of the AKS cluster. Example: gcz-aks-cluster. RESOURCE_GROUP="<resourceGroupName>" # Name of the resource group. Example: gcz-rg. NAMESPACE="ignite" # Name of the AKS namespace you want to deploy to. We recommend to leave it default. GCZ_IGNITE_SERVICE="ignite-service" # Name of the ignite service. We recommend to leave it default. GCZ_IGNITE_NAMESPACE=$NAMESPACE CHART=osdu-gcz-service CHART_VERSION=1.27.0 VERSION=0.27.0
创建 Helm 图表:
cat > osdu_gcz_custom_values.yaml << EOF # This file contains the essential configs for the gcz on azure helm chart ################################################################################ # Specify the values for each service. # global: ignite: namespace: $NAMESPACE name: ignite image: name: gridgain/community tag: 8.8.43 configuration: gcz_ignite_namespace: "$GCZ_IGNITE_NAMESPACE" gcz_ignite_service: "$GCZ_IGNITE_SERVICE" provider: namespace: $NAMESPACE entitlementsGroupsURL: "https://$AZURE_DNS_NAME/api/entitlements/v2/groups" image: repository: community.opengroup.org:5555 name: osdu/platform/consumption/geospatial/geospatial-provider-master tag: latest service: type: LoadBalancer configuration: privateNetwork: "$PRIVATE_NETWORK" configLoaderJs: "../../../../gcz-provider/gcz-provider-core/config/configLoader.js" transformer: namespace: $NAMESPACE image: repository: community.opengroup.org:5555 name: osdu/platform/consumption/geospatial/geospatial-transformer-master tag: latest service: type: LoadBalancer configuration: privateNetwork: "$PRIVATE_NETWORK" datapartitionid: $DATA_PARTITION_ID clientId: $AZURE_CLIENT_ID tenantId: $AZURE_TENANT_ID callbackURL: $CALLBACK_URL scope: $SCOPE searchQueryURL: "https://$AZURE_DNS_NAME/api/search/v2/query" searchCursorURL: "https://$AZURE_DNS_NAME/api/search/v2/query_with_cursor" schemaURL: "https://$AZURE_DNS_NAME/api/schema-service/v1/schema" entitlementsURL: "https://$AZURE_DNS_NAME/api/entitlements/v2" fileRetrievalURL: "https://$AZURE_DNS_NAME/api/dataset/v1/retrievalInstructions" crsconvertorURL: "https://$AZURE_DNS_NAME/api/crs/converter/v3/convertTrajectory" storageURL: "https://$AZURE_DNS_NAME/api/storage/v2/records" clientSecret: $(echo "$AZURE_CLIENT_SECRET" | base64) gcz_ignite_namespace: "$GCZ_IGNITE_NAMESPACE" gcz_ignite_service: "$GCZ_IGNITE_SERVICE" EOF
将
provider
和transformer
服务配置文件的服务类型更改为LoadBalancer
。cat > ../provider/templates/service.yaml << EOF apiVersion: v1 kind: Service metadata: name: gcz-provider namespace: {{ $.Values.global.provider.namespace }} annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "{{ $.Values.global.provider.configuration.privateNetwork }}" spec: selector: app: provider ports: - port: 80 protocol: TCP targetPort: 8083 type: {{ $.Values.global.provider.service.type }} EOF cat > ../transformer/templates/service.yaml << EOF apiVersion: v1 kind: Service metadata: name: gcz-transformer namespace: {{ $.Values.global.transformer.namespace }} annotations: service.beta.kubernetes.io/azure-load-balancer-internal: "{{ $.Values.global.transformer.configuration.privateNetwork }}" spec: selector: app: transformer ports: - port: 80 protocol: TCP targetPort: 8080 type: {{ $.Values.global.transformer.service.type }} EOF
查看转换器配置文件
application.yml
,以确保包含正确的架构。nano ../transformer/application.yml
查看提供程序配置文件
koop-config.json
。nano ../provider/koop-config.json
向 Azure Kubernetes 服务 (AKS) 群集进行身份验证:
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME --admin
创建 AKS 命名空间:
kubectl create namespace $NAMESPACE
部署 HELM 依赖项:
helm dependency build
部署 GCZ HELM 图表:
helm upgrade -i $CHART . -n $NAMESPACE -f osdu_gcz_custom_values.yaml
验证部署:
kubectl get pods -n $NAMESPACE
现在,你应会看到
ignite
、provider
和transformer
服务的 Pod。接下来,请记下
provider
和transformer
服务的外部 IP。kubectl get service -n $NAMESPACE
这些 IP 用于连接到 GCZ API 终结点。
重要
如果要更新配置文件(例如 application.yml
或 koop-config.json
),则必须更新 AKS 配置 (configmap),然后删除 provider
和 transformer
服务的现有 Pod。 将使用新配置重新创建 Pod。 如果使用 GCZ API 更改配置,则 Pod 重启后不会保留更改。
在 Windows 虚拟机上部署地理空间消耗区域 (GCZ)
了解如何在 Windows 上部署地理空间消费区域 (GCZ)。 建议将此部署选项用于开发和测试环境,因为它更易于设置和配置,并且需要的维护更少。
先决条件
- Azure Data Manager for Energy 实例。 如果没有 Azure Data Manager for Energy 实例,请参阅“创建 Azure Data Manager for Energy 实例。
- Windows 虚拟机。 如果没有 Windows 虚拟机,请参阅“在 Azure 在创建 Windows 虚拟机”。 也可以使用本地计算机。
- Windows 虚拟机上安装的 Java JDK 17。 如果未安装 Java,请参阅“在 Windows 上安装 Java。
- Windows 虚拟机上安装的 Node 18.19.1 (LTS)。 如果未安装 Node,请参阅“在 Windows 上安装 Node.js 和 npm。
- Windows 虚拟机上安装的 Python 3.11.4 或更新版本。 如果未安装 Python,请参阅“在 Windows 上安装 Python”。
- 确保在安装过程中添加
pip
。 如果忘记添加pip
,可以手动安装它。
- 确保在安装过程中添加
在 Windows 上部署 GCZ
连接到 Windows 虚拟机。
从 OSDU GitLab 存储库下载以下文件:
以管理员身份打开 Powershell 并导航到下载代码的目录。
运行以下命令以提取文件:
Expand-Archive -Path .\GCZ_PROVIDER.zip -DestinationPath C:\gcz\ Expand-Archive -Path .\GCZ_TRANSFORMER.zip -DestinationPath C:\gcz\ Expand-Archive -Path .\GCZ_PYTHON_DEPENDENCIES.zip -DestinationPath C:\gcz\
配置环境变量:
$ADME_HOSTNAME = "<adme-hostname>" # ADME Hostname, e.g. "https://contoso.energy.azure.com" $GCZ_DATA_PARTITION_ID = "<data-partition-id>" # ADME Data Partition ID, e.g. "opendes" $GCZ_QUERY_URL = "$ADME_HOSTNAME/api/search/v2/query" # ADME Query Endpoint $GCZ_QUERY_CURSOR_URL = "$ADME_HOSTNAME/api/search/v2/query_with_cursor" # ADME Query with Cursor Endpoint $GCZ_SCHEMA_URL = "$ADME_HOSTNAME/api/schema-service/v1/schema" # ADME Schema Endpoint $GCZ_ENTITLEMENT_SERVICE_URL = "$ADME_HOSTNAME/api/entitlements/v2" # ADME Entitlement Service Endpoint $GCZ_FILE_RETRIEVAL_URL = "$ADME_HOSTNAME/api/dataset/v1/retrievalInstructions" # ADME File Retrieval Endpoint $GCZ_CONVERT_TRAJECTORY_URL = "$ADME_HOSTNAME/api/crs/converter/v3/convertTrajectory" # ADME Convert Trajectory Endpoint $GCZ_STORAGE_URL = "$ADME_HOSTNAME/api/storage/v2/records/" # ADME Storage Endpoint
有关更多环境变量,请参阅 OSDU GitLab 文档。
通过在文本编辑器中打开配置文件并根据需要更新值来验证 GCZ 提供程序和转换器的配置文件。
- 提供程序:
C:\gcz\gcz-provider\gcz-provider-core\config\koop-config.json
- 转换器:
C:\gcz\gcz-transformer-core\config\application.yml
重要
如果对配置文件中的架构进行更改,则必须确保在这两个配置文件中都表示了这些架构。
- 提供程序:
(可选)安装 Python 依赖项(仅适用于 Well 日志内插)。
pip install -r C:\gcz\gcz-transformer-core\src\main\resources\script\requirements.txt --no-index --find-links python-dependencies
启动 GCZ 转换器。
C:\gcz\transformer\transformer.bat local
生成 GCZ 提供程序。
cd C:\gcz\gcz-provider\gcz-provider-core npm install npm start
默认情况下,提供程序在 http://localhost:8083
上侦听,转换器在 http://localhost:8080
上侦听。
公开发布 GCZ API(可选)
如果要公开 GCZ API,可以使用 Azure API Management (APIM)。 Azure API Management 允许我们安全地向 Internet 公开 GCZ 服务,因为 GCZ 服务尚未内置身份验证和授权。 通过 APIM,我们可以添加策略来保护、监视和管理 API。
先决条件
- 一个 Azure API 管理实例。 如果没有 Azure API Management 实例,请参阅“创建 Azure API Management 实例。
- GCZ API 已部署并运行。
重要
需要将 Azure API Management 实例注入到可路由到 AKS 群集的虚拟网络中,以便能够与 GCZ API 通信。
将 GCZ API 添加到 Azure API Management
下载 GCZ OpenAPI 规范
将两个 OpenAPI 规范下载到本地计算机。
在文本编辑器中打开每个 OpenAPI 规范文件,并将
servers
部分替换为 AKS GCZ 服务负载均衡器的相应 IP。servers: - url: "http://<GCZ-Service-LoadBalancer-IP>/ignite-provider"
将 GCZ API 添加到 Azure API Management
在 Azure 门户中导航到自己的 Azure API Management 服务。
在左侧导航窗格中,选择“API”。
选择“+ 添加 API”。
选择 OpenAPI。
选择“选择文件”并上传
gcz-openapi-provider.yaml
文件。在“API URL 后缀”字段中,输入
ignite-provider
。选择创建。
重复
gcz-openapi-transformer.yaml
文件的步骤,但使用gcz/transformer/admin
作为“API URL 后缀”。
配置策略
接下来,我们需要配置策略来验证 JSON Web 令牌 (JWT)。
需要以下信息:
- 您的 Microsoft Entra ID 租户 ID。
- Azure Data Manager for Energy 客户端 ID(或令牌颁发客户端 ID(如果是单独的))。
注意
如果有多个应用注册颁发令牌,则可以将多个 <application-id>
元素添加到 <client-application-ids>
元素。
在新创建的
Geospatial Consumption Zone - Provider
API 中,请确保选中“所有操作”。在“入站处理”下,选择“...”,然后选择“代码编辑器”。
在编辑器中粘贴以下策略定义:
<policies> <!-- Throttle, authorize, validate, cache, or transform the requests --> <inbound> <base /> <validate-azure-ad-token tenant-id="%tenant-id%" failed-validation-httpcode="401"> <client-application-ids> <application-id>%client-id%</application-id> </client-application-ids> </inbound> <!-- Control if and how the requests are forwarded to services --> <backend> <base /> </backend> <!-- Customize the responses --> <outbound> <base /> </outbound> <!-- Handle exceptions and customize error responses --> <on-error> <base /> </on-error> </policies>
将
%tenant-id%
替换为 Microsoft Entra ID 租户 ID,并将%client-id%
替换为 Azure Data Manager for Energy 客户端 ID。选择“保存”。
重复
Geospatial Consumption Zone - Transformer
API 的相关步骤。
测试 GCZ 服务
从 OSDU GitLab 下载 API 客户端集合,并将其导入到所选 API 客户端(例如 Bruno、Postman)中。
将以下环境变量添加到 API 客户端:
PROVIDER_URL
- GCZ 提供程序 API 的 URL。AMBASSADOR_URL
- GCZ 转换器 API 的 URL。access_token
- 有效的 ADME 访问令牌。
若要验证 GCZ 是否按预期工作,请在集合中运行 API 调用。
后续步骤
这样就可以在成功部署 GCZ 后执行以下操作:
- 使用来自 OSDU GitLab 的 GCZ WebApps 可视化 GCZ 数据。
重要
GCZ WebApps 目前正在开发中,不支持身份验证。 建议在专用网络中部署 WebApps,并使用 Azure 应用程序网关或 Azure Front Door 公开 WebApps 以启用身份验证和授权功能。
还可以将数据引入 Azure Data Manager for Energy 实例:
参考
- 有关地理空间消费区域的信息,请参阅 OSDU GitLab。