Aracılığıyla paylaş


Hızlı Başlangıç: ARM şablonu kullanarak Azure IoT hub'ı ve depolama hesabı dağıtma

Bu hızlı başlangıçta, IoT hub'ı, Azure Depolama hesabı ve IoT hub'ından depolamaya ileti göndermek için bir yol oluşturmak için bir Azure Resource Manager şablonu (ARM şablonu) kullanacaksınız. Hub yapılandırıldığından, hub'a gönderilen iletiler yönlendirme koşuluna uygunsa depolama hesabına otomatik olarak yönlendirilir. Bu hızlı başlangıcın sonunda depolama hesabını açabilir ve gönderilen iletileri görebilirsiniz.

Azure Resource Manager şablonu, projenizin altyapısını ve yapılandırmasını tanımlayan bir JavaScript Nesne Gösterimi (JSON) dosyasıdır. Bu şablonda, bildirim temelli sözdizimi kullanılır. Dağıtımı oluşturmak için programlama komutlarının sırasını yazmadan hedeflenen dağıtımınızı açıklarsınız.

Ortamınız önkoşulları karşılıyorsa ve ARM şablonlarını kullanma hakkında bilginiz varsa, Azure’a dağıtma düğmesini seçin. Şablon Azure portalında açılır.

Azure'a Dağıt

Önkoşullar

Şablonu gözden geçirme

Bu hızlı başlangıçta kullanılan şablon Azure Hızlı Başlangıç Şablonları'ndan çağrılır101-iothub-auto-route-messages.

Şablonda iki Azure kaynağı tanımlanır:

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "metadata": {
    "_generator": {
      "name": "bicep",
      "version": "0.26.54.24096",
      "templateHash": "1111741482289134864"
    }
  },
  "parameters": {
    "projectName": {
      "type": "string",
      "defaultValue": "contoso",
      "minLength": 1,
      "maxLength": 11,
      "metadata": {
        "description": "Define the project name or prefix for all objects."
      }
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]",
      "metadata": {
        "description": "The datacenter to use for the deployment."
      }
    },
    "skuName": {
      "type": "string",
      "defaultValue": "S1",
      "metadata": {
        "description": "The SKU to use for the IoT Hub."
      }
    },
    "skuUnits": {
      "type": "int",
      "defaultValue": 1,
      "metadata": {
        "description": "The number of IoT Hub units."
      }
    },
    "d2cPartitions": {
      "type": "int",
      "defaultValue": 4,
      "metadata": {
        "description": "Partitions used for the event stream."
      }
    }
  },
  "variables": {
    "iotHubName": "[format('{0}Hub{1}', parameters('projectName'), uniqueString(resourceGroup().id))]",
    "storageAccountName": "[format('{0}{1}', toLower(parameters('projectName')), uniqueString(resourceGroup().id))]",
    "storageEndpoint": "[format('{0}StorageEndpont', parameters('projectName'))]",
    "storageContainerName": "[format('{0}results', toLower(parameters('projectName')))]"
  },
  "resources": [
    {
      "type": "Microsoft.Storage/storageAccounts",
      "apiVersion": "2023-01-01",
      "name": "[variables('storageAccountName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "Standard_LRS"
      },
      "kind": "Storage",
      "properties": {
        "allowBlobPublicAccess": false,
        "minimumTlsVersion": "TLS1_2",
        "supportsHttpsTrafficOnly": true
      }
    },
    {
      "type": "Microsoft.Storage/storageAccounts/blobServices/containers",
      "apiVersion": "2023-01-01",
      "name": "[format('{0}/default/{1}', variables('storageAccountName'), variables('storageContainerName'))]",
      "properties": {
        "publicAccess": "None"
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    },
    {
      "type": "Microsoft.Devices/IotHubs",
      "apiVersion": "2023-06-30",
      "name": "[variables('iotHubName')]",
      "location": "[parameters('location')]",
      "sku": {
        "name": "[parameters('skuName')]",
        "capacity": "[parameters('skuUnits')]"
      },
      "properties": {
        "eventHubEndpoints": {
          "events": {
            "retentionTimeInDays": 1,
            "partitionCount": "[parameters('d2cPartitions')]"
          }
        },
        "routing": {
          "endpoints": {
            "storageContainers": [
              {
                "connectionString": "[format('DefaultEndpointsProtocol=https;AccountName={0};EndpointSuffix={1};AccountKey={2}', variables('storageAccountName'), environment().suffixes.storage, listKeys(resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName')), '2023-01-01').keys[0].value)]",
                "containerName": "[variables('storageContainerName')]",
                "fileNameFormat": "{iothub}/{partition}/{YYYY}/{MM}/{DD}/{HH}/{mm}",
                "batchFrequencyInSeconds": 100,
                "maxChunkSizeInBytes": 104857600,
                "encoding": "JSON",
                "name": "[variables('storageEndpoint')]"
              }
            ]
          },
          "routes": [
            {
              "name": "ContosoStorageRoute",
              "source": "DeviceMessages",
              "condition": "level=\"storage\"",
              "endpointNames": [
                "[variables('storageEndpoint')]"
              ],
              "isEnabled": true
            }
          ],
          "fallbackRoute": {
            "name": "$fallback",
            "source": "DeviceMessages",
            "condition": "true",
            "endpointNames": [
              "events"
            ],
            "isEnabled": true
          }
        },
        "messagingEndpoints": {
          "fileNotifications": {
            "lockDurationAsIso8601": "PT1M",
            "ttlAsIso8601": "PT1H",
            "maxDeliveryCount": 10
          }
        },
        "enableFileUploadNotifications": false,
        "cloudToDevice": {
          "maxDeliveryCount": 10,
          "defaultTtlAsIso8601": "PT1H",
          "feedback": {
            "lockDurationAsIso8601": "PT1M",
            "ttlAsIso8601": "PT1H",
            "maxDeliveryCount": 10
          }
        }
      },
      "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]"
      ]
    }
  ],
  "outputs": {
    "name": {
      "type": "string",
      "value": "[variables('iotHubName')]"
    },
    "resourceId": {
      "type": "string",
      "value": "[resourceId('Microsoft.Devices/IotHubs', variables('iotHubName'))]"
    },
    "resourceGroupName": {
      "type": "string",
      "value": "[resourceGroup().name]"
    },
    "location": {
      "type": "string",
      "value": "[parameters('location')]"
    }
  }
}

