Condividi tramite


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.

  1. Per istruzioni su come creare una registrazione dell'app, vedere Creare una registrazione dell'app in Microsoft Entra ID.

  2. 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

Distribuire il grafico HELM di Geospatial Consumption Zone (GCZ)

  1. Clonare il repository GCZ nell'ambiente locale:

    git clone https://community.opengroup.org/osdu/platform/consumption/geospatial.git
    
  2. Cambiare directory nella cartella geospatial:

    cd geospatial/devops/azure/charts/geospatial
    
  3. 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
    
  4. 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
    
  5. Modificare il tipo di servizio in LoadBalancer per i file di configurazione dei servizi provider e transformer.

    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
    
  6. Esaminare il file application.yml di configurazione del trasformatore per assicurarsi che siano inclusi gli schemi corretti.

    nano ../transformer/application.yml
    
  7. Esaminare il file koop-config.jsondi configurazione del provider .

    nano ../provider/koop-config.json
    
  8. Eseguire l'autenticazione nel cluster del servizio Azure Kubernetes (AKS):

    az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME --admin
    
  9. Creare uno spazio dei nomi del servizio Azure Kubernetes:

    kubectl create namespace $NAMESPACE
    
  10. Distribuire le dipendenze HELM:

    helm dependency build
    
  11. 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"
    
  12. Verificare la distribuzione:

    kubectl get pods -n $NAMESPACE
    

    A questo punto, verranno visualizzati i pod per i servizi ignite, provider e transformer.

  13. Prendere nota degli indirizzi IP esterni per i servizi provider e transformer.

    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

Distribuire GCZ in Windows

  1. Connettersi alla macchina virtuale Windows.

  2. Scaricare i file seguenti dal repository GitLab OSDU:

    1. Provider GCZ
    2. Transformer GCZ
    3. Dipendenze Python
  3. Aprire PowerShell come amministratore e passare alla cartella in cui sono stati scaricati i file.

  4. 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\
    
  5. 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.

  6. 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.

  7. (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
    
  8. Avviare il transformer GCZ.

    C:\gcz\transformer\transformer.bat local
    
  9. 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

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

  1. Scaricare le due specifiche OpenAPI nel computer locale.

  2. 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

  1. Passare al servizio Gestione API di Azure nel portale di Azure.

  2. Nel riquadro di spostamento a sinistra, selezionare API.

  3. Selezionare + Aggiungi API.

  4. Selezionare OpenAPI.

  5. Selezionare Seleziona un file e caricare il file gcz-openapi-provider.yaml.

  6. Nel campo Suffisso URL API, immettere ignite-provider.

  7. Seleziona Crea.

  8. Ripetere i passaggi per il file gcz-openapi-transformer.yaml, ma usare gcz/transformer/admin come Suffisso URL API.

    Aggiungere l'API GCZ a Gestione 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>.

  1. Nell'API Geospatial Consumption Zone - Provider appena creata, accertarsi che sia selezionato Tutte le operazioni.

  2. In Elaborazione in ingresso, selezionare ..., quindi Editor di codice.

  3. 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>
    
  4. 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.

  5. Seleziona Salva.

  6. Ripetere i passaggi per l'API Geospatial Consumption Zone - Transformer.

Test del servizio GCZ

  1. Scaricare la raccolta client API da OSDU GitLab e importarla nel client API preferito (ad esempio Bruno, Postman).

  2. 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.
  3. 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.