Publicera och prenumerera med Azure IoT Edge (förhandsversion)
Gäller för:
IoT Edge 1,2
Du kan använda MQTT-Azure IoT Edge för att publicera och prenumerera på meddelanden. Den här artikeln visar hur du ansluter till den här koordinatortjänsten, publicerar och prenumererar på meddelanden via användardefinierade ämnen och använder IoT Hub för meddelanden. Den IoT Edge MQTT-koordinatorn är inbyggd IoT Edge hubben. Mer information finns i a brokering-funktionerna i IoT Edge hub.
Anteckning
IoT Edge MQTT-meddelandekö är för närvarande i offentlig förhandsversion.
Förutsättningar
Ett Azure-konto med en giltig prenumeration
Azure CLI med
azure-iotCLI-tillägget installerat. Mer information finns i installationsstegen för Azure IoT-tillägg för Azure CLI.En IoT Hub av SKU: Antingen F1, S1, S2 eller S3.
Ha en IoT Edge-enhet med version 1.2 eller senare, inklusive edgeAgent och edgeHub-moduler version 1.2 eller senare distribuerad, med MQTT-koordinatorfunktionen aktiverad och edgeHub-port 1883 bunden till värden för att aktivera icke-TLS-anslutningar. Du kan distribuera IoT Edge 1.2 automatiskt på en virtuell Azure-dator genom att följa stegen som beskrivs i den här artikeln. Eftersom IoT Edge MQTT-meddelandekö för närvarande är i offentlig förhandsversion måste du även ange följande miljövariabler till true på edgeHub-modulen för att aktivera MQTT-koordinatorn:
Name Värde experimentalFeatures__enabledtrueexperimentalFeatures__mqttBrokerEnabledtrueOm du snabbt vill IoT Edge en distribution som uppfyller dessa kriterier tillsammans med en öppen auktoriseringsprincip på kan du använda det här
test_topicexempeldistributionsmanifestet i bilaga:Spara distributionsfilen i arbetsmappen
Tillämpa den här distributionen på IoT Edge enhet med hjälp av följande Azure CLI-kommando. Mer information om det här kommandot finns i Distribuera Azure IoT Edge-moduler med Azure CLI.
az iot edge set-modules --device-id [device id] --hub-name [hub name] --content [deployment file path]
Mosquitto-klienter som är installerade IoT Edge enheten. Den här artikeln använder populära Mosquitto-klienter MOSQUITTO_PUB och MOSQUITTO_SUB. Andra MQTT-klienter kan användas i stället. Kör följande kommando för att installera Mosquitto-klienter på en Ubuntu-enhet:
sudo apt-get update && sudo apt-get install mosquitto-clientsInstallera inte Mosquitto-servern eftersom den kan orsaka blockering av MQTT-portarna (8883 och 1883) och orsaka konflikter IoT Edge hubben.
Anslut till IoT Edge hubb
När du ansluter till IoT Edge hub följer du samma steg som beskrivs i artikeln Ansluta till IoT Hub med en allmän MQTT-klient eller i den konceptuella beskrivningen av IoT Edge hub-artikeln. De här stegen är:
- MQTT-klienten kan också upprätta en säker anslutning till IoT Edge med hjälp Transport Layer Security (TLS)
- MQTT-klienten autentiserar sig IoT Edge hubben
- Den IoT Edge hubben auktoriserar MQTT-klienten enligt dess auktoriseringsprincip
Säker anslutning (TLS)
Transport Layer Security (TLS) används för att upprätta en krypterad kommunikation mellan klienten och IoT Edge hubben.
Om du vill inaktivera TLS använder du port 1883 (MQTT) och binder edgeHub-containern till port 1883.
Om en klient ansluter på port 8883 (MQTTS) till MQTT-koordinatorn initieras en TLS-kanal för att aktivera TLS. Koordinatorn skickar sin certifikatkedja som klienten behöver verifiera. För att kunna verifiera certifikatkedjan måste rotcertifikatet för MQTT-koordinatorn installeras som ett betrott certifikat på klienten. Om rotcertifikatet inte är betrott avvisas klientbiblioteket av MQTT-koordinatorn med ett certifikatverifieringsfel. Stegen att följa för att installera rotcertifikatet för den asynklare meddelandehanteraren på klienten är desamma som i fallet med den transparenta gatewayen och beskrivs i dokumentationen för att förbereda en underordnad enhet.
Autentisering
För att en MQTT-klient ska kunna autentisera sig själv måste den först skicka ett CONNECT-paket till MQTT-meddelandekö för att initiera en anslutning i namnet. Det här paketet innehåller tre delar av autentiseringsinformation: client identifier en , en och en username password :
Fältet
client identifierär namnet på enheten eller modulnamnet i IoT Hub. Den använder följande syntax:För en enhet:
<device_name>För en modul:
<device_name>/<module_name>
För att kunna ansluta till MQTT-koordinatorn måste en enhet eller en modul registreras i IoT Hub.
Koordinatorn tillåter inte anslutningar från flera klienter med samma autentiseringsuppgifter. Koordinatorn kopplar från den redan anslutna klienten om en andra klient ansluter med samma autentiseringsuppgifter.
Fältet
usernamehärleds från enhetens eller modulens namn och det IoTHub-namn som enheten tillhör med hjälp av följande syntax:För en enhet:
<iot_hub_name>.azure-devices.net/<device_name>/?api-version=2018-06-30För en modul:
<iot_hub_name>.azure-devices.net/<device_name>/<module_name>/?api-version=2018-06-30
Fältet
passwordför CONNECT-paketet beror på autentiseringsläget:- När du använder autentisering med symmetriskanycklar
passwordär fältet en SAS-token. - När du använder själv signerad X.509-autentisering
passwordfinns inte fältet. I det här autentiseringsläget krävs en TLS-kanal. Klienten måste ansluta till port 8883 för att upprätta en TLS-anslutning. Under TLS-handskakningen begär MQTT-koordinatorn ett klientcertifikat. Det här certifikatet används för att verifiera klientens identitet och därförpasswordbehövs inte fältet senare när CONNECT-paketet skickas. Att skicka både ett klientcertifikat och lösenordsfältet leder till ett fel och anslutningen stängs. MQTT-bibliotek och TLS-klientbibliotek kan vanligtvis skicka ett klientcertifikat när du initierar en anslutning. Du kan se ett steg för steg-exempel i avsnittet Använda X509-certifikat för klientautentisering.
- När du använder autentisering med symmetriskanycklar
Moduler som distribueras av IoT Edge använder autentisering med symmetriska nycklar och kan anropa API:et för lokal IoT Edge-arbetsbelastning för att programmatiskt hämta en SAS-token även när den är offline.
Auktorisering
När en MQTT-klient har autentiserats IoT Edge en hubb måste den ha behörighet att ansluta. När du är ansluten måste den ha behörighet att publicera eller prenumerera på specifika ämnen. Dessa auktoriseringar beviljas av den IoT Edge hubben baserat på dess auktoriseringsprincip. Auktoriseringsprincipen är en uppsättning instruktioner uttryckta som en JSON-struktur som skickas till IoT Edge-hubben via dess tvilling. Redigera en IoT Edge för att konfigurera auktoriseringsprincipen.
Anteckning
För den offentliga förhandsversionen stöder endast Azure CLI distributioner som innehåller auktoriseringsprinciper för MQTT-meddelandeköer. Den Azure Portal stöder för närvarande inte redigering av IoT Edge-hubbtvillingen och dess auktoriseringsprincip.
Varje auktoriseringsprincip består av en kombination identities av , allow eller deny operations effekter, och resources :
identitiesbeskriva principens ämne. Det måste mappas tillusernamesom skickas av klienter i sina CONNECT-paket och ha formatet eller<iot_hub_name>.azure-devices.net/<device_name><iot_hub_name>.azure-devices.net/<device_name>/<module_name>.allowellerdenyeffekter definierar om åtgärder ska tillåtas eller nekas.operationsdefiniera de åtgärder som ska auktorisera.mqtt:connectochmqtt:publishär de tre åtgärder som stöds imqtt:subscribedag.resourcesdefiniera -objektet för principen. Det kan vara ett ämne eller ett ämnesmönster som definierats med jokertecken i MQTT.
Nedan visas ett exempel på en auktoriseringsprincip som uttryckligen inte tillåter att "rogue_client"-klienten ansluter, tillåter alla Azure IoT-klienter att ansluta och tillåter att "sensor_1" publicerar till ämnet events/alerts .
{
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"routes":{
"Route1":"FROM /messages/* INTO $upstream"
},
"storeAndForwardConfiguration":{
"timeToLiveSecs":7200
},
"mqttBroker":{
"authorizations":[
{
"identities":[
"<iot_hub_name>.azure-devices.net/rogue_client"
],
"deny":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities":[
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities":[
"<iot_hub_name>.azure-devices.net/sensor_1"
],
"allow":[
{
"operations":[
"mqtt:publish"
],
"resources":[
"events/alerts"
]
}
]
}
]
}
}
}
}
Några saker att tänka på när du skriver auktoriseringsprincipen:
Det kräver
$edgeHubtvillingschema version 1.2Som standard nekas alla åtgärder.
Auktoriseringsutsatser utvärderas i den ordning som de visas i JSON-definitionen. Den börjar med att titta
identitiespå och väljer sedan de första tillåt- eller neka-uttrycken som matchar begäran. Om det uppstår konflikter mellan allow- och deny-uttryck vinner neka-instruktionen.Flera variabler (till exempel ersättningar) kan användas i auktoriseringsprincipen:
{{iot:identity}}representerar identiteten för den aktuella anslutna klienten. Till exempel en enhetsidentitet som<iot_hub_name>.azure-devices.net/myDeviceeller en modulidentitet som<iot_hub_name>.azure-devices.net/myEdgeDevice/SampleModule.{{iot:device_id}}representerar identiteten för den anslutna enheten. Till exempel en enhetsidentitet sommyDeviceeller enhetsidentiteten där en modul körs sommyEdgeDevice.{{iot:module_id}}representerar identiteten för den anslutna modulen. Den här variabeln är tom för anslutna enheter eller en modulidentitet somSampleModule.{{iot:this_device_id}}representerar identiteten för den IoT Edge som kör auktoriseringsprincipen. Till exempelmyIoTEdgeDevice.
Auktoriseringar för IoT Hub-ämnen hanteras något annorlunda än användardefinierade ämnen. Här är de viktigaste punkterna att komma ihåg:
- Azure IoT-enheter eller -moduler behöver en explicit auktoriseringsregel för att ansluta IoT Edge MQTT-koordinator. En standardprincip för anslutningsauktorisering finns nedan.
- Azure IoT-enheter eller -moduler kan som standard komma åt sina egna IoT Hub-ämnen utan någon explicit auktoriseringsregel. Auktoriseringar kommer dock från överordnade/underordnade relationer i det fallet och dessa relationer måste anges. IoT Edge konfigureras automatiskt som underordnade till sina IoT Edge-enheter, men enheter måste uttryckligen anges som underordnade till deras IoT Edge gateway.
Här är en standardauktoriseringsprincip som kan användas för att göra det möjligt för alla Azure IoT-enheter eller -moduler att ansluta till den autjämnare:
{
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"mqttBroker":{
"authorizations":[
{
"identities": [
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
}
]
}
}
}
}
Nu när du förstår hur du ansluter till MQTT-koordinatorn för IoT Edge ska vi se hur den kan användas för att publicera och prenumerera på meddelanden först i användardefinierade ämnen, sedan i IoT Hub-ämnen och slutligen till en annan MQTT-koordinator.
Publicera och prenumerera på användardefinierade ämnen
I den här artikeln använder du en klient med namnet sub_client som prenumererar på ett ämne och en annan klient med namnet pub_client som publicerar till ett ämne. Vi använder autentisering med symmetrisk nyckel, men samma sak kan göras med själv signerad X.509-autentisering eller X.509 CA-signerad autentisering.
Skapa utgivar- och prenumerantklienter
Skapa två IoT-enheter IoT Hub och hämta deras lösenord. Använda Azure CLI från terminalen för att:
Skapa två IoT-enheter i IoT Hub:
az iot hub device-identity create --device-id sub_client --hub-name <iot_hub_name> az iot hub device-identity create --device-id pub_client --hub-name <iot_hub_name>Ange deras överordnade som din IoT Edge enhet:
az iot hub device-identity parent set --device-id sub_client --hub-name <iot_hub_name> --pd <edge_device_id> az iot hub device-identity parent set --device-id pub_client --hub-name <iot_hub_name> --pd <edge_device_id>Hämta sina lösenord genom att generera en SAS-token:
För en enhet:
az iot hub generate-sas-token -n <iot_hub_name> -d <device_name> --key-type primary --du 3600där 3600 är varaktigheten för SAS-token i sekunder (till exempel 3600 = 1 timme).
För en modul:
az iot hub generate-sas-token -n <iot_hub_name> -d <device_name> -m <module_name> --key-type primary --du 3600där 3600 är varaktigheten för SAS-token i sekunder (till exempel 3600 = 1 timme).
Kopiera SAS-token, vilket är det värde som motsvarar "sas"-nyckeln från utdata. Här är ett exempel på utdata från Azure CLI-kommandot ovan:
{ "sas": "SharedAccessSignature sr=example.azure-devices.net%2Fdevices%2Fdevice_1%2Fmodules%2Fmodule_a&sig=H5iMq8ZPJBkH3aBWCs0khoTPdFytHXk8VAxrthqIQS0%3D&se=1596249190" }
Auktorisera utgivare och prenumerantklienter
För att auktorisera utgivaren och prenumeranten redigerar du IoT Edge-hubbtvillingen i en IoT Edge-distribution som innehåller följande auktoriseringsprincip.
Anteckning
För närvarande kan distributioner som innehåller MQTT-auktoriseringsegenskaper endast tillämpas IoT Edge enheter med hjälp av Azure CLI.
{
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"mqttBroker":{
"authorizations":[
{
"identities": [
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities": [
"<iot_hub_name>.azure-devices.net/sub_client"
],
"allow":[
{
"operations":[
"mqtt:subscribe"
],
"resources":[
"test_topic"
]
}
],
},
{
"identities": [
"<iot_hub_name>.azure-devices.net/pub_client"
],
"allow":[
{
"operations":[
"mqtt:publish"
],
"resources":[
"test_topic"
]
}
]
}
]
}
}
}
}
Autentisering med symmetriska nycklar utan TLS
Prenumerera
Anslut din sub_client MQTT-klient till MQTT-koordinatorn och prenumerera på genom att köra följande kommando på test_topic din IoT Edge enhet:
mosquitto_sub \
-t "test_topic" \
-i "sub_client" \
-u "<iot_hub_name>.azure-devices.net/sub_client/?api-version=2018-06-30" \
-P "<sas_token>" \
-h "<edge_device_address>" \
-V mqttv311 \
-p 1883
där <edge_device_address> = localhost i det här exemplet eftersom klienten körs på samma enhet som IoT Edge.
Observera att port 1883 (MQTT), utan TLS, används i det här första exemplet. För att detta ska fungera måste edgeHub-port 1883 bindas till värden via dess alternativ för att skapa. Ett exempel ges i avsnittet förutsättningar. Ett annat exempel med port 8883 (MQTTS), med TLS aktiverat, visas i nästa avsnitt.
Nu sub_client MQTT-klienten och väntar på inkommande meddelanden på test_topic .
Publicera
Anslut din pub_client MQTT-klient till MQTT-meddelandehanteraren och publicerar ett meddelande på samma sätt som ovan genom att köra följande kommando på din test_topic IoT Edge enhet från en annan terminal:
mosquitto_pub \
-t "test_topic" \
-i "pub_client" \
-u "<iot_hub_name>.azure-devices.net/pub_client/?api-version=2018-06-30" \
-P "<sas_token>" \
-h "<edge_device_address>" \
-V mqttv311 \
-p 1883 \
-m "hello"
där <edge_device_address> = localhost i det här exemplet eftersom klienten körs på samma enhet som IoT Edge.
När kommandot körs får sub_client MQTT-klienten meddelandet "hello".
Autentisering med symmetriska nycklar med TLS
Om du vill aktivera TLS måste porten ändras från 1883 (MQTT) till 8883 (MQTTS) och klienterna måste ha rotcertifikatet för MQTT-meddelandekö för att kunna verifiera certifikatkedjan som skickas av MQTT-koordinatorn. Detta kan göras genom att följa stegen i avsnittet Säker anslutning (TLS).
Eftersom klienterna körs på samma enhet som MQTT-koordinatorn i exemplet ovan gäller samma steg för att aktivera TLS genom att:
- Ändra portnumret från 1883 (MQTT) till 8883 (MQTTS)
- Skicka CA-rotcertifikatet till mosquitto_pub mosquitto_sub klienter med en parameter som liknar
--cafile /certs/certs/azure-iot-test-only.root.ca.cert.pem - Skicka det faktiska värdnamnet som konfigureras i IoT Edge stället för via parametern hostname som skickas till mosquitto_pub mosquitto_sub-klienterna för att aktivera validering av
localhostcertifikatkedjan
Publicera och prenumerera på IoT Hub ämnen
Med AZURE IoT-enhets-SDK:erna kan klienter redan utföra IoT Hub åtgärder, men de tillåter inte publicering/prenumeration på användardefinierade ämnen. IoT Hub kan utföras med hjälp av valfri MQTT-klienter som använder publicerings- och prenumerationssemantik så länge IoT Hub-primitiva protokoll respekteras. Vi går igenom de specifika för att förstå hur dessa protokoll fungerar.
Skicka telemetridata till IoT Hub
Att skicka telemetridata till IoT Hub liknar publicering i ett användardefinierat ämne, men med ett specifikt IoT Hub ämne:
- För en enhet skickas telemetri om ämnet:
devices/<device_name>/messages/events/ - För en modul skickas telemetri om ämnet:
devices/<device_name>/modules/<module_name>/messages/events/
Skapa dessutom en väg som för att skicka telemetri från den IoT Edge FROM /messages/* INTO $upstream MQTT-meddelandekö till IoT Hub. Mer information om routning finns i Deklarera vägar.
Hämta tvilling
Att hämta enhets-/modultvillingen är inte ett typiskt MQTT-mönster. Klienten måste utfärda en begäran för den tvilling som IoT Hub ska betjäna.
För att kunna ta emot tvillingar måste klienten prenumerera på ett specifikt IoT Hub ämne $iothub/twin/res/# . Det här ämnesnamnet ärvs IoT Hub och alla klienter måste prenumerera på samma ämne. Det innebär inte att enheter eller moduler tar emot varandras tvilling. IoT Hub och IoT Edge hubben vet vilken tvilling som ska levereras var, även om alla enheter lyssnar på samma ämnesnamn.
När prenumerationen har gjorts måste klienten fråga efter tvillingen genom att publicera ett meddelande till IoT Hub specifika ämne där $iothub/twin/GET/?rid=<request_id>/# <request_id> är en godtycklig identifierare. IoT Hub skickar sedan sitt svar med begärda data om $iothub/twin/res/200/?rid=<request_id> ämnet , som klienten prenumererar på. Det är så en klient kan koppla sina begäranden med svaren.
Ta emot tvillingkorrigeringar
För att kunna ta emot tvillingkorrigeringar måste en klient prenumerera på ett särskilt IoTHub-ämne. $iothub/twin/PATCH/properties/desired/# När prenumerationen har gjorts tar klienten emot de tvillingkorrigeringar som skickas av IoT Hub om det här ämnet.
Ta emot direktmetoder
Att ta emot en direktmetod liknar att ta emot fullständiga tvillingar med tillägget att klienten måste bekräfta att den har tagit emot anropet. Först prenumererar klienten på det särskilda IoT Hub-ämnet $iothub/methods/POST/# . När en direktmetod tas emot i det här ämnet måste klienten extrahera begärandeidentifieraren från det underavsnitt där direktmetoden tas emot och slutligen publicera ett bekräftelsemeddelande i det särskilda rid ämnet för IoT $iothub/methods/res/200/<request_id> Hub.
Skicka direktmetoder
Att skicka en direktmetod är ett HTTP-anrop och går därför inte igenom MQTT-koordinatorn. Information om hur du skickar en direktmetod till IoT Hub finns i Förstå och anropa direktmetoder. Om du vill skicka en direktmetod lokalt till en annan modul kan du se det här exemplet på anrop av direktmetod för Azure IoT C# SDK.
Publicera och prenumerera mellan MQTT-meddelandeköer
För att ansluta två MQTT-meddelandeköer innehåller IoT Edge en MQTT-brygga. En MQTT-brygga används ofta för att ansluta en MQTT-koordinator som körs till en annan MQTT-koordinator. Det är vanligtvis bara en delmängd av den lokala trafiken som skickas till en annan koordinator.
Anteckning
Den IoT Edge hubbbryggan kan för närvarande endast användas mellan kapslade IoT Edge enheter. Den kan inte användas för att skicka data till IoT Hub eftersom IoT Hub inte är en komplett MQTT-koordinator. Mer information om stöd för MQTT-koordinatorfunktioner i IoT Hub finns i Kommunicera med din IoT-hubb med hjälp av MQTT-protokollet. Mer information om hur du IoT Edge enheter finns i Anslut en underordnad IoT Edge till en Azure IoT Edge gateway.
I en kapslad konfiguration fungerar IoT Edge Hub MQTT-bryggan som en klient för den överordnade MQTT-koordinatorn, så auktoriseringsregler måste anges på den överordnade EdgeHub så att den underordnade EdgeHub kan publicera och prenumerera på specifika användardefinierade ämnen som bryggan är konfigurerad för.
Den IoT Edge MQTT-bryggan konfigureras via en JSON-struktur som skickas till IoT Edge-hubben via dess tvilling. Redigera en IoT Edge för att konfigurera dess MQTT-brygga.
Anteckning
För den offentliga förhandsversionen stöder endast Azure CLI distributioner som innehåller MQTT-bryggkonfigurationer. Den Azure Portal stöder för närvarande inte redigering av IoT Edge-hubbtvillingen och dess MQTT-bryggkonfiguration.
MQTT-bryggan kan konfigureras för att ansluta en MQTT-IoT Edge MQTT-koordinator till flera externa a brokers. För varje extern a broker krävs följande inställningar:
endpointär adressen till den fjärranslutna MQTT-koordinatorn att ansluta till. Endast överordnade IoT Edge enheter stöds för närvarande och definieras av variabeln$upstream.settingsdefinierar vilka ämnen som ska överbryggas för en slutpunkt. Det kan finnas flera inställningar per slutpunkt och följande värden används för att konfigurera den:direction:inantingen för att prenumerera på fjärrutjämningens ämnen eller publicera tilloutfjärrutjämningens ämnentopic: grundläggande ämnesmönster som ska matchas. Jokertecken i MQTT kan användas för att definiera det här mönstret. Olika prefix kan tillämpas på det här ämnesmönstret på den lokala autjämning och fjärrutjämning.outPrefix: Prefix som tillämpas på mönstret påtopicden fjärranslutna koordinatorn.inPrefix: Prefix som tillämpas på mönstret påtopicden lokala koordinatorn.
Nedan visas ett exempel på en IoT Edge MQTT-bryggkonfiguration som publicerar om alla meddelanden som tagits emot på ämnen för en överordnad IoT Edge-enhet till en underordnad IoT Edge-enhet i samma avsnitt och publicerar om alla meddelanden som skickas i ämnen för en underordnad IoT Edge-enhet till en alerts/# överordnad IoT Edge-enhet i ämnen /local/telemetry/# /remote/messages/# .
{
"schemaVersion": "1.2",
"mqttBroker": {
"bridges": [{
"endpoint": "$upstream",
"settings": [{
"direction": "in",
"topic": "alerts/#"
},
{
"direction": "out",
"topic": "#",
"inPrefix": "/local/telemetry/",
"outPrefix": "/remote/messages/"
}
]
}]
}
}
Andra kommentarer om MQTT IoT Edge-hubbbryggan:
- MQTT-protokollet används automatiskt som uppströmsprotokoll när MQTT-koordinatorn används och den IoT Edge används i en kapslad konfiguration, till exempel med en
parent_hostnameangiven. Mer information om överordnade protokoll finns i Molnkommunikation. Mer information om kapslade konfigurationer finns i Anslut en underordnad IoT Edge till en Azure IoT Edge gateway.
Nästa steg
Bilaga – Exempel på distributionsmanifest
Nedan visas det fullständiga distributionsmanifestet som du kan använda för att aktivera MQTT Broker i IoT Edge. Den distribuerar IoT Edge version 1.2 med MQTT-koordinatorfunktionen aktiverad, edgeHub-port 1883 aktiverad och en öppen auktoriseringsprincip på test_topic .
{
"modulesContent":{
"$edgeAgent":{
"properties.desired":{
"schemaVersion":"1.1",
"runtime":{
"type":"docker",
"settings":{
"minDockerVersion":"v1.25",
"loggingOptions":"",
"registryCredentials":{
}
}
},
"systemModules":{
"edgeAgent":{
"type":"docker",
"settings":{
"image":"mcr.microsoft.com/azureiotedge-agent:1.2",
"createOptions":"{}"
}
},
"edgeHub":{
"type":"docker",
"status":"running",
"restartPolicy":"always",
"settings":{
"image":"mcr.microsoft.com/azureiotedge-hub:1.2",
"createOptions":"{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}],\"1883/tcp\":[{\"HostPort\":\"1883\"}]}}}"
},
"env":{
"experimentalFeatures__mqttBrokerEnabled":{
"value":"true"
},
"experimentalFeatures__enabled":{
"value":"true"
},
"RuntimeLogLevel":{
"value":"debug"
}
}
}
},
"modules":{
}
}
},
"$edgeHub":{
"properties.desired":{
"schemaVersion":"1.2",
"routes":{
"Upstream":"FROM /messages/* INTO $upstream"
},
"storeAndForwardConfiguration":{
"timeToLiveSecs":7200
},
"mqttBroker":{
"authorizations":[
{
"identities":[
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:connect"
]
}
]
},
{
"identities":[
"{{iot:identity}}"
],
"allow":[
{
"operations":[
"mqtt:publish",
"mqtt:subscribe"
],
"resources":[
"test_topic"
]
}
]
}
]
}
}
}
}
}