Şablonu dağıtma

Bu bölümde ARM şablonunu dağıtma adımları sağlanır.

  • ARM şablonunu dağıtarak kaynakları oluşturun.

    Azure'a Dağıt

Cihazdan buluta ileti gönderme

Bu bölümde, yeni IoT hub'ınıza bir cihaz kaydedip bu cihazdan IoT Hub'a ileti göndereceksiniz. Şablonun IoT hub'ında yapılandırıldığı yol, yalnızca ileti özelliğini level=storageiçeriyorsa depolamaya ileti gönderir. Bu yönlendirme koşulun beklendiği gibi çalışıp çalışmadığını test etmek için, bu özelliğe sahip bazı iletiler ve bazıları olmadan gönderilir.

İpucu

Bu hızlı başlangıçta kolaylık sağlamak için Azure CLI simülasyon cihazı kullanılmaktadır. Yönlendirme için ileti özellikleriyle cihazdan buluta ileti göndermeye yönelik bir kod örneği için bkz . .NET için Azure IoT SDK'sında HubRoutingSample .

  1. Şablonun sizin için oluşturduğu IoT hub'ının adını alın.

    Önceki bölümde varsayılan komutları kullandıysanız kaynaklarınız ContosoResourceGrp kaynak grubunda oluşturulmuştur. Farklı bir kaynak grubu kullandıysanız, aşağıdaki komutu eşleşecek şekilde güncelleştirin.

    az iot hub list --resource-group ContosoResourceGrp --output table
    
  2. Çıktıdan IoT hub'ınızın adını kopyalayın. Şu şekilde biçimlendirilmelidir: contosoHub{randomidentifier}

  3. Hub'a bir cihaz ekleyin.

    az iot hub device-identity create --device-id contosoDevice --hub-name {YourIoTHubName} 
    
  4. Cihazın simülasyonunu yapın ve cihazdan buluta iletiler gönderin.

    parametresi, --data ileti gövdesini ayarlamamıza olanak tanır.

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --data "This message won't be routed."
    

    Simülatör 100 ileti gönderir ve ardından bağlantıyı keser. Bu hızlı başlangıcın amaçları doğrultusunda 100'ün tamamını beklemeniz gerekmez.

    İpucu

    Azure CLI, iletileri gönderirken yazdırmaz. İletileri hub'ınıza ulaşırken izlemek istiyorsanız Visual Studio Code için Azure IoT Hub uzantısını yükleyebilir ve yerleşik uç noktayı izlemek için kullanabilirsiniz.

  5. Depolama alanına yönlendirilecek cihazdan buluta iletiler gönderin.

    parametresi, --properties varsayılan iletiye ileti, uygulama veya sistem özellikleri eklememizi sağlar. Bu hızlı başlangıç için IoT hub'ınızdaki yol, ileti özelliğini level=storageiçeren iletileri arıyor.

    az iot device simulate \
      --device-id contosoDevice \
      --hub-name {YourIoTHubName} \
      --properties level=storage \
      --data "This message will be routed to storage."
    

