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 jako procentu krzemionki, 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
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
- Instalowanie programu Visual Studio 2019 za pomocą polecenia
- Narzędzia usługi Azure IoT Edge
- Programowanie międzyplatformowe na platformie .NET Core
- Narzędzia programistyczne dla kontenerów
- Instalowanie programu Azure Data Studio
- Otwórz program Azure Data Studio i skonfiguruj język Python dla notesów. Aby uzyskać szczegółowe informacje, zobacz Konfigurowanie języka Python dla notesów. Ten krok może potrwać kilka minut.
- Zainstaluj najnowszą wersję interfejsu wiersza polecenia platformy Azure. Następujące skrypty wymagają, aby program AZ PowerShell był najnowszą wersją (3.5.0, luty 2020 r.).
- Skonfiguruj środowisko do debugowania, uruchamiania i testowania rozwiązania usługi IoT Edge, instalując narzędzie deweloperskie usługi Azure IoT EdgeHub.
- 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 zobaczyć, jakie rozszerzenia zostały zainstalowane, użyj polecenia az extension list
.
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
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>"
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"
Aby rozpocząć tworzenie zasobów, zaloguj się na platformie Azure.
Login-AzAccount az login
Ustaw identyfikator subskrypcji platformy Azure.
Select-AzSubscription -Subscription $SubscriptionName az account set --subscription $SubscriptionName
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 Gorup") New-AzResourceGroup -Name $ResourceGroup -Location $location } else { Write-Output ("Resource Group $ResourceGroup exists") }
Utwórz konto magazynu i kontener konta magazynu 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") }
Przekaż plik bazy danych
dacpac
na konto magazynu i wygeneruj adres URL sygnatury dostępu współdzielonego dla obiektu blob. Zanotuj adres URL sygnatury dostępu współdzielonego dla obiektu blob bazy danychdacpac
.$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
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") }
Utwórz sieciowa grupa zabezpieczeń 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") }
Tworzenie maszyny wirtualnej platformy Azure z włączoną przeglądarką 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 ") }
Utwórz centrum IoT Hub w grupie 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") }
Dodaj urządzenie usługi Edge do centrum IoT Hub. Ten krok powoduje utworzenie tożsamości cyfrowej 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
Pobierz podstawowy parametry połączenia urządzenia, który jest potrzebny później dla 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
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
Utwórz obszar roboczy usługi Azure Machine Learning w grupie zasobów.
az ml workspace create -w $MyWorkSpace -g $ResourceGroup