Udostępnij za pośrednictwem


Instalowanie oprogramowania i konfigurowanie zasobów na potrzeby samouczka

Ważne

Usługa Azure SQL Edge zostanie wycofana 30 września 2025 r. Aby uzyskać więcej informacji i opcji migracji, zobacz powiadomienie o wycofaniu.

Uwaga

Usługa Azure SQL Edge nie obsługuje już platformy ARM64.

W tym trzyczęściowym samouczku utworzysz model uczenia maszynowego w celu przewidywania zanieczyszczeń rudy żelaza względem procentu krzemionki (SiO₂), a następnie wdrożysz model w usłudze Azure SQL Edge. W części 1 zainstalujesz wymagane oprogramowanie i wdrożysz zasoby platformy Azure.

Wymagania wstępne

  1. Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
  2. Zainstaluj Visual Studio 2019 przy użyciu
    • Narzędzia usługi Azure IoT Edge
    • Programowanie międzyplatformowe na platformie .NET Core
    • Narzędzia programistyczne dla kontenerów
  3. Instalowanie programu Azure Data Studio
  4. Otwórz program Azure Data Studio i skonfiguruj język Python dla notatek. Aby uzyskać więcej informacji, zobacz Konfiguracja Pythona dla notesów. Ten krok może potrwać kilka minut.
  5. Zainstaluj najnowszą wersję Azure CLI. Następujące skrypty wymagają, aby program AZ PowerShell był najnowszą wersją (3.5.0, luty 2020 r.).
  6. Skonfiguruj środowisko do debugowania, uruchamiania i testowania rozwiązania usługi IoT Edge, instalując narzędzie deweloperskie usługi Azure IoT EdgeHub.
  7. Zainstaluj platformę Docker.

Wdrażanie zasobów platformy Azure przy użyciu skryptu programu PowerShell

Wdróż zasoby platformy Azure wymagane przez ten samouczek usługi Azure SQL Edge. Te zasoby można wdrożyć przy użyciu skryptu programu PowerShell lub witryny Azure Portal. W tym samouczku jest używany skrypt programu PowerShell.

Uwaga

W tym artykule jest używana najnowsza wersja rozszerzenia Usługi Azure IoT o nazwie azure-iot. Starsza wersja nosi nazwę azure-cli-iot-ext. Jednocześnie powinna być zainstalowana tylko jedna wersja. Możesz użyć polecenia az extension list , aby zweryfikować aktualnie zainstalowane rozszerzenia.

Użyj az extension remove --name azure-cli-iot-ext polecenia , aby usunąć starszą wersję rozszerzenia.

Użyj az extension add --name azure-iot polecenia , aby dodać nową wersję rozszerzenia.