Dağıtılan kaynakları gözden geçirme

  1. Azure portalında oturum açın ve Kaynak Grubu'na tıklayın ve ardından depolama hesabını seçin.

  2. Dosyaları bulana kadar depolama hesabında detaya gidin.

    Depolama hesabı dosyalarına bakın

  3. Dosyalardan birini seçin ve İndir'i seçin ve dosyayı daha sonra bulabileceğiniz bir konuma indirin. 47 gibi sayısal bir ada sahiptir. Sonuna .txt ekleyin ve ardından dosyaya çift tıklayarak dosyayı açın.

  4. Dosyayı açtığınızda, her satır farklı bir ileti içindir; her iletinin gövdesi de şifrelenir. İletinin gövdesinde sorgular gerçekleştirmeniz için bu olmalıdır.

    Gönderilen iletileri görüntüleme

    Not

    Bu iletiler UTF-32 ve base64'te kodlanmıştır. İletiyi yeniden okursanız, ASCII olarak okumak için base64 ve utf-32'den kodunu çözmeniz gerekir. İlginizi çekiyorsa, yönlendirme öğreticisindeki ReadOneRowFromFile yöntemini kullanarak bu ileti dosyalarından birinden için bir tane okuyabilir ve kodunu ASCII olarak çözebilirsiniz. ReadOneRowFromFile, bu hızlı başlangıç için sıkıştırmasını kaldırdığınız IoT C# SDK deposundadır. Bu klasörün en üstündeki yol şu şekildedir: ./iothub/device/samples/getting started/RoutingTutorial/SimulatedDevice/Program.cs. Boole değerini readTheFile true olarak ayarlayın ve diskteki dosyanın yolunu sabit kodlayın; dosyadaki ilk satırı açıp çevirir.

Bu hızlı başlangıçta, ioT hub'ı ve depolama hesabı oluşturmak için bir ARM şablonu dağıttınız ve ardından hub'a ileti göndermek için bir program çalıştıracaksınız. İletiler, ileti özelliklerine göre yönlendirilir ve görüntülenebileceği depolama hesabında depolanır.

Kaynakları temizleme

Bu hızlı başlangıç sırasında eklenen kaynakları kaldırmak için Azure portalında oturum açın. Kaynak Grupları'nı seçin ve bu hızlı başlangıç için kullandığınız kaynak grubunu bulun. Kaynak grubunu ve ardından Sil'i seçin. Grup silindiğinde, gruptaki tüm kaynaklar da silinir.

Sonraki adımlar