Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Jeśli nie masz subskrypcji platformy Azure, utwórz bezpłatne konto.
- 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
- Instalowanie programu Azure Data Studio
- 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.
- Zainstaluj najnowszą wersję Azure CLI. 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 sprawdzić, jakie rozszerzenia są obecnie 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 Group") New-AzResourceGroup -Name $ResourceGroup -Location $location } else { Write-Output ("Resource Group $ResourceGroup exists") }
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") }
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 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 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") }
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 ") }
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") }
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
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
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