Implantar zona de consumo geoespacial
A Zona de Consumo Geoespacial OSDU (GCZ) é um serviço que permite uma melhor gestão e utilização de dados geoespaciais. O GCZ simplifica o tratamento de informações baseadas em localização. Ele abstrai complexidades técnicas, permitindo que aplicativos de software acessem dados geoespaciais sem a necessidade de lidar com detalhes intrincados. Ao fornecer serviços de mapas prontos para uso, o GCZ facilita a integração perfeita com aplicativos habilitados para OSDU.
Este guia mostra como implantar o serviço GCZ (Zona de Consumo Geoespacial) integrado ao Azure Data Manager for Energy (ADME).
Criar um registro de aplicativo no Microsoft Entra ID
Para implantar o GCZ, você precisa criar um Registro de Aplicativo no Microsoft Entra ID. O Registro de Aplicativo é usado para autenticar as APIs do GCZ com o Azure Data Manager for Energy para poder gerar o cache dos dados geoespaciais.
Consulte Criar um Registo de Aplicação no Microsoft Entra ID para obter instruções sobre como criar um Registo de Aplicação.
Conceda permissão ao Registro de Aplicativo para ler os dados relevantes no Azure Data Manager for Energy. Consulte Como adicionar membros a um grupo OSDU para obter mais instruções.
Configurar
Há duas opções principais de implantação para o serviço GCZ:
- Serviço Kubernetes do Azure (AKS): implante o serviço GCZ em um cluster AKS. Essa opção de implantação é recomendada para ambientes de produção. Requer mais esforço para configurar, configurar e manter.
- Windows: implante o serviço GCZ em um Windows. Esta opção de implantação é recomendada para ambientes de desenvolvimento e teste.
Implantar a Zona de Consumo Geoespacial (GCZ) no Serviço Kubernetes do Azure (AKS)
Saiba como implantar a Zona de Consumo Geoespacial (GCZ) no Serviço Kubernetes do Azure (AKS).
Pré-requisitos
- Subscrição do Azure. Se não tiver uma subscrição do Azure, crie uma conta gratuita.
- Azure Kubernetes Cluster (AKS) com integração de rede virtual. Consulte Criar um cluster do Serviço Kubernetes do Azure (AKS) e Rede CNI (Interface de Rede de Contêiner) do Azure para obter mais instruções.
- Azure Cloud Shell ou Azure CLI, kubectl e Git CLI.
Implantar gráfico HELM da zona de consumo geoespacial (GCZ)
Clone o repositório GCZ em seu ambiente local:
git clone https://community.opengroup.org/osdu/platform/consumption/geospatial.git
Altere o diretório para a
geospatial
pasta:cd geospatial/devops/azure/charts/geospatial
Defina variáveis para a implantação:
# 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
Crie o gráfico LEME:
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
Altere o tipo de serviço para
LoadBalancer
para os arquivos de configuração eprovider
transformer
serviços.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
Revise o arquivo
application.yml
de configuração do transformador para garantir que os esquemas corretos sejam incluídos.nano ../transformer/application.yml
Revise o arquivo
koop-config.json
de configuração do provedor .nano ../provider/koop-config.json
Autentique-se no cluster do Serviço Kubernetes do Azure (AKS):
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME --admin
Crie um namespace AKS:
kubectl create namespace $NAMESPACE
Implante dependências HELM:
helm dependency build
Implante o gráfico GCZ HELM:
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"
Verifique a implantação:
kubectl get pods -n $NAMESPACE
Agora você deve ver os pods para o
ignite
,provider
, etransformer
serviços.Em seguida, observe os IPs externos para o
provider
etransformer
serviços.kubectl get service -n $NAMESPACE
Esses IPs são usados para se conectar aos pontos de extremidade da API GCZ.
Importante
Se você deseja atualizar os arquivos de configuração (por exemplo, ou koop-config.json
), você deve atualizar a configuração do AKS (configmap) e, em seguida, application.yml
excluir os pods existentes para os provider
e transformer
serviços. Os pods serão recriados com a nova configuração. Se você alterar a configuração usando as APIs do GCZ, as alterações não persistirão após a reinicialização do pod.
Implantar a zona de consumo geoespacial (GCZ) em uma máquina virtual do Windows
Saiba como implantar a Zona de Consumo Geoespacial (GCZ) no Windows. Essa opção de implantação é recomendada para ambientes de desenvolvimento e teste, pois é mais fácil de configurar e requer menos manutenção.
Pré-requisitos
- Uma instância do Azure Data Manager for Energy. Se você não tiver uma instância do Azure Data Manager for Energy, consulte Criar uma instância do Azure Data Manager for Energy.
- Uma máquina virtual do Windows. Se você não tiver uma Máquina Virtual do Windows, consulte Criar uma Máquina Virtual do Windows no Azure. Também é possível usar sua máquina local.
- Java JDK 17 instalado na máquina virtual Windows. Se você não tiver o Java instalado, consulte Instalar o Java no Windows.
- Nó 18.19.1 (LTS) instalado na máquina virtual do Windows. Se você não tiver o Node instalado, consulte Instalar o Node.js e o npm no Windows.
- Python 3.11.4 ou mais recente instalado na máquina virtual do Windows. Se você não tiver o Python instalado, consulte Instalar o Python no Windows.
- Certifique-se de adicionar
pip
durante o processo de instalação. Se você esquecer de adicionarpip
, você pode instalá-lo manualmente.
- Certifique-se de adicionar
Implantar o GCZ no Windows
Conecte-se à sua máquina virtual do Windows.
Faça o download dos seguintes arquivos do repositório OSDU GitLab:
Abra o PowerShell como administrador e navegue até a pasta onde você baixou os arquivos.
Execute os seguintes comandos para extrair os ficheiros:
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\
Configure as variáveis de 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
Para obter mais variáveis de ambiente, consulte a documentação do OSDU GitLab.
Valide os arquivos de configuração para o GCZ Provider e o Transformer abrindo os arquivos de configuração em um editor de texto e atualizando os valores, se necessário.
- Fornecedor:
C:\gcz\gcz-provider\gcz-provider-core\config\koop-config.json
- Transformador:
C:\gcz\gcz-transformer-core\config\application.yml
Importante
Se você fizer alterações nos esquemas nos arquivos de configuração, deverá certificar-se de que esses esquemas sejam representados em ambos os arquivos de configuração.
- Fornecedor:
(facultativo) Instale Python Dependencies (necessário apenas para Well Log Interpolation).
pip install -r C:\gcz\gcz-transformer-core\src\main\resources\script\requirements.txt --no-index --find-links python-dependencies
Inicie o GCZ Transformer.
C:\gcz\transformer\transformer.bat local
Crie o provedor GCZ.
cd C:\gcz\gcz-provider\gcz-provider-core npm install npm start
Por padrão, o Provedor está escutando e http://localhost:8083
o Transformer está escutando .http://localhost:8080
Publicar APIs do GCZ publicamente (opcional)
Se quiser expor as APIs do GCZ publicamente, você pode usar o Gerenciamento de API do Azure (APIM). O Gerenciamento de API do Azure nos permite expor com segurança o serviço GCZ à Internet, já que o serviço GCZ ainda não tem autenticação e autorização incorporadas. Através do APIM podemos adicionar políticas para proteger, monitorar e gerenciar as APIs.
Pré-requisitos
- Uma instância de Gerenciamento de API do Azure. Se você não tiver uma instância de Gerenciamento de API do Azure, consulte Criar uma instância de Gerenciamento de API do Azure.
- As APIs do GCZ são implantadas e executadas.
Importante
A instância de Gerenciamento de API do Azure precisará ser injetada em uma rede virtual roteável para o cluster AKS para poder se comunicar com as APIs do GCZ.
Adicionar as APIs do GCZ ao Gerenciamento de API do Azure
Faça o download das especificações do GCZ OpenAPI
Transfira as duas especificações OpenAPI para o seu computador local.
Abra cada arquivo de especificação OpenAPI em um editor de texto e substitua a
servers
seção pelos IPs correspondentes do Balanceador de Carga dos Serviços AKS GCZ.servers: - url: "http://<GCZ-Service-LoadBalancer-IP>/ignite-provider"
Adicionar as APIs do GCZ ao Gerenciamento de API do Azure
Navegue até o serviço de Gerenciamento de API do Azure no portal do Azure.
No painel de navegação esquerdo, selecione APIs.
Selecione + Adicionar API.
Selecione OpenAPI.
Selecione Selecionar um arquivo e carregue o
gcz-openapi-provider.yaml
arquivo.No campo Sufixo URL da API, digite
ignite-provider
.Selecione Criar.
Repita as etapas para o
gcz-openapi-transformer.yaml
arquivo, mas usegcz/transformer/admin
como o sufixo de URL da API.
Configure políticas
Em seguida, precisamos configurar as políticas para validar os JSON Web Tokens (JWT).
Precisará das seguintes informações:
- Sua ID de locatário do Microsoft Entra ID.
- A ID do cliente do Azure Data Manager for Energy (ou ID do cliente emissor de tokens, se separado).
Nota
Se você tiver vários Registros de Aplicativo emitindo tokens, poderá adicionar vários <application-id>
elementos ao <client-application-ids>
elemento .
Na API recém-criada
Geospatial Consumption Zone - Provider
, verifique se Todas as operações estão selecionadas.Em Processamento de entrada, selecione ... e, em seguida, Editor de código.
Cole a seguinte definição de política no 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>
Substitua
%tenant-id%
pela sua ID de locatário do Microsoft Entra ID e%client-id%
pela ID do cliente do Azure Data Manager for Energy.Selecione Guardar.
Repita as etapas para a
Geospatial Consumption Zone - Transformer
API.
Testando o serviço GCZ
Faça o download da coleção de clientes de API do OSDU GitLab e importe-a para o seu cliente de API de escolha (ou seja, Bruno, Postman).
Adicione as seguintes variáveis de ambiente ao seu cliente de API:
PROVIDER_URL
- A URL para a API do provedor GCZ.AMBASSADOR_URL
- A URL para a API do GCZ Transformer.access_token
- Um token de acesso ADME válido.
Para verificar se o GCZ está funcionando conforme o esperado, execute as chamadas de API na coleção.
Próximos passos
Depois de ter uma implantação bem-sucedida do GCZ, você pode:
- Visualize seus dados GCZ usando os GCZ WebApps do GitLab OSDU.
Importante
Os GCZ WebApps estão atualmente em desenvolvimento e não suportam autenticação. Recomendamos implantar os WebApps em uma rede privada e expô-los usando o Gateway de Aplicativo do Azure ou a Porta da Frente do Azure para habilitar a autenticação e a autorização.
Você também pode ingerir dados em sua instância do Azure Data Manager for Energy:
- Tutorial sobre a ingestão do analisador CSV.
- Tutorial sobre ingestão de manifesto.
Referências
- Para obter informações sobre a Zona de Consumo Geoespacial, consulte OSDU GitLab.