Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Importante
O Azure SQL Edge será descontinuado a partir de 30 de setembro de 2025. Para obter mais informações e opções de migração, veja o Aviso de aposentadoria.
Observação
O Azure SQL Edge não oferece mais suporte à plataforma ARM64.
Neste tutorial de três partes, você criará um modelo de machine learning para prever as impurezas no minério de ferro como um percentual de silica e implantará o modelo no SQL do Azure no Edge. Na primeira parte, você instalará o software necessário e implantará recursos do Azure.
Pré-requisitos
- Caso não tenha uma assinatura do Azure, crie uma conta gratuita.
- Instalar o Visual Studio 2019 com
- Ferramentas do Azure IoT Edge
- Desenvolvimento de multiplataforma do .NET Core
- Ferramentas de desenvolvimento de contêiner
- Instalar o Azure Data Studio
- Abra o Azure Data Studio e configure o Python para notebooks. Para obter mais detalhes, confira como Configurar o Python para Notebooks. Essa etapa pode levar vários minutos.
- Instale a versão mais recente da CLI do Azure. Os scripts a seguir exigem que o PowerShell do AZ seja da versão mais recente (3.5.0, fevereiro de 2020).
- Configure o ambiente para depurar, executar e testar a solução IoT Edge instalando a Ferramenta de Desenvolvimento do Azure IoT EdgeHub.
- Instalar o Docker.
Implantar os recursos do Azure usando o script do PowerShell
Implante os recursos do Azure exigidos por este tutorial do Azure SQL Edge. Esses recursos podem ser implantados usando um script do PowerShell ou por meio do portal do Azure. Este tutorial usa o script do PowerShell.
Observação
Este artigo usa a versão mais recente da extensão de IoT do Azure, chamada azure-iot. A versão herdada é chamada azure-cli-iot-ext. Você deve ter apenas uma versão instalada por vez. Use o comando az extension list para validar quais extensões estão instaladas.
Use az extension remove --name azure-cli-iot-ext para remover a versão herdada da extensão.
Use az extension add --name azure-iot para adicionar a nova versão da extensão.
Para ver quais extensões estão instaladas no momento, use az extension list.
Importe os módulos necessários para executar o script do PowerShell neste tutorial.
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-mlDeclare as variáveis exigidas pelo script do 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>"Declare as demais variáveis.
$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"Para começar a criar ativos, conecte-se ao Azure.
Login-AzAccount az loginDefina o ID da assinatura do Azure.
Select-AzSubscription -Subscription $SubscriptionName az account set --subscription $SubscriptionNameCrie o grupo de recursos se ele ainda não existir.
$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") }No grupo de recursos, crie a conta de armazenamento e o respectivo contêiner.
$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") }Faça upload do arquivo
dacpacdo banco de dados para a conta de armazenamento e gere uma URL SAS para o blob. Anote a URL SAS do blobdacpacdo banco de dados.$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) -FullUriCrie um registro de contêiner do Azure nesse grupo de recursos.
$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") }Crie o grupo de segurança de rede no grupo de recursos.
$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") }Crie uma máquina virtual do Azure com o SQL no Edge habilitado. Essa VM atua como um dispositivo do Edge.
$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 ") }Crie um hub IoT no grupo de recursos.
$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") }Adicione um dispositivo Edge ao hub IoT. Esta etapa cria apenas a identidade digital do dispositivo.
$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 $EdgeDeviceIdObtenha a cadeia de conexão primária do dispositivo, que é necessária mais tarde para a VM. O comando a seguir usa a CLI do Azure para implantações.
$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) $connStringAtualize a cadeia de conexão no arquivo de configuração do IoT Edge do dispositivo Edge. Os comandos a seguir usam a CLI do Azure para implantações.
$script = "/etc/iotedge/configedge.sh '" + $connString + "'" az vm run-command invoke -g $ResourceGroup -n $EdgeDeviceId --command-id RunShellScript --script $scriptCrie um workspace do Azure Machine Learning no grupo de recursos.
az ml workspace create -w $MyWorkSpace -g $ResourceGroup