Aby sprawdzić, jakie rozszerzenia są obecnie zainstalowane, użyj polecenia az extension list.

  1. Zaimportuj moduły potrzebne do uruchomienia skryptu programu PowerShell w tym samouczku.

    Import-Module Az.Accounts -RequiredVersion 1.7.3
    Import-Module -Name Az -RequiredVersion 3.5.0
    Import-Module Az.IotHub -RequiredVersion 2.1.0
    Import-Module Az.Compute -RequiredVersion 3.5.0
    az extension add --name azure-iot
    az extension add --name azure-cli-ml
    
  2. Zadeklaruj zmienne wymagane przez skrypt programu PowerShell.

    $ResourceGroup = "<name_of_the_resource_group>"
    $IoTHubName = "<name_of_the_IoT_hub>"
    $location = "<location_of_your_Azure_Subscription>"
    $SubscriptionName = "<your_azure_subscription>"
    $NetworkSecGroup = "<name_of_your_network_security_group>"
    $StorageAccountName = "<name_of_your_storage_account>"
    
  3. Zadeklaruj resztę zmiennych.

    $IoTHubSkuName = "S1"
    $IoTHubUnits = 4
    $EdgeDeviceId = "IronOrePredictionDevice"
    $publicIpName = "VMPublicIP"
    $imageOffer = "iot_edge_vm_ubuntu"
    $imagePublisher = "microsoft_iot_edge"
    $imageSku = "ubuntu_1604_edgeruntimeonly"
    $AdminAcc = "iotadmin"
    $AdminPassword = ConvertTo-SecureString "<password>" -AsPlainText -Force
    $VMSize = "Standard_DS3"
    $NetworkName = "MyNet"
    $NICName = "MyNIC"
    $SubnetName = "MySubnet"
    $SubnetAddressPrefix = "10.0.0.0/24"
    $VnetAddressPrefix = "10.0.0.0/16"
    $MyWorkSpace = "SQLDatabaseEdgeDemo"
    $containerRegistryName = $ResourceGroup + "ContRegistry"
    
  4. Aby rozpocząć tworzenie zasobów, zaloguj się na platformie Azure.

    Login-AzAccount
    
    az login
    
  5. Ustaw identyfikator subskrypcji platformy Azure.

    Select-AzSubscription -Subscription $SubscriptionName
    az account set --subscription $SubscriptionName
    
  6. Utwórz grupę zasobów, jeśli jeszcze nie istnieje.

    $rg = Get-AzResourceGroup -Name $ResourceGroup
    if($rg -eq $null)
    {
        Write-Output("Resource Group $ResourceGroup does not exist, creating Resource Group")
        New-AzResourceGroup -Name $ResourceGroup -Location $location
    }
    else
    {
        Write-Output ("Resource Group $ResourceGroup exists")
    }
    
  7. Utwórz konto przechowywania i kontener przechowywania w grupie zasobów.

    $sa = Get-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageAccountName
    if ($sa -eq $null)
    {
        New-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageAccountName -SkuName Standard_LRS -Location $location -Kind Storage
        $sa = Get-AzStorageAccount -ResourceGroupName $ResourceGroup -Name $StorageAccountName
        $storageKey = Get-AzStorageAccountKey -ResourceGroupName $ResourceGroup -Name $StorageAccountName
        $storageContext = New-AzStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $storageKey[0].Value
        New-AzStorageContainer -Name "sqldatabasedacpac" -Context $storageContext
    }
    else
    {
       Write-Output ("Storage Account $StorageAccountName exists in Resource Group $ResourceGroup")
    }
    
  8. Przekaż plik bazy danych dacpac na konto magazynu i wygeneruj adres URL dla współdzielonego dostępu do obiektu blob. Zanotuj URL SAS dla obiektu blob bazy danych dacpac.

    $file = Read-Host "Please Enter the location to the zipped Database DacPac file:"
    Set-AzStorageBlobContent -File $file -Container "sqldatabasedacpac" -Blob "SQLDatabasedacpac.zip" -Context $sa.Context
    $DacpacFileSASURL = New-AzStorageBlobSASToken -Container "sqldatabasedacpac" -Blob "SQLDatabasedacpac.zip" -Context $sa.Context -Permission r -StartTime (Get-Date).DateTime -ExpiryTime (Get-Date).AddMonths(12) -FullUri
    
  9. Utwórz rejestr kontenerów platformy Azure w tej grupie zasobów.

    $containerRegistry = Get-AzContainerRegistry -ResourceGroupName $ResourceGroup -Name $containerRegistryName
    if ($containerRegistry -eq $null)
    {
        New-AzContainerRegistry -ResourceGroupName $ResourceGroup -Name $containerRegistryName -Sku Standard -Location $location -EnableAdminUser
        $containerRegistry = Get-AzContainerRegistry -ResourceGroupName $ResourceGroup -Name $containerRegistryName
    }
    else
    {
        Write-Output ("Container Registry $containerRegistryName exists in Resource Group $ResourceGroup")
    }
    
  10. Utwórz grupę zabezpieczeń sieciowych w grupie zasobów.

    $nsg = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Name $NetworkSecGroup
    if($nsg -eq $null)
    {
        Write-Output("Network Security Group $NetworkSecGroup does not exist in the resource group $ResourceGroup")
    
        $rule1 = New-AzNetworkSecurityRuleConfig -Name "SSH" -Description "Allow SSH" -Access Allow -Protocol Tcp -Direction Inbound -Priority 100 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 22
        $rule2 = New-AzNetworkSecurityRuleConfig -Name "SQL" -Description "Allow SQL" -Access Allow -Protocol Tcp -Direction Inbound -Priority 101 -SourceAddressPrefix Internet -SourcePortRange * -DestinationAddressPrefix * -DestinationPortRange 1600
        New-AzNetworkSecurityGroup -Name $NetworkSecGroup -ResourceGroupName $ResourceGroup -Location $location -SecurityRules $rule1, $rule2
    
        $nsg = Get-AzNetworkSecurityGroup -ResourceGroupName $ResourceGroup -Name $NetworkSecGroup
    }
    else
    {
        Write-Output ("Network Security Group $NetworkSecGroup exists in the resource group $ResourceGroup")
    }
    
  11. Utwórz maszynę wirtualną platformy Azure z włączonym SQL Edge. Ta maszyna wirtualna działa jako urządzenie brzegowe.

    $AzVM = Get-AzVM -ResourceGroupName $ResourceGroup -Name $EdgeDeviceId
    If($AzVM -eq $null)
    {
        Write-Output("The Azure VM with Name- $EdgeVMName is not present in the Resource Group- $ResourceGroup ")
    
        $SingleSubnet = New-AzVirtualNetworkSubnetConfig -Name $SubnetName -AddressPrefix $SubnetAddressPrefix
        $Vnet = New-AzVirtualNetwork -Name $NetworkName -ResourceGroupName $ResourceGroup -Location $location -AddressPrefix $VnetAddressPrefix -Subnet $SingleSubnet
        $publicIp = New-AzPublicIpAddress -Name $publicIpName -ResourceGroupName $ResourceGroup -AllocationMethod Static -Location $location
        $NIC = New-AzNetworkInterface -Name $NICName -ResourceGroupName $ResourceGroup -Location $location -SubnetId $Vnet.Subnets[0].Id -NetworkSecurityGroupId $nsg.Id -PublicIpAddressId $publicIp.Id
    
        ##Set-AzNetworkInterfaceIpConfig -Name "ipconfig1"  -NetworkInterface $NIC -PublicIpAddress $publicIp
    
        $Credential = New-Object System.Management.Automation.PSCredential ($AdminAcc, $AdminPassword);
    
        $VirtualMachine = New-AzVMConfig -VMName $EdgeDeviceId -VMSize $VMSize
        $VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Linux -ComputerName $EdgeDeviceId -Credential $Credential
        $VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $NIC.Id
        $VirtualMachine = Set-AzVMSourceImage -VM $VirtualMachine -PublisherName $imagePublisher -Offer $imageOffer -Skus $imageSku -Version latest
        $VirtualMachine = Set-AzVMPlan -VM $VirtualMachine -Name $imageSku -Publisher $imagePublisher -Product $imageOffer
    
        $AzVM = New-AzVM -ResourceGroupName $ResourceGroup -Location $location -VM $VirtualMachine -Verbose
        $AzVM = Get-AzVM -ResourceGroupName $ResourceGroup -Name $EdgeDeviceId
    
    }
    else
    {
        Write-Output ("The Azure VM with Name- $EdgeDeviceId is present in the Resource Group- $ResourceGroup ")
    }
    
  12. Utwórz centrum IoT w ramach grupy zasobów.

    $iotHub = Get-AzIotHub -ResourceGroupName $ResourceGroup -Name $IoTHubName
    If($iotHub -eq $null)
    {
        Write-Output("IoTHub $IoTHubName does not exists, creating The IoTHub in the resource group $ResourceGroup")
        New-AzIotHub -ResourceGroupName $ResourceGroup -Name $IoTHubName -SkuName $IoTHubSkuName -Units $IoTHubUnits -Location $location -Verbose
    }
    else
    {
        Write-Output ("IoTHub $IoTHubName present in the resource group $ResourceGroup")
    }
    
  13. Dodaj urządzenie Edge do centrum IoT. Ten krok jedynie tworzy tożsamość cyfrową urządzenia.

    $deviceIdentity = Get-AzIotHubDevice -ResourceGroupName $ResourceGroup -IotHubName $IoTHubName -DeviceId $EdgeDeviceId
    If($deviceIdentity -eq $null)
    {
        Write-Output("The Edge Device with DeviceId- $EdgeDeviceId is not registered to the IoTHub- $IoTHubName ")
        Add-AzIotHubDevice -ResourceGroupName $ResourceGroup -IotHubName $IoTHubName -DeviceId $EdgeDeviceId -EdgeEnabled
    }
    else
    {
        Write-Output ("The Edge Device with DeviceId- $EdgeDeviceId is registered to the IoTHub- $IoTHubName")
    }
    $deviceIdentity = Get-AzIotHubDevice -ResourceGroupName $ResourceGroup -IotHubName $IoTHubName -DeviceId $EdgeDeviceId
    
  14. Pobierz podstawowy ciąg parametrów połączenia urządzenia, który będzie potrzebny później do maszyny wirtualnej. Następujące polecenie używa interfejsu wiersza polecenia platformy Azure do wdrożeń.

    $deviceConnectionString = az iot hub device-identity connection-string show --device-id $EdgeDeviceId --hub-name $IoTHubName --resource-group $ResourceGroup --subscription $SubscriptionName
    $connString = $deviceConnectionString[1].Substring(23,$deviceConnectionString[1].Length-24)
    $connString
    
  15. Zaktualizuj parametry połączenia w pliku konfiguracji usługi IoT Edge na urządzeniu edge. Następujące polecenia używają interfejsu wiersza polecenia platformy Azure do wdrożeń.

    $script = "/etc/iotedge/configedge.sh '" + $connString + "'"
    az vm run-command invoke -g $ResourceGroup -n $EdgeDeviceId  --command-id RunShellScript --script $script
    
  16. Utwórz obszar roboczy usługi Azure Machine Learning w grupie zasobów.

    az ml workspace create -w $MyWorkSpace -g $ResourceGroup