Краткое руководство. Создание задания Stream Analytics с помощью Azure PowerShell

Модуль PowerShell используется для создания ресурсов Azure и управления ими с помощью командлетов или скриптов PowerShell. В этом кратком руководстве показано, как использовать модуль Azure PowerShell для развертывания и запуска задания Azure Stream Analytics.

Пример задания считывает данные потоковой передачи с устройства Центр Интернета вещей. Входные данные создаются онлайн-симулятором Raspberry Pi. Задание Stream Analytics преобразует данные с помощью языка запросов Stream Analytics для фильтрации сообщений с температурой выше 27°. Затем он записывает выходные события в файл в хранилище BLOB-объектов.

Перед началом

  • Если у вас еще нет подписки Azure, создайте бесплатную учетную запись Azure.
  • Для работы с этим кратким руководством требуется модуль Azure PowerShell. Запустите Get-Module -ListAvailable Az, чтобы найти версию, установленную на вашем локальном компьютере. Если вам необходимо выполнить установку или обновление, см. статью об установке модуля Azure PowerShell.
  • Некоторые действия Центр Интернета вещей не поддерживаются Azure PowerShell и должны выполняться с помощью Azure CLI версии 2.0.70 или более поздней и расширения Интернета вещей для Azure CLI. Установите Azure CLI и используйте az extension add --name azure-iot для установки расширения Интернета вещей.

Вход в Azure

Войдите в свою подписку Azure с помощью команды Connect-AzAccount и введите учетные данные Azure во всплывающем окне браузера.

# Connect to your Azure account
Connect-AzAccount

Если у вас есть несколько подписок, выберите ту, которую вы хотите использовать при работе с этим кратким руководством, запустив следующие командлеты. Не забудьте заменить <your subscription name> именем своей подписки:

# List all available subscriptions.
Get-AzSubscription

# Select the Azure subscription you want to use to create the resource group and resources.
Get-AzSubscription -SubscriptionName "<your subscription name>" | Select-AzSubscription

Создание группы ресурсов

Создайте группу ресурсов Azure с помощью командлета New-AzResourceGroup. Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими.

$resourceGroup = "StreamAnalyticsRG"
$location = "WestUS2"
New-AzResourceGroup `
    -Name $resourceGroup `
    -Location $location

Подготовка входных данных

Прежде чем определить задание Stream Analytics, подготовьте данные, которые настроены как входные данные задания.

Следующий блок кода Azure CLI содержит множество команд для подготовки входных данных, необходимых заданию. Ознакомьтесь со следующими разделами, чтобы понять код.

  1. В окне PowerShell выполните az login команду , чтобы войти в учетную запись Azure.

    После успешного входа Azure CLI возвращает список подписок. Скопируйте подписку, используемую для этого краткого az account set руководства, и выполните команду , чтобы выбрать эту подписку. Выберите ту же подписку, что и в предыдущем разделе при использовании PowerShell. Не забудьте заменить <your subscription name> именем своей подписки.

    az login
    
    az account set --subscription "<your subscription>"
    
  2. Создайте Центр Интернета вещей с помощью az iot hub create команды . Этот пример создает Центр Интернета вещей с именем MyASAIoTHub. Так как имена Центров Интернета вещей являются уникальными, необходимо придумать собственное имя Центра Интернета вещей. Задайте для номера SKU значение F1, чтобы использовать уровень "Бесплатный", если он доступен в вашей подписке. В противном случае выберите следующий самый низкий уровень.

    az iot hub create --name "MyASAIoTHub" --resource-group $resourceGroup --sku S1
    

    После создания Центра Интернета вещей получите его строку подключения с помощью команды az iot hub show-connection-string. Скопируйте всю строку подключения и сохраните ее. Он понадобится при добавлении Центр Интернета вещей в качестве входных данных в задание Stream Analytics.

    az iot hub show-connection-string --resource-group $resourceGroup --hub-name "MyASAIoTHub"
    
  3. Добавьте устройство для Центр Интернета вещей с помощью az iot hub device-identity create команды . В этом примере создается устройство с именем MyASAIoTDevice.

    az iot hub device-identity create --resource-group $resourceGroup --hub-name "MyASAIoTHub" --device-id "MyASAIoTDevice"
    
  4. Получите строку подключения устройства с помощью az iot hub device-identity connection-string show команды . Скопируйте всю строку подключения и сохраните ее для использования при создании симулятора Raspberry Pi.

    az iot hub device-identity connection-string show --resource-group $resourceGroup --hub-name "MyASAIoTHub" --device-id "MyASAIoTDevice" --output table
    

    Пример выходных данных.

    HostName=MyASAIoTHub.azure-devices.net;DeviceId=MyASAIoTDevice;SharedAccessKey=a2mnUsg52+NIgYudxYYUNXI67r0JmNubmfVafojG8=
    

Создание хранилища BLOB-объектов

