Distribuire Geospatial Consumption Zone
OSDU Geospatial Consumption Zone (GCZ) è un servizio che consente una gestione e utilizzo avanzati dei dati geospaziali. GCZ semplifica la gestione delle informazioni basate sulla posizione. Astrae le complessità tecniche, consentendo alle applicazioni software di accedere ai dati geospaziali senza dover gestire dettagli intricati. Fornendo servizi di mappe pronti all'uso, GCZ facilita l'integrazione senza problemi con applicazioni abilitate per OSDU.
Questa guida illustra come distribuire il servizio Geospatial Consumption Zone (GCZ) integrato con Azure Data Manager per l'energia (ADME).
Creare una registrazione dell'app in Microsoft Entra ID
Per distribuire GCZ, è necessario creare una registrazione dell'app in Microsoft Entra ID. La registrazione dell'app viene usata per autenticare le API GCZ con Azure Data Manager for Energy per poter generare la cache dei dati geospaziali.
Per istruzioni su come creare una registrazione dell'app, vedere Creare una registrazione dell'app in Microsoft Entra ID.
Concedere l'autorizzazione alla registrazione dell'app per leggere i dati pertinenti in Azure Data Manager per l'energia. Per altre istruzioni, vedere Come aggiungere membri a un gruppo OSDU.
Attrezzaggio
Esistono due opzioni di distribuzione principali per il servizio GCZ:
- Servizio Azure Kubernetes (AKS): distribuire il servizio GCZ in un cluster del servizio Azure Kubernetes. Questa opzione di distribuzione è consigliata per ambienti di produzione. Richiede più impegno per configurare, configurare e gestire.
- Windows: distribuire il servizio GCZ in Windows. Questa opzione di distribuzione consigliata per gli ambienti di sviluppo e test.
Distribuire Geospatial Consumption Zone (GCZ) nel servizio Azure Kubernetes (AKS)
Informazioni su come distribuire Geospatial Consumption Zone (GCZ) nel servizio Azure Kubernetes (AKS).
Prerequisiti
- Sottoscrizione di Azure. Se non hai una sottoscrizione di Azure, crea un account gratuito.
- Cluster di Azure Kubernetes (AKS) con integrazione della rete virtuale. Per altre istruzioni, vedere Creare un cluster del servizio Azure Kubernetes (AKS) e Rete Azure Container Networking Interface (CNI).
- Azure Cloud Shell o l’interfaccia della riga di comando di Azure, kubectl e l'interfaccia della riga di comando di Git.
Distribuire il grafico HELM di Geospatial Consumption Zone (GCZ)
Clonare il repository GCZ nell'ambiente locale:
git clone https://community.opengroup.org/osdu/platform/consumption/geospatial.git
Cambiare directory nella cartella
geospatial
:cd geospatial/devops/azure/charts/geospatial
Definire le variabili per la distribuzione:
# 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
Creare il grafico 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" 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
Modificare il tipo di servizio in
LoadBalancer
per i file di configurazione dei serviziprovider
etransformer
.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
Esaminare il file
application.yml
di configurazione del trasformatore per assicurarsi che siano inclusi gli schemi corretti.nano ../transformer/application.yml
Esaminare il file
koop-config.json
di configurazione del provider .nano ../provider/koop-config.json
Eseguire l'autenticazione nel cluster del servizio Azure Kubernetes (AKS):
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME --admin
Creare uno spazio dei nomi del servizio Azure Kubernetes:
kubectl create namespace $NAMESPACE
Distribuire le dipendenze HELM:
helm dependency build
Distribuire il grafico HELM GCZ:
helm upgrade -i $CHART . -n $NAMESPACE -f osdu_gcz_custom_values.yaml --set-file global.provider.configLoaderJs="../../../../gcz-provider/gcz-provider-core/config/configLoader.js"
Verificare la distribuzione:
kubectl get pods -n $NAMESPACE
A questo punto, verranno visualizzati i pod per i servizi
ignite
,provider
etransformer
.Prendere nota degli indirizzi IP esterni per i servizi
provider
etransformer
.kubectl get service -n $NAMESPACE
Questi IP vengono usati per connettersi agli endpoint dell'API GCZ.
Importante
Se si desidera aggiornare i file di configurazione , ad esempio application.yml
o koop-config.json
, è necessario aggiornare la configurazione del servizio Azure Kubernetes (configmap) e quindi eliminare i pod esistenti per i provider
servizi e transformer
. I pod verranno ricreati con la nuova configurazione. Se si modifica la configurazione usando le API GCZ, le modifiche non verranno mantenute dopo il riavvio di un pod.
Distribuire Geospatial Consumption Zone (GCZ) in una macchina virtuale Windows
Informazioni su come distribuire Geospatial Consumption Zone (GCZ) in Windows. Questa opzione di distribuzione è consigliata per ambienti di sviluppo e test, perché è più semplice da installare configurare e richiede meno manutenzione.
Prerequisiti
- Un’istanza di Azure Data Manager per l'energia. Se non si dispone di un'istanza di Azure Data Manager per l'energia, vedere Creare un'istanza di Azure Data Manager per l'energia.
- Una macchina virtuale Windows. Se non si dispone di una macchina virtuale Windows, vedere Creare una macchina virtuale Windows in Azure. È anche possibile usare il proprio computer locale.
- Java JDK 17 installato nella macchina virtuale Windows. Se Java non è installato, vedere Installare Java in Windows.
- Node 18.19.1 (LTS) installato nella macchina virtuale Windows. Se Node non è installato, vedere Installare Node.js e npm in Windows.
- Python 3.11.4 o versione successiva installata nella macchina virtuale Windows. Se Python non è installato, vedere Installare Python in Windows.
- Accertarsi di aggiungere
pip
durante il processo di installazione. Se si dimentica di aggiungerepip
, è possibile installarlo manualmente.
- Accertarsi di aggiungere
Distribuire GCZ in Windows
Connettersi alla macchina virtuale Windows.
Scaricare i file seguenti dal repository GitLab OSDU:
Aprire PowerShell come amministratore e passare alla cartella in cui sono stati scaricati i file.
Eseguire i comandi seguenti per estrarre i file:
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\
Configurare le variabili di ambiente:
$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
Per altre variabili di ambiente, vedere la documentazione di GitLab OSDU.
Convalidare i file di configurazione per il provider e il transformer GCZ aprendo i file di configurazione in un editor di testo e aggiornando i valori, se necessario.
- Provider:
C:\gcz\gcz-provider\gcz-provider-core\config\koop-config.json
- Transformer:
C:\gcz\gcz-transformer-core\config\application.yml
Importante
Se si apportano modifiche agli schemi nei file di configurazione, accertarsi che tali schemi siano rappresentati in entrambi i file di configurazione.
- Provider:
(facoltativo) Installare le dipendenze Python (obbligatorio solo per l'interpolazione Well Log).
pip install -r C:\gcz\gcz-transformer-core\src\main\resources\script\requirements.txt --no-index --find-links python-dependencies
Avviare il transformer GCZ.
C:\gcz\transformer\transformer.bat local
Creare il provider GCZ.
cd C:\gcz\gcz-provider\gcz-provider-core npm install npm start
Per impostazione predefinita, il provider è in ascolto su http://localhost:8083
e il transformer è in ascolto su http://localhost:8080
.
Pubblicare le API GCZ pubblicamente (facoltativo)
Per esporre pubblicamente le API GCZ, è possibile usare Gestione API di Azure (APIM). Gestione API di Azure consente di esporre in modo sicuro il servizio GCZ a Internet, perché il servizio GCZ non dispone ancora di autenticazione e autorizzazione integrate. Tramite Gestione API è possibile aggiungere criteri per proteggere, monitorare e gestire le API.
Prerequisiti
- Un'istanza di Gestione API. Se non si dispone di un'istanza di Gestione API di Azure, vedere Creare un'istanza di Gestione API di Azure.
- Le API GCZ vengono distribuite ed eseguite.
Importante
L'istanza di Gestione API di Azure dovrà essere inserita in una rete virtuale instradabile al cluster del servizio Azure Kubernetes per poter comunicare con le API GCZ.
Aggiungere le API GCZ a Gestione API di Azure
Scaricare le specifiche OpenAPI per GCZ
Scaricare le due specifiche OpenAPI nel computer locale.
Aprire ogni file di specifica OpenAPI in un editor di testo e sostituire la
servers
sezione con gli INDIRIZZI IP corrispondenti del servizio Di bilanciamento del carico del servizio Azure Kubernetes GCZ Services.servers: - url: "http://<GCZ-Service-LoadBalancer-IP>/ignite-provider"
Aggiungere le API GCZ a Gestione API di Azure
Passare al servizio Gestione API di Azure nel portale di Azure.
Nel riquadro di spostamento a sinistra, selezionare API.
Selezionare + Aggiungi API.
Selezionare OpenAPI.
Selezionare Seleziona un file e caricare il file
gcz-openapi-provider.yaml
.Nel campo Suffisso URL API, immettere
ignite-provider
.Seleziona Crea.
Ripetere i passaggi per il file
gcz-openapi-transformer.yaml
, ma usaregcz/transformer/admin
come Suffisso URL API.
Configura criteri
A questo punto, è necessario configurare i criteri per convalidare i token JSON Web (JWT).
Sono necessarie le informazioni seguenti:
- Il tuo ID tenant Microsoft Entra ID.
- L'ID client di Azure Data Manager per l'energia (o l'ID client emittente di token, se separato).
Nota
Se esistono più registrazioni di app che emettono token, è possibile aggiungere più elementi <application-id>
all'elemento <client-application-ids>
.
Nell'API
Geospatial Consumption Zone - Provider
appena creata, accertarsi che sia selezionato Tutte le operazioni.In Elaborazione in ingresso, selezionare ..., quindi Editor di codice.
Incollare la definizione dei criteri seguente nell'editor:
<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>
Sostituire
%tenant-id%
con l'ID tenant di Microsoft Entra ID e%client-id%
con l'ID client di Azure Data Manager per l'energia.Seleziona Salva.
Ripetere i passaggi per l'API
Geospatial Consumption Zone - Transformer
.
Test del servizio GCZ
Scaricare la raccolta client API da OSDU GitLab e importarla nel client API preferito (ad esempio Bruno, Postman).
Aggiungere le variabili di ambiente seguenti al client API:
PROVIDER_URL
: l’URL dell'API del provider GCZ.AMBASSADOR_URL
: l’URL dell'API del transformer GCZ.access_token
: un token di accesso ADME valido.
Per accertarsi che GCZ funzioni come previsto, eseguire le chiamate API nella raccolta.
Passaggi successivi
Dopo aver completato correttamente la distribuzione di GCZ, è possibile:
- Visualizzare i dati GCZ usando le WebApps GCZ da GitLab OSDU.
Importante
Le WebApps GCZ attualmente sono in fase di sviluppo e non supportano l'autenticazione. È consigliabile distribuire le WebApps in una rete privata ed esporle usando il gateway applicazione di Azure o Frontdoor di Azure per abilitare l'autenticazione e l'autorizzazione.
È anche possibile inserire dati nell'istanza di Azure Data Manager per l'energia:
Riferimenti
- Per informazioni su Geospatial Consumption Zone, vedere GitLab OSDU.