Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
V tomto kurzu ručně přidáte prostředky OPC UA do clusteru Azure IoT Operations. Tyto prostředky publikují zprávy do zprostředkovatele MQTT ve vašem clusteru Azure IoT Operations. Tento postup obvykle provede uživatel OT.
Prostředek je fyzické zařízení nebo logická entita, která představuje zařízení, počítač, systém nebo proces. Například fyzické aktivum může být pumpa, motor, nádrž nebo výrobní linka. Logický prostředek, který definujete, může mít vlastnosti, streamovat datové body nebo generovat události.
Servery OPC UA jsou softwarové aplikace, které komunikují s prostředky. Značky OPC UA jsou datové body, které servery OPC UA zveřejňují. Značky OPC UA můžou poskytovat historická data o stavu, výkonu, kvalitě nebo stavu prostředků v reálném čase.
V tomto kurzu použijete webové uživatelské rozhraní provozního prostředí k vytvoření prostředků. Některé z těchto úloh můžete provést také pomocí Azure CLI.
Požadavky
Instance služby Azure IoT Operations s povoleným zabezpečeným nastavením nasazená v clusteru Kubernetes. K vytvoření instance použijte jednu z následujících možností k nasazení operací Azure IoT:
- Rychlý start: Spuštění operací Azure IoT v GitHub Codespaces s K3s poskytuje jednoduché pokyny k nasazení instance Azure IoT Operations, kterou můžete použít pro tyto kurzy. Poté, co zvolíte nastavení zabezpečení, postupujte podle kroků v části Povolení nastavení zabezpečení v operacích Azure IoT.
- Přehled nasazení obsahuje podrobné pokyny k nasazení instance operací Azure IoT ve Windows pomocí Azure Kubernetes Service Edge Essentials nebo Ubuntu pomocí K3s. Postupujte podle kroků v článku nasazení pro nasazení zabezpečeného nastavení a nainstalujte nejnovější verzi.
Důležité
Není možné povolit zabezpečená nastavení v instanci, kterou vytvoříte, pokud postupujete podle kroků v článku Rychlý start: Spuštění operací Azure IoT v GitHub Codespaces s K3s.
Po povolení nastavení zabezpečení obsahuje skupina prostředků, která obsahuje vaši instanci azure IoT Operations, také následující prostředky:
- Instance služby Azure Key Vault pro ukládání tajných kódů, které se mají synchronizovat do clusteru Kubernetes.
- Spravovaná identita přiřazená uživatelem, kterou operace Azure IoT používá pro přístup k instanci služby Azure Key Vault.
- Spravovaná identita přiřazená uživatelem, kterou můžou komponenty operací Azure IoT, jako jsou toky dat, používat k připojení ke cloudovým koncovým bodům, jako je Azure Event Hubs.
- Obor názvů služby Azure Device Registry pro ukládání vašich prostředků a zařízení.
Ujistěte se, že při konfiguraci zabezpečených nastavení udělíte svému uživatelskému účtu oprávnění ke správě tajemství pomocí role Důstojník pro tajemství Key Vault.
Pokud se chcete přihlásit k webovému uživatelskému rozhraní provozního prostředí, potřebujete účet Microsoft Entra ID s alespoň oprávněními přispěvatele pro skupinu prostředků, která obsahuje vaši instanci Kubernetes – Azure Arc . Další informace najdete ve webovém uživatelském rozhraní provozního prostředí.
Pokud není uvedeno jinak, můžete příkazy konzoly spustit v tomto kurzu v prostředí Bash nebo PowerShellu.
Jaký problém vyřešíme?
Data, která servery OPC UA zpřístupňují, můžou mít složitou strukturu a mohou být obtížně pochopitelné. Operace Azure IoT poskytují způsob, jak modelovat prostředky OPC UA jako značky, události a vlastnosti. Toto modelování usnadňuje pochopení dat a jejich použití v podřízených procesech, jako je zprostředkovatel MQTT a toky dat.
Tento kurz také vysvětluje, jak použít přihlašovací údaje uložené ve službě Azure Key Vault k ověření na simulovaném serveru OPC UA.
Nasazení simulátoru OPC PLC
Tento kurz používá simulátor OPC PLC k vygenerování ukázkových dat. Nasazení simulátoru OPC PLC:
Stáhněte si soubor opc-plc-tutorial-deployment.yaml z úložiště GitHub. Pokud chcete stáhnout pomocí příkazového řádku, spusťte následující příkaz:
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.yamlopc-plc-tutorial-deployment.yamlOtevřete soubor, který jste stáhli v textovém editoru, a změňte heslo simulátoru. Heslo se nastavuje pomocí parametru--defaultpassword. Poznamenejte si hodnotu hesla, kterou budete potřebovat později. Pak uložte změny.Pokud chcete do clusteru nasadit simulátor OPC PLC, spusťte následující příkaz:
kubectl apply -f opc-plc-tutorial-deployment.yaml
Následující fragment kódu ukazuje použitý soubor YAML:
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"
- "--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
Navázání vzájemné důvěry
Než simulátor OPC PLC může odesílat data do konektoru pro OPC UA, musíte mezi nimi vytvořit vzájemnou důvěru. V tomto kurzu simulátor OPC PLC a konektor pro OPC UA používají certifikáty podepsané svým držitelem k navázání vzájemného vztahu důvěryhodnosti s konektorem pro OPC UA:
- Certifikát instance aplikace simulátoru je uložený v tajném
opc-plc-default-application-certkódu Kubernetes. - Konektor pro certifikát instance aplikace OPC UA je uložený v tajném
aio-opc-opcuabroker-default-application-certkódu Kubernetes.
Důležité
V produkčním prostředí použijte certifikáty instance aplikace podnikové úrovně k navázání vzájemného vztahu důvěryhodnosti. Další informace najdete v tématu Konfigurace certifikátu instance aplikace podnikové úrovně.
Přidání certifikátu konektoru do seznamu důvěryhodnosti simulátoru
Každý server OPC UA má svůj vlastní mechanismus pro správu seznamu důvěryhodnosti. Pokud chcete přidat certifikát konektoru do seznamu důvěryhodnosti simulátoru, spusťte následující příkazy:
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}"
Přidání certifikátu simulátoru do seznamu důvěryhodnosti konektoru
Každý typ serveru OPC UA má svůj vlastní mechanismus pro správu certifikátu instance aplikace. Pokud chcete stáhnout certifikát simulátoru do souboru s názvem opcplc-000000.crt, spusťte následující příkaz:
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
Přidání certifikátu simulátoru do seznamu důvěryhodnosti konektoru:
Přejděte do webového uživatelského rozhraní provozního prostředí a přihlaste se pomocí přihlašovacích údajů Microsoft Entra ID.
Vyberte svůj web. Pokud pracujete s novým nasazením, ještě neexistují žádné weby. Cluster, který jste vytvořili v předchozím příkladu, najdete tak, že vyberete Zobrazit nepřiřazené instance. V provozním prostředí představuje instance cluster, ve kterém jste nasadili operace Azure IoT.
Vyberte instanci, do které jste nasadili operace Azure IoT:
Návod
Pokud nevidíte žádné instance, možná nejste ve správném tenantovi Microsoft Entra ID. Tenanta můžete změnit z pravé horní nabídky v provozním prostředí.
Vyberte Zařízení a pak spravovat certifikáty a tajné kódy:
Na stránce Certifikáty a tajné kódy vyberte Přidat nový certifikát:
Vyberte Nahrát certifikát, jako úložiště certifikátů vyberte seznam důvěryhodnosti OPC UA a pak zvolte
opcplc-000000.crtsoubor, který jste stáhli dříve. Pak vyberte Nahrát:Vyberte a použijte.
Certifikát instance aplikace simulátoru je teď v konektoru pro seznam důvěryhodnosti OPC UA.
Přidání zařízení
V tomto kroku použijete provozní prostředí k přidání zařízení, které vám umožní připojit se k simulátoru OPC PLC. Přidání zařízení:
Vyberte Zařízení a pak vytvořte nové:
Jako název zařízení zadejte
opc-ua-connectora na dlaždici Microsoft.OpcUa vyberte Nový:Zadejte následující informace o příchozím koncovém bodu Microsoft.OpcUa:
Pole Hodnota Název koncového bodu opc-ua-connector-0Adresa URL serveru OPC UA opc.tcp://opcplc-000000:50000Režim ověřování uživatelů Username password
V tomto kurzu přidáte do instance služby Azure Key Vault nové tajné kódy z webového uživatelského rozhraní provozního prostředí. Tajné kódy se automaticky synchronizují do clusteru Kubernetes:
Pokud chcete přidat odkaz na uživatelské jméno, vyberte Přidat odkaz a pak Vytvořte nový.
Zadejte
plcusernamejako název tajného kódu acontosouserjako hodnotu tajného kódu. Pak vyberte Použít.Pokud chcete přidat odkaz na heslo, vyberte Přidat odkaz a pak Vytvořte nový.
Jako název tajného kódu a heslo, které jste přidali do souboru opc-plc-deployment.yaml, zadejte
plcpasswordjako hodnotu tajného kódu. Pak vyberte Použít.Na stránce Podrobnosti o zařízení vyberte Další a přejděte na stránku Další informace .
Na stránce Přidat vlastní vlastnost můžete volitelně aktualizovat nebo přidat vlastní vlastnosti do zařízení. Až budete hotovi, vyberte Další .
Pokud chcete definici zařízení uložit na stránce Souhrn , vyberte Vytvořit.
Tato konfigurace nasadí nové zařízení s zavoláným opc-ua-connectoropc-ua-connector-0 koncovým bodem do clusteru. Zařízení můžete zobrazit na webu Azure Portal nebo můžete použít kubectl k zobrazení zařízení v clusteru Kubernetes:
kubectl get device -n azure-iot-operations
Tajné informace plcusername a plcpassword můžete zobrazit v instanci Azure Key Vault ve vaší skupině prostředků. Tajné kódy se synchronizují do clusteru Kubernetes, kde je můžete zobrazit pomocí kubectl get secret -n azure-iot-operations příkazu. Tajné kódy můžete zobrazit také v provozním prostředí na stránce Spravovat synchronizované tajné kódy .
Správa vašich prostředků
Po výběru instance v provozním prostředí se na stránce Prostředky zobrazí dostupný seznam prostředků. Pokud ještě žádné prostředky neexistují, je tento seznam prázdný:
Vytvoření majetku
Pokud chcete vytvořit prostředek, vyberte Vytvořit prostředek. Pak zadejte následující informace o aktivech:
| Pole | Hodnota |
|---|---|
| Příchozí koncový bod | opc-ua-connector-0 |
| Název prostředku | thermostat |
| Popis | A simulated thermostat asset |
Odeberte existující vlastní vlastnosti a přidejte následující vlastní vlastnosti. Buďte opatrní, abyste použili přesné názvy vlastností, protože šablona Power BI v pozdějším kurzu se na ně dotazuje:
| Název vlastnosti | Podrobnosti o vlastnosti |
|---|---|
| dávka | 102 |
| Zákazník | Contoso |
| vybavení | Kotel |
| isSpare | pravda |
| poloha | Seattle |
Výběrem možnosti Další přejdete na stránku Datové sady .
Vytvoření datové sady
Pokud chcete vytvořit datovou sadu, vyberte Vytvořit datovou sadu. Zadejte podrobnosti datové sady uvedené v následující tabulce:
| Pole | Hodnota |
|---|---|
| Název datové sady | thermostat |
| Cíl | MQTT |
| Téma | azure-iot-operations/data/thermostat |
Vyberte Vytvořit a další pro uložení datové sady a přejděte na stránku Datové body.
Návod
Můžete vybrat Možnost Spravovat výchozí nastavení a změnit výchozí interval vzorkování a velikost fronty pro každý datový bod.
Vytvoření datových bodů OPC UA
Přidejte datový bod OPC UA na stránce Datové body . Pokud chcete přidat datový bod, vyberte Přidat datový bod. Zadejte podrobnosti datového bodu uvedené v následující tabulce:
| Zdroj dat | Název datového bodu |
|---|---|
| ns=3; s=SpikeData | Teplota |
Tady je hodnota zdroje dat konkrétní uzel simulátoru OPC UA. Uzel generuje náhodné hodnoty v zadaném rozsahu a má také občasné špičky.
Vyberte Uložit.
Výběrem možnosti Další přejděte na stránku Skupiny událostí , pak výběrem možnosti Další přejděte na stránku Skupiny pro správua pak přejděte na stránku Revize .
Přehled
Než vyberete Vytvořit, zkontrolujte podrobnosti o prostředku a značkách a proveďte potřebné úpravy:
Tato konfigurace nasadí do clusteru nový prostředek.thermostat Můžete také pomocí kubectl zobrazit prostředky lokálně ve vašem clusteru.
kubectl get assets.namespace -n azure-iot-operations
Zobrazení prostředků na webu Azure Portal
Pokud chcete zobrazit zařízení a prostředek, které jste vytvořili na webu Azure Portal, přejděte do služby Azure Device Registry:
Portál umožňuje zobrazit podrobnosti o prostředku. Další podrobnosti získáte výběrem zobrazení JSON:
Ověření toku dat
Pomocí nástroje mosquitto_sub ověřte, že data proudí do zprostředkovatele MQTT. V tomto příkladu spustíte nástroj mosquitto_sub v clusteru Kubernetes:
Spuštěním následujícího příkazu nasaďte pod, který obsahuje mosquitto_pub a mosquitto_sub nástroje, které jsou užitečné pro interakci s zprostředkovatelem MQTT v clusteru:
kubectl apply -f https://raw.githubusercontent.com/Azure-Samples/explore-iot-operations/main/samples/quickstarts/mqtt-client.yamlNásledující fragment kódu ukazuje použitý soubor YAML:
# 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 certUpozornění
Tato konfigurace není zabezpečená. Tuto konfiguraci nepoužívejte v produkčním prostředí.
Když je pod mqtt-client spuštěný, spuštěním následujícího příkazu vytvořte prostředí v podu, který jste vytvořili:
kubectl exec --stdin --tty mqtt-client -n azure-iot-operations -- shV prostředí Bash v podu mqtt-client spusťte následující příkaz pro připojení k zprostředkovateli MQTT pomocí nástroje mosquitto_sub a k přihlášení k odběru
data/#témat použijte zástupný znak: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)Tento příkaz bude dál spouštět a zobrazovat zprávy při jejich doručení na všechna
data/#témata, dokud ho nezastavíte stisknutím kombinace kláves Ctrl+C . Pokud chcete prostředí opustit, zadejteexit.
Pokud chcete ověřit, že přidané termostatické zařízení odesílá data, zobrazte zprávy v azure-iot-operations/data/thermostat tématu.
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}}
Pokud tok dat neexistuje, restartujte pod aio-opc-opc.tcp-1 :
Pomocí následujícího příkazu najděte název podu
aio-opc-opc.tcp-1:kubectl get pods -n azure-iot-operationsNázev podu vypadá takto
aio-opc-opc.tcp-1-849dd78866-vhmz6.aio-opc-opc.tcp-1Restartujte pod pomocí příkazu, který vypadá jako v následujícím příkladu. Použijte název poduaio-opc-opc.tcp-1z předchozího kroku:kubectl delete pod aio-opc-opc.tcp-1-849dd78866-vhmz6 -n azure-iot-operations
Ukázkové značky, které jste přidali v předchozím kurzu, generují zprávy z vašeho prostředku, které vypadají jako v následujícím příkladu:
{
"temperature":{
"Value":24.86898871648548,
"SourceTimestamp":"2025-04-25T14:50:07.195274Z"
}
}
Jak jsme tento problém vyřešili?
V tomto kurzu jste přidali zařízení a pak definovali prostředek a značky. Prostředky a značky modelují data ze serveru OPC UA, aby se data snadněji používala ve zprostředkovateli MQTT a dalších podřízených procesech.
Použili jste přihlašovací údaje uložené ve službě Azure Key Vault k ověření na serveru OPC UA. Tento přístup je bezpečnější než zakódování natvrdo přihlašovacích údajů v definici prostředků.
Použijete termostatický prostředek, který jste definovali v dalším kurzu.
Vyčištění prostředků
Pokud budete pokračovat k dalšímu kurzu, ponechte všechny prostředky.
Pokud chcete odebrat nasazení operací Azure IoT, ale zachovat cluster, použijte příkaz az iot ops delete :
az iot ops delete --cluster $CLUSTER_NAME --resource-group $RESOURCE_GROUP
Pokud chcete odstranit všechny prostředky, které jste vytvořili pro účely tohoto rychlého startu, odstraňte cluster Kubernetes, ve kterém jste nasadili operace Azure IoT, a pak odeberte skupinu prostředků Azure, která obsahovala cluster.
Pokud jste pro tyto rychlé starty použili Codespaces, odstraňte codespace z GitHubu.
Další krok
Kurz: Odesílání zpráv z vašeho prostředku do cloudu pomocí toku dat