Implantar a Zona de Consumo Geoespacial
A Zona de Consumo Geoespacial (GCZ) da OSDU é um serviço que permite o gerenciamento aprimorado e a utilização de dados geoespaciais. O GCZ simplifica o tratamento de informações baseadas em localização. Ele abstrai as complexidades técnicas, permitindo que os 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 de Zona de Consumo Geoespacial (GCZ) integrado ao Gerenciador de Dados Azure para Energia (ADME).
Criar um registro de aplicativo no Microsoft Entra ID
Para implantar o GCZ, é necessário criar um registro de aplicativo no Microsoft Entra ID. O Registro de Aplicativo é usado para autenticar as APIs do GCZ no Gerenciador de Dados do Azure para Energia a fim de permitir a geração do cache dos dados geoespaciais.
Confira Criar um registro de aplicativo no Microsoft Entra ID para obter instruções sobre como criar um Registro de Aplicativo.
Conceda a permissão de Registro do Aplicativo para ler os dados relevantes no Gerenciador de Dados Azure para Energia. Confira Como adicionar membros a um grupo da OSDU para obter mais instruções.
Instalação
Há duas opções de implantação principais para o serviço GCZ:
- Serviço de Kubernetes do Azure (AKS): implante o serviço GCZ em um cluster do AKS. Essa opção de implantação é recomendada para ambientes de produção. Ele exige mais esforços de instalação, configuração e manutenção.
- Windows: implante o serviço GCZ em um Windows. Essa opção de implantação é recomendada para ambientes de desenvolvimento e teste.
Implantar Zona de Consumo Geoespacial (GCZ) no Serviço Azure Kubernetes (AKS)
Saiba como implantar a Zona de Consumo Geoespacial (GCZ) no Serviço Azure Kubernetes (AKS).
Pré-requisitos
- Assinatura do Azure. Se você não tiver uma assinatura do Azure, crie uma conta gratuita.
- Cluster de Kubernetes do Azure (AKS) com integração de rede virtual. Confira Criar um cluster do Serviço de Kubernetes do Azure (AKS) e Rede da Interface de Rede de Contêiner do Azure (CNI) para obter mais instruções.
- Azure Cloud Shell ou CLI do Azure, kubectl e CLI do Git.
Implantar o 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 pasta
geospatial
:cd geospatial/devops/azure/charts/geospatial
Definir 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
Criar o gráfico 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
Altere o tipo de serviço para
LoadBalancer
para os arquivos de configuração dos serviçosprovider
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
Confira o arquivo de configuração do transformador
application.yml
para garantir que os esquemas corretos estejam incluídos.nano ../transformer/application.yml
Confira o arquivo de configuração do provedor
koop-config.json
.nano ../provider/koop-config.json
Autenticar-se no cluster do Serviço de Kubernetes do Azure (AKS):
az aks get-credentials --resource-group $RESOURCE_GROUP --name $AKS_NAME --admin
Crie o namespace do AKS:
kubectl create namespace $NAMESPACE
Implantar dependências do HELM:
helm dependency build
Implantar o gráfico HELM do 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"
Verifique a implantação:
kubectl get pods -n $NAMESPACE
Agora você deve ver os pods dos serviços
ignite
,provider
etransformer
.Em seguida, anote os IPs Externos para os serviços
provider
etransformer
.kubectl get service -n $NAMESPACE
Esses IPs são usados para se conectar aos pontos de extremidade da API do GCZ.
Importante
Se você deseja atualizar os arquivos de configuração (por exemplo, application.yml
ou koop-config.json
), deve atualizar a configuração do AKS (configmap) e excluir os pods atuais dos serviços provider
e transformer
. 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 serão mantidas após a reinicialização do pod.
Implantar zona de consumo geoespacial (GCZ) em uma máquina virtual 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 instalar e configurar e requer menos manutenção.
Pré-requisitos
- Uma instância do Gerenciador de Dados do Azure para Energia. Se você não tiver uma instância do Gerenciador de Dados Azure para Energia, confira Criar uma instância do Gerenciador de Dados Azure para Energia.
- Uma máquina virtual do Windows. Se você não tiver uma máquina virtual do Windows, confira Criar uma máquina virtual do Windows no Azure. Também é possível usar seu computador local.
- Java JDK 17 instalado na máquina virtual do Windows. Se você não tiver o Java instalado, confira Instalar o Java no Windows.
- Node 18.19.1 (LTS) instalado na máquina virtual do Windows. Se você não tiver o Node instalado, confira Instalar Node.js e 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, confira Instalar o Python no Windows.
- Certifique-se de adicionar
pip
durante o processo de instalação. Se você esquecer de adicionarpip
, poderá instalá-lo manualmente.
- Certifique-se de adicionar
Implantar GCZ no Windows
Conecte-se a uma máquina virtual do Windows.
Baixe os seguintes arquivos do repositório GitLab da OSDU:
Abra o PowerShell como administrador e navegue até a pasta em que você baixou os arquivos.
Execute os seguintes comandos para extrair os arquivos:
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\
Configurar 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, confira a documentação do GitLab da OSDU.
Valide os arquivos de configuração do Provedor e do Transformador do GCZ abrindo os arquivos de configuração em um editor de texto e atualizando os valores, se necessário.
- Provedor:
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, certifique-se de que esses esquemas sejam representados em ambos os arquivos de configuração.
- Provedor:
(opcional) Instale as dependências do Python (necessárias apenas para a interpolação de logs de caixa).
pip install -r C:\gcz\gcz-transformer-core\src\main\resources\script\requirements.txt --no-index --find-links python-dependencies
Inicie o Transformador do GCZ.
C:\gcz\transformer\transformer.bat local
Crie o Provedor do GCZ.
cd C:\gcz\gcz-provider\gcz-provider-core npm install npm start
Por padrão, o provedor estou escutando em http://localhost:8083
e o transformador está escutando em http://localhost:8080
.
Publicar APIs do GCZ publicamente (opcional)
Se você quiser expor publicamente as APIs do GCZ, poderá 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, pois o serviço GCZ ainda não tem autenticação e autorização incorporadas. Por meio 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 do Gerenciamento de API do Azure, confira Criar uma instância do Gerenciamento de API do Azure.
- As APIs do GCZ estão implantadas e em execução.
Importante
A instância do Gerenciamento de API do Azure precisará ser injetada em uma rede virtual que seja roteável para o cluster do AKS para poder se comunicar com as APIs do GCZ.
Adicionar as APIs do GCZ ao Gerenciamento de API do Azure
Baixar as especificações de OpenAPI do GCZ
Baixe as duas especificações de OpenAPI em seu computador local.
Abra cada arquivo de especificação do OpenAPI em um editor de texto e substitua a seção
servers
pelos IPs correspondentes do balanceador de carga dos serviços do GCZ do AKS.servers: - url: "http://<GCZ-Service-LoadBalancer-IP>/ignite-provider"
Adicionar as APIs do GCZ ao Gerenciamento de API do Azure
Navegue até seu serviço de Gerenciamento de API do Azure no portal do Azure.
No painel de navegação à esquerda, selecione APIs.
Selecione + Adicionar API.
Selecione OpenAPI.
Selecione Selecionar um arquivo e carregue o arquivo
gcz-openapi-provider.yaml
.No campo do sufixo de URL da API, insira
ignite-provider
.Selecione Criar.
Repita as etapas para o arquivo
gcz-openapi-transformer.yaml
, mas usegcz/transformer/admin
como o sufixo de URL da API.
Configurar políticas
Em seguida, precisamos configurar as políticas para validar os Tokens Web JSON (JWT).
Você precisará das seguintes informações:
- Seu ID do locatário do Microsoft Entra ID.
- A ID do cliente do Gerenciador de Dados Azure para Energia (ou ID do cliente emissor de token, se separado).
Observação
Se você tiver vários registros de aplicativos emitindo tokens, poderá adicionar vários elementos <application-id>
ao elemento <client-application-ids>
.
Na API
Geospatial Consumption Zone - Provider
recém-criada, verifique se a opção Todas as operações está selecionada.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%
por sua ID do locatário do Microsoft Entra ID e%client-id%
pela ID do cliente do Gerenciador de Dados Azure para Energia.Selecione Salvar.
Repita as etapas da API de
Geospatial Consumption Zone - Transformer
.
Testar o serviço GCZ
Baixe a coleção de clientes da API do GitLab do OSDU e importe-a para o cliente de API desejado (Bruno, Postman etc.).
Adicione as seguintes variáveis de ambiente ao seu cliente de API:
PROVIDER_URL
: a URL para a API do Provedor do GCZ.AMBASSADOR_URL
: a URL para a API do Transformador do GCZ.access_token
: um token de acesso válido do ADME.
Para verificar se o GCZ está funcionando conforme o esperado, execute as chamadas à API na coleção.
Próximas etapas
Depois de ter uma implantação bem-sucedida do GCZ, você pode:
- Visualize seus dados de GCZ usando os WebApps do GCZ do GitLab da OSDU.
Importante
Os WebApps do GCZ estão atualmente em desenvolvimento e não dão suporte à autenticação. Recomendamos implantar os WebApps em uma rede privada e expô-los usando o Gateway de Aplicativo do Azure ou o Azure Front Door para habilitar a autenticação e a autorização.
Também pode ingerir dados na sua instância do Gerenciador de Dados do Azure para Energia:
Referências
- Para obter informações sobre a Zona de Consumo Geoespacial, confira GitLab da OSDU.