Следующий блок кода Azure PowerShell использует команды для создания хранилища BLOB-объектов, принимающего выходные данные задания. Просмотрите разделы, чтобы понять код.

  1. Создайте стандартную учетную запись хранения общего назначения с помощью командлета New-AzStorageAccount. В этом примере создается учетная запись хранения myasaquickstartstorage с локально избыточным хранилищем (LRS) и шифрованием больших двоичных объектов (включено по умолчанию).

  2. Получите контекст учетной записи хранения $storageAccount.Context, определяющий необходимую учетную запись хранения. Работая в учетной записи хранения, ссылайтесь на контекст, вместо того чтобы многократно предоставлять учетные данные.

  3. Создайте контейнер хранилища с помощью командлета New-AzStorageContainer.

  4. Скопируйте ключ к хранилищу данных, который выводится в коде, и сохраните этот ключ, чтобы позднее создать выходные данные задания потоковой передачи.

    $storageAccountName = "myasaquickstartstorage"
    $storageAccount = New-AzStorageAccount `
      -ResourceGroupName $resourceGroup `
      -Name $storageAccountName `
      -Location $location `
      -SkuName Standard_LRS `
      -Kind Storage
    
    $ctx = $storageAccount.Context
    $containerName = "container1"
    
    New-AzStorageContainer `
      -Name $containerName `
      -Context $ctx
    
    $storageAccountKey = (Get-AzStorageAccountKey `
      -ResourceGroupName $resourceGroup `
      -Name $storageAccountName).Value[0]
    
    Write-Host "The <storage account key> placeholder needs to be replaced in your output json files with this key value:"
    Write-Host $storageAccountKey -ForegroundColor Cyan
    

Создание задания Stream Analytics

Создайте задание Stream Analytics с помощью командлета New-AzStreamAnalyticsJob. Этот командлет принимает имя задания, имя группы ресурсов, расположение и имя SKU в качестве параметров. Для задания можно присвоить любое понятное описательное имя. Оно может содержать только буквенно-цифровые символы, дефисы и знаки подчеркивания. Длина должна составлять от 3 до 63 символов.

Запустите командлет New-AzStreamAnalyticsJob.

$jobName = "MyStreamingJob"
New-AzStreamAnalyticsJob `
  -ResourceGroupName $resourceGroup `
  -Name $jobName `
  -Location centralus `
  -SkuName Standard

Настройка входных данных для задания

Добавьте входные данные в задание с помощью командлета New-AzStreamAnalyticsInput. Этот командлет принимает имя задания, имя входных данных задания, имя группы ресурсов и определение входных данных задания в качестве параметров. Определение входных данных задания — это JSON-файл, содержащий свойства, необходимые для настройки входных данных задания. В этом примере вы создаете хранилище BLOB-объектов в качестве входных данных.

На вашем локальном компьютере создайте файл с именем JobInputDefinition.json и добавьте в него следующие данные JSON.

Важно!

  • Замените accesspolicykeySharedAccessKey частью строки подключения Центр Интернета вещей, сохраненной в предыдущем разделе.
  • Если вы использовали другое имя для Центра Интернета вещей, обновите значение для iotHubNamespace.
{
    "properties": {
        "type": "Stream",
        "datasource": {
            "type": "Microsoft.Devices/IotHubs",
            "properties": {
                "iotHubNamespace": "MyASAIoTHub",
                "sharedAccessPolicyName": "iothubowner",
                "sharedAccessPolicyKey": "accesspolicykey",
                "endpoint": "messages/events",
                "consumerGroupName": "$Default"
                }
        },
        "compression": {
            "type": "None"
        },
        "serialization": {
            "type": "Json",
            "properties": {
                "encoding": "UTF8"
            }
        }
    },
    "name": "IoTHubInput",
    "type": "Microsoft.StreamAnalytics/streamingjobs/inputs"
}

Задайте для переменной $jobInputDefinitionFile PowerShell путь, по которому вы сохранили JSON-файл определения входных данных задания.

$jobInputDefinitionFile = "C:\JobInputDefinition.json"

Затем выполните New-AzStreamAnalyticsInput командлет , чтобы создать Центр Интернета вещей Azure входных данных для задания Stream Analytics.

$jobInputName = "IoTHubInput"
New-AzStreamAnalyticsInput `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobInputDefinitionFile `
  -Name $jobInputName

Настройка выходных данных для задания

Добавьте выходные данные в задание с помощью командлета New-AzStreamAnalyticsOutput. Этот командлет принимает имя задания, имя выходных данных задания, имя группы ресурсов и определение выходных данных задания в качестве параметров. Определение выходных данных задания — это JSON-файл, содержащий свойства, необходимые для настройки выходных данных задания. В этом примере в качестве выходных данных используется хранилище BLOB-объектов.

На вашем локальном компьютере создайте файл с именем JobOutputDefinition.json и добавьте в него следующие данные JSON.

Важно!

Замените значение для accountKey ключом доступа учетной записи хранения, который является значением, хранящимся в $storageAccountKey значении.

{
    "properties": {
        "datasource": {
            "type": "Microsoft.Storage/Blob",
            "properties": {
                "storageAccounts": [
                    {
                      "accountName": "asaquickstartstorage",
                      "accountKey": "<storage account key>"
                    }
                ],
                "container": "container1",
                "pathPattern": "output/",
                "dateFormat": "yyyy/MM/dd",
                "timeFormat": "HH"
            }
        },
        "serialization": {
            "type": "Json",
            "properties": {
                "encoding": "UTF8",
                "format": "LineSeparated"
            }
        }
    },
    "name": "BlobOutput",
    "type": "Microsoft.StreamAnalytics/streamingjobs/outputs"
}

Задайте для переменной $jobOutputDefinitionFile PowerShell путь, по которому вы сохранили JSON-файл определения выходных данных задания.

$jobOutputDefinitionFile = "C:\JobOutputDefinition.json"

Затем выполните New-AzStreamAnalyticsOutput командлет , чтобы создать выходные данные Хранилище BLOB-объектов Azure для задания Stream Analytics.

$jobOutputName = "BlobOutput"

New-AzStreamAnalyticsOutput `
  -ResourceGroupName $resourceGroup `
  -JobName $jobName `
  -File $jobOutputDefinitionFile `
  -Name $jobOutputName

Определение запроса преобразования

Добавьте преобразование в задание с помощью командлета New-AzStreamAnalyticsTransformation. Этот командлет принимает имя задания, имя преобразования задания, имя группы ресурсов и определение преобразования задания в качестве параметров. На вашем локальном компьютере создайте файл с именем JobTransformationDefinition.json и добавьте в него следующие данные JSON. JSON-файл содержит параметр запроса, который определяет запрос преобразования:

{
    "name":"MyTransformation",
    "type":"Microsoft.StreamAnalytics/streamingjobs/transformations",
    "properties":{
        "streamingUnits":1,
        "script":null,
        "query":"SELECT * INTO BlobOutput FROM IoTHubInput WHERE Temperature > 27"
    }
}

Затем выполните командлет New-AzStreamAnalyticsTransformation.

$jobTransformationName = "MyJobTransformation"
$jobTransformationDefinitionFile = "C:\JobTransformationDefinition.json"
New-AzStreamAnalyticsTransformation `
    -ResourceGroupName $resourceGroup `
    -JobName $jobName `
    -Query "SELECT * INTO BlobOutput FROM IoTHubInput WHERE Temperature > 27" `
    -StreamingUnit 1 `
    -Name $jobTransformationName

