Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Neste tutorial, você adicionará manualmente ativos OPC UA ao cluster das Operações do Azure IoT. Esses ativos publicam mensagens no Agente MQTT no seu cluster das Operações do Azure IoT. De modo geral, um usuário de OT (tecnologia operacional) realiza essas etapas.
Um ativo é um dispositivo físico ou uma entidade lógica que representam um dispositivo, um computador, um sistema ou um processo. Por exemplo, um ativo físico pode ser uma bomba, um motor, um tanque ou uma linha de produção. Um ativo lógico que você define pode ter propriedades, transmitir pontos de dados ou gerar eventos.
Servidores OPC UA são aplicativos de software que se comunicam com ativos. Marcas OPC UA são pontos de dados que os servidores OPC UA expõem. As marcas OPC UA podem fornecer dados históricos ou em tempo real sobre o status, o desempenho, a qualidade ou a condição dos ativos.
Neste tutorial, você vai usar a interface do usuário da Web da experiência de operações para criar seus ativos. Você também poderá usar a CLI do Azure para concluir algumas dessas tarefas.
Pré-requisitos
Uma instância das Operações de IoT do Azure com configurações seguras habilitadas implantadas em um cluster do Kubernetes. Para criar uma instância, use uma das seguintes opções para implantar as Operações do Azure IoT:
- Início rápido: Executar as Operações do Azure IoT no GitHub Codespaces com o K3s fornece instruções simples para implantar uma instância das Operações do Azure IoT que você pode usar para os tutoriais. Em seguida, para habilitar as configurações seguras, siga as etapas em Habilitar configurações seguras no Azure IoT Operations.
- Visão geral da implantação fornece instruções detalhadas para implantar uma instância das Operações do Azure IoT no Windows usando o Serviço de Kubernetes do Azure Edge Essentials ou o Ubuntu usando o K3s. Siga as etapas no artigo de implantação para uma implantação de configurações seguras.
Depois de habilitar as configurações seguras, o grupo de recursos que contém sua instância de Operações IoT do Azure também contém os seguintes recursos:
- Uma instância do Azure Key Vault para armazenar os segredos a serem sincronizados no cluster do Kubernetes.
- Uma identidade gerenciada atribuída pelo usuário que o Azure IoT Operations usa para acessar a instância do Azure Key Vault.
- Uma identidade gerenciada atribuída pelo usuário que os componentes do Azure IoT Operations, como fluxos de dados, podem usar para se conectar aos pontos de extremidade da nuvem, como os Hubs de Eventos do Azure.
Certifique-se de que, ao definir configurações seguras, você conceda permissões à sua conta de usuário para gerenciar segredos com a função de Diretor de Segredos do Key Vault .
Para entrar na interface do usuário da Web da experiência de operações, você precisa de uma conta do Microsoft Entra ID com, pelo menos, permissões de colaborador no grupo de recursos que contém sua instância do Kubernetes – Azure Arc. Para saber mais, veja a interface do usuário da Web da experiência de operações.
A menos que indicado de outra forma, execute os comandos do console neste tutorial em um ambiente do Bash ou do PowerShell.
Que problema vamos resolver?
Os dados que os servidores OPC UA expõem podem ter uma estrutura complexa e ser difíceis de entender. As Operações do Azure IoT fornecem uma forma de modelar ativos OPC UA na forma de marcas, eventos e propriedades. Essa modelagem facilita a compreensão dos dados e o uso deles em processos de downstream, como o Agente MQTT e os fluxos de dados.
O tutorial também explica como usar credenciais armazenadas no Azure Key Vault para se autenticar no servidor OPC UA simulado.
Implantar o simulador de PLC OPC
Este tutorial usa o simulador OPC PLC para gerar dados de exemplo. Para implantar o simulador OPC PLC:
Baixe o arquivo opc-plc-tutorial-deployment.yaml do repositório GitHub. Para baixar usando a linha de comando, execute o seguinte comando:
wget https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/refs/heads/main/samples/quickstarts/opc-plc-tutorial-deployment.yaml -O opc-plc-tutorial-deployment.yaml
Abra o
opc-plc-tutorial-deployment.yaml
arquivo baixado em um editor de texto e altere a senha do simulador. A senha é definida usando o--defaultpassword
parâmetro. Anote o valor da senha, você precisará dele mais tarde. Em seguida, salve suas alterações.Para implantar o simulador OPC PLC em seu cluster, execute o seguinte comando:
kubectl apply -f opc-plc-tutorial-deployment.yaml
O seguinte snippet mostra o arquivo YAML que você aplicou:
apiVersion: apps/v1
kind: Deployment
metadata:
name: opc-plc-000000
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/component: opcplc-000000
template:
metadata:
labels:
app.kubernetes.io/component: opcplc-000000
spec:
containers:
- name: opc-plc
image: mcr.microsoft.com/iotedge/opc-plc:latest
args:
- "--plchostname=opcplc-000000"
- "--portnum=50000"
- "--certdnsnames=opcplc-000000"
- "--unsecuretransport"
- "--showpnjsonph"
- "--slownodes=5"
- "--slowrate=10"
- "--fastnodes=10"
- "--fasttypelowerbound=212"
- "--fasttypeupperbound=273"
- "--fasttyperandomization=True"
- "--veryfastrate=1000"
- "--guidnodes=1"
- "--appcertstoretype=FlatDirectory"
- "--dontrejectunknownrevocationstatus"
- "--disableanonymousauth"
- "--defaultuser=contosouser"
- "--defaultpassword=contosouserpassword"
ports:
- containerPort: 50000
volumeMounts:
- name: opc-plc-default-application-cert
mountPath: /app/pki/own
- name: opc-plc-trust-list
mountPath: /app/pki/trusted
volumes:
- name: opc-plc-default-application-cert
secret:
secretName: opc-plc-default-application-cert
- name: opc-plc-trust-list
secret:
secretName: opc-plc-trust-list
serviceAccountName: opcplc-000000-service-account
---
apiVersion: v1
kind: Service
metadata:
name: opcplc-000000
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
type: ClusterIP
selector:
app.kubernetes.io/component: opcplc-000000
ports:
- port: 50000
protocol: TCP
targetPort: 50000
---
apiVersion: cert-manager.io/v1
kind: Issuer
metadata:
name: opc-plc-self-signed-issuer
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
selfSigned: {}
---
apiVersion: cert-manager.io/v1
kind: Certificate
metadata:
name: opc-plc-default-application-cert
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
spec:
secretName: opc-plc-default-application-cert
duration: 2160h # 90d
renewBefore: 360h # 15d
issuerRef:
name: opc-plc-self-signed-issuer
kind: Issuer
commonName: OpcPlc
dnsNames:
- opcplc-000000
- opcplc-000000.azure-iot-operations.svc.cluster.local
- opcplc-000000.azure-iot-operations
uris:
- urn:OpcPlc:opcplc-000000
usages:
- digital signature
- key encipherment
- data encipherment
- server auth
- client auth
privateKey:
algorithm: RSA
size: 2048
encodeUsagesInRequest: true
isCA: false
---
apiVersion: v1
kind: Secret
metadata:
name: opc-plc-trust-list
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
data: {}
---
apiVersion: v1
kind: ServiceAccount
metadata:
name: opcplc-000000-service-account
namespace: azure-iot-operations
labels:
app.kubernetes.io/component: opcplc-000000
---
apiVersion: rbac.authorization.k8s.io/v1
kind: Role
metadata:
name: opc-plc-000000-secret-access-role
namespace: azure-iot-operations
rules:
- apiGroups: [""]
resources: ["secrets"]
verbs: ["get", "patch"]
---
apiVersion: rbac.authorization.k8s.io/v1
kind: RoleBinding
metadata:
name: opc-plc-000000-secret-access-rolebinding
namespace: azure-iot-operations
subjects:
- kind: ServiceAccount
name: opcplc-000000-service-account
namespace: azure-iot-operations
roleRef:
kind: Role
name: opc-plc-000000-secret-access-role
apiGroup: rbac.authorization.k8s.io
Estabelecer confiança mútua
Antes que o simulador OPC PLC possa enviar dados para o conector para OPC UA, você precisa estabelecer uma relação de confiança mútua entre eles. Neste tutorial, o simulador OPC PLC e o conector para OPC UA usam certificados autoassinados para estabelecer a confiança mútua com o conector para OPC UA:
- O certificado da instância de aplicativo do simulador é armazenado no segredo do Kubernetes
opc-plc-default-application-cert
. - O certificado da instância de aplicativo do conector para OPC UA é armazenado no segredo do Kubernetes
aio-opc-opcuabroker-default-application-cert
.
Importante
Em um ambiente de produção, use certificados de instância de aplicativo de nível empresarial para estabelecer a confiança mútua. Para saber mais, consulte Configurar um certificado de instância de aplicativo de nível empresarial.
Adicionar o certificado do conector à lista de confiança do simulador
Cada servidor OPC UA tem seu próprio mecanismo para gerenciar a lista de confiança. Para adicionar o certificado do conector à lista de confiança do simulador, execute os seguintes comandos:
cert=$(kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d)
data=$(kubectl create secret generic temp --from-literal=opcuabroker.crt="$cert" --dry-run=client -o jsonpath='{.data}')
kubectl patch secret opc-plc-trust-list -n azure-iot-operations -p "{\"data\": $data}"
$cert = kubectl -n azure-iot-operations get secret aio-opc-opcuabroker-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) }
$data = kubectl create secret generic temp --from-literal=opcuabroker.crt="$cert" --dry-run=client -o jsonpath='{.data}'
kubectl patch secret opc-plc-trust-list -n azure-iot-operations -p "{""data"": $data}"
Adicionar o certificado do simulador à lista de confiança do conector
Cada tipo de servidor OPC UA tem seu próprio mecanismo para gerenciar seu certificado de instância de aplicativo. Para baixar o certificado do simulador em um arquivo chamado opcplc-000000.crt
, execute o seguinte comando:
kubectl -n azure-iot-operations get secret opc-plc-default-application-cert -o jsonpath='{.data.tls\.crt}' | base64 -d > opcplc-000000.crt
kubectl -n azure-iot-operations get secret opc-plc-default-application-cert -o jsonpath='{.data.tls\.crt}' | %{ [Text.Encoding]::UTF8.GetString([Convert]::FromBase64String($_)) } > opcplc-000000.crt
Para adicionar o certificado do simulador à lista de confiança do conector:
Acesse a interface do usuário da Web da experiência de operações e entre com suas credenciais do Microsoft Entra ID.
Selecione seu site. Se você está trabalhando com uma nova implantação, ainda não há nenhum site. Você pode encontrar o cluster criado anteriormente selecionando Visualizar instâncias não atribuídas. Na experiência de operações, uma instância representa um cluster o local em que você implantou as Operações do Azure IoT.
Selecione a instância em que você implantou as Operações de IoT do Azure:
Dica
Caso você não veja nenhuma instância, talvez não esteja no locatário correto do Microsoft Entra ID. Altere o locatário no menu superior direito na experiência de operações.
Selecione Pontos de extremidade de ativos e Gerenciar certificados e segredos:
Na página Certificados, selecione Lista de confiança e, em seguida, Adicione novo certificado:
Selecione Carregar certificado e escolha o
opcplc-000000.crt
arquivo que você baixou anteriormente. Em seguida, selecione Carregar:Selecione Aplicar.
O certificado da instância de aplicativo do simulador agora está na lista de certificados confiáveis do conector para OPC UA.
Adicionar um ponto de extremidade de ativo
Nesta etapa, você usará a experiência de operações para adicionar um ponto de extremidade de ativo que permite que você se conecte ao simulador do OPC PLC. Para adicionar um ponto de extremidade de ativo:
Selecione Pontos de extremidade de ativos e, em seguida, Criar um ponto de extremidade de ativo:
Insira as seguintes informações do ponto de extremidade:
Campo Valor Nome do ponto de extremidade de ativo opc-ua-connector-0
URL do servidor OPC UA opc.tcp://opcplc-000000:50000
Modo de autenticação do usuário Username password
Nome do segredo sincronizado plc-credentials
Neste tutorial, você adiciona novos segredos à instância do Cofre de Chaves do Azure por meio da interface web da experiência operacional. Os segredos são sincronizados automaticamente com o cluster do Kubernetes:
Para adicionar uma referência de nome de usuário, selecione Adicionar referência e , em seguida, Criar nova.
Insira
plcusername
como o nome do segredo econtosouser
como o valor do segredo. Em seguida, selecione Aplicar.Para adicionar uma referência de senha, selecione Adicionar referência e , em seguida, Criar nova.
Insira
plcpassword
como o nome do segredo e a senha que você adicionou ao arquivo opc-plc-deployment.yaml como o valor secreto. Em seguida, selecione Aplicar.Para salvar a definição do ponto de extremidade do ativo, selecione Criar.
Essa configuração implanta um novo ponto de extremidade de ativo chamado opc-ua-connector-0
no cluster. Você pode exibir o ponto de extremidade de ativo no portal do Azure ou pode usar kubectl
para exibir os pontos de extremidade de ativo no cluster do Kubernetes:
kubectl get assetendpointprofile -n azure-iot-operations
Você pode ver os segredos plcusername
e plcpassword
na instância do Azure Key Vault no seu grupo de recursos. Os segredos são sincronizados com o cluster do Kubernetes, onde você pode vê-los usando o kubectl get secret plc-credentials -n azure-iot-operations
comando. Você também pode ver os segredos na experiência de operações na página Gerenciar segredos sincronizados .
Gerenciar seus ativos
Depois de selecionar a instância na experiência de operações, você verá a lista disponível de ativos na página Ativos. Se ainda não houver nenhum ativo, essa lista estará vazia:
Criar um ativo
Para criar um ativo, selecione Criar ativo. Em seguida, insira as seguintes informações do ativo:
Campo | Valor |
---|---|
Ponto de extremidade de ativo | opc-ua-connector-0 |
Nome do ativo | thermostat |
Descrição | A simulated thermostat asset |
Tópico MQTT padrão | azure-iot-operations/data/thermostat |
Remova as propriedades personalizadas existentes e adicione as propriedades personalizadas a seguir. Tenha cuidado para usar os nomes de propriedade exatos, pois o modelo do Power BI os consulta em um tutorial posterior:
Nome da propriedade | Detalhes da propriedade |
---|---|
lote | 102 |
cliente | Contoso |
equipamento | Código clichê |
isSpare | verdadeiro |
local | Seattle |
Selecione Avançar para ir para a página Adicionar marcas.
Criar marcas OPC UA
Adicione duas marcas OPC UA à página Adicionar marcas. Para adicionar cada marca, selecione Adicionar marca ou CSV e, em seguida, selecione Adicionar marca. Insira os detalhes da marca mostrados na seguinte tabela:
ID do nó | Nome da marca | Modo de observabilidade |
---|---|---|
ns=3; s=SpikeData | temperatura | Nenhum |
Aqui, a ID do nó é específica para o simulador de OPC UA. O nó gera valores aleatórios dentro de um intervalo especificado e também tem picos intermitentes.
O Modo de observabilidade é um dos seguintes valores: None
, Gauge
, Counter
, Histogram
ou Log
.
Você pode selecionar Gerenciar configurações padrão para alterar o intervalo de amostragem padrão e o tamanho da fila para cada marca.
Selecione Avançar para ir para a página Adicionar eventos e, em seguida, Avançar para ir para a página Revisão.
Revisão
Revise os detalhes do ativo e da marca e faça os ajustes necessários antes de selecionar Criar:
Essa configuração implanta um novo ativo chamado thermostat
no cluster. Você pode exibir seus ativos em seu grupo de recursos no portal do Azure. Você também pode usar kubectl
para exibir os ativos localmente em seu cluster:
kubectl get assets -n azure-iot-operations
Exibir recursos no portal do Azure
Para exibir o ponto de extremidade de ativo e o ativo que você criou no portal do Azure, acesse o grupo de recursos que contém sua instância de Operações de IoT do Azure. Você pode ver o ativo termostato no grupo de recursos de Operações de IoT do Azure. Se você selecionar Mostrar tipos ocultos, também poderá ver o ponto de extremidade do ativo:
O portal permite que você exiba os detalhes do ativo. Selecione Exibição JSON para obter mais detalhes:
Verificar se os dados estão fluindo
Verifique se os dados estão fluindo para o Agente MQTT usando a ferramenta mosquitto_sub. Neste exemplo, execute a ferramenta mosquitto_sub dentro do cluster do Kubernetes:
Execute o seguinte comando para implantar um pod que inclua as ferramentas mosquitto_pub e mosquitto_sub que são úteis para interagir com o Agente MQTT no cluster:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yaml
O seguinte snippet mostra o arquivo YAML que você aplicou:
# Important: do not use in production environments # Create a service account apiVersion: v1 kind: ServiceAccount metadata: name: mqtt-client namespace: azure-iot-operations --- # Creates a pod with mosquitto-clients and mqttui utilities in your cluster apiVersion: v1 kind: Pod metadata: name: mqtt-client # The namespace must match the IoT MQ BrokerListener's namespace # Otherwise use the long hostname: aio-broker.azure-iot-operations.svc.cluster.local namespace: azure-iot-operations spec: # Use the "mqtt-client" service account which comes with default deployment # Otherwise create it with `kubectl create serviceaccount mqtt-client -n azure-iot-operations` serviceAccountName: mqtt-client containers: # Install mosquitto and mqttui utilities on Alpine linux - image: alpine name: mqtt-client command: ["sh", "-c"] args: ["apk add mosquitto-clients mqttui && sleep infinity"] resources: limits: cpu: 500m memory: 200Mi requests: cpu: 100m memory: 100Mi volumeMounts: - name: broker-sat mountPath: /var/run/secrets/tokens - name: trust-bundle mountPath: /var/run/certs volumes: - name: broker-sat projected: sources: - serviceAccountToken: path: broker-sat audience: aio-internal # Must match audience in BrokerAuthentication expirationSeconds: 86400 - name: trust-bundle configMap: name: azure-iot-operations-aio-ca-trust-bundle # Default root CA cert
Atenção
Essa configuração não é segura. Não use essa configuração em um ambiente de produção.
Quando o pod mqtt-client estiver em execução, execute o seguinte comando para criar um ambiente de shell no pod que você criou:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- sh
No shell do Bash no pod mqtt-client, execute o seguinte comando para se conectar ao Agente MQTT usando a ferramenta mosquitto_sub inscrita no tópico
data/thermostat
:mosquitto_sub --host aio-broker --port 18883 --topic "azure-iot-operations/data/#" -v --debug --cafile /var/run/certs/ca.crt -D CONNECT authentication-method 'K8S-SAT' -D CONNECT authentication-data $(cat /var/run/secrets/tokens/broker-sat)
Esse comando continua a ser executado e exibe mensagens à medida que chegam ao tópico
data/thermostat
até que você pressione Ctrl+C para interrompê-lo. Para sair do ambiente de shell, digiteexit
.
Para verificar se o ativo de termostato que você adicionou está publicando dados, exiba a telemetria no tópico azure-iot-operations/data
:
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (92 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:44.5030912Z","Value":48.17536741017152}}
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (90 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:45.50333Z","Value":98.22872507286887}}
Client $server-generated/0000aaaa-11bb-cccc-dd22-eeeeee333333 received PUBLISH (d0, q0, r0, m0, 'azure-iot-operations/data/thermostat', ... (92 bytes))
azure-iot-operations/data/thermostat {"temperature":{"SourceTimestamp":"2025-02-14T11:27:46.503381Z","Value":12.533323356430426}}
Se não houver nenhum fluxo de dados, reinicie o pod aio-opc-opc.tcp-1
:
Localize o nome do seu pod
aio-opc-opc.tcp-1
usando o seguinte comando:kubectl get pods -n azure-iot-operations
O nome do pod é semelhante a
aio-opc-opc.tcp-1-849dd78866-vhmz6
.Reinicie o pod
aio-opc-opc.tcp-1
usando um comando semelhante ao exemplo a seguir. Use o nome do podaio-opc-opc.tcp-1
da etapa anterior:kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
As marcas de exemplo que você adicionou no tutorial anterior geram mensagens do seu ativo semelhantes aos seguintes exemplos:
{
"temperature":{
"Value":24.86898871648548,
"SourceTimestamp":"2025-04-25T14:50:07.195274Z"
}
}
Como resolvemos o problema?
Neste tutorial, você adicionou um ponto de extremidade de ativo e definiu um ativo e marcas. Os ativos e as marcas modelam dados do servidor OPC UA para facilitar o uso dos dados em um Agente MQTT e em outros processos downstream.
Você usou credenciais armazenadas no Azure Key Vault para autenticar no servidor OPC UA. Essa abordagem é mais segura do que inserir credenciais fixas na definição de seu ativo.
Use o ativo de termostato que você definiu no próximo tutorial.
Limpar recursos
Se você continuar para o próximo tutorial, mantenha todos os seus recursos.
Se você quiser remover a implantação das Operações do Azure IoT, mas quiser manter o seu cluster, use o comando az iot ops delete:
az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Se você quiser excluir todos os recursos criados para este início rápido, exclua o cluster do Kubernetes no qual você implantou as Operações do Azure IoT e remova o grupo de recursos do Azure que continha o cluster.
Se você usou o Codespaces para esses inícios rápidos, exclua seu codespace do GitHub.
Próxima etapa
Tutorial: Enviar mensagens do seu ativo para a nuvem usando um fluxo de dados.