Запуск IoT-симулятора

  1. Откройте онлайн-симулятор Raspberry Pi для Интернета вещей Azure.

  2. Замените значения заполнителя в 15-й строке строкой подключения устройства Центра Интернета вещей, которую вы сохранили при работе с предыдущим разделом.

  3. Нажмите кнопку Запустить. В выходных данных должны присутствовать показания датчика и сообщения, отправляемые в Центр Интернета вещей.

    Снимок экрана: симулятор Интернета вещей Azure Raspberry Pi.

Запуск задания Stream Analytics и просмотр выходных данных

Запустите задание с помощью командлета Start-AzStreamAnalyticsJob. Этот командлет принимает имя задания, имя группы ресурсов, режим начала вывода задания и время запуска в качестве параметров. OutputStartMode принимает значения JobStartTime, CustomTime или LastOutputEventTime. Дополнительные сведения о том, к чему относится каждое из этих значений, см. в разделе параметров в документации по PowerShell.

После запуска следующего командлета, если задание запустится, будет возвращено значение True в качестве выходных данных. В контейнере хранилища будет создана выходная папка с преобразованными данными.

Start-AzStreamAnalyticsJob `
  -ResourceGroupName $resourceGroup `
  -Name $jobName `
  -OutputStartMode 'JobStartTime'

Очистка ресурсов

Ставшие ненужными группу ресурсов, задание потоковой передачи и все связанные ресурсы можно удалить. При удалении задания будет прекращена тарификация за единицы потоковой передачи, потребляемые заданием. Если вы планируете использовать задание в дальнейшем, остановите его и не выполняйте процедуру его удаления. Если вам больше не нужно это задание, удалите все ресурсы, созданные в ходе работы с этим кратким руководством, выполнив следующий командлет.

Remove-AzResourceGroup `
  -Name $resourceGroup

Дальнейшие действия

В этом кратком руководстве вы развернули простое задание Stream Analytics, используя PowerShell. Вы также можете развертывать задания Stream Analytics, используя портал Azure и Visual Studio.

Дополнительные сведения о настройке других источников входных данных и обнаружении в режиме реального времени см. в следующей статье: