チュートリアル用にソフトウェアをインストールしてリソースを設定するInstall software and set up resources for the tutorial

この 3 部構成のチュートリアルでは、鉄鉱石の不純物をシリカの割合として予測する機械学習モデルを作成し、そのモデルを Azure SQL Edge にデプロイします。In this three-part tutorial, you'll create a machine learning model to predict iron ore impurities as a percentage of Silica, and then deploy the model in Azure SQL Edge. 第 1 部では、必要なソフトウェアをインストールし、Azure リソースをデプロイします。In part one, you'll install the required software and deploy Azure resources.

前提条件Prerequisites

  1. Azure サブスクリプションをお持ちでない場合は、無料アカウントを作成してください。If you don't have an Azure subscription, create a free account.
  2. Python 3.6.8 をインストールします。Install Python 3.6.8.
    • Windows x86-x64 実行可能ファイルのインストーラーを使用します。Use the Windows x86-x64 executable installer
    • python.exe を PATH 環境変数 downloads/ に追加します)。Add python.exe to the PATH environment variable downloads/). ダウンロードは、「Tools For Visual Studio 2019」にあります。You can find the download under "Tools For Visual Studio 2019".
  3. Microsoft ODBC Driver 17 for SQL Server をインストールします。Install Microsoft ODBC Driver 17 for SQL Server.
  4. Azure Data Studio をインストールします。Install Azure Data Studio
  5. Azure Data Studio を開き、ノートブック用に Python を構成します。Open Azure Data Studio and configure Python for notebooks. 詳しくは、「ノートブック用の Python の構成」を参照してください。この手順には数分かかることがあります。 For details, see Configure Python for Notebooks.This step can take several minutes.
  6. Azure CLI の最新バージョンをインストールします。Install the latest version of Azure CLI. 次のスクリプトでは、AZ PowerShell が最新バージョン (3.5.0、2020 年 2 月) である必要があります。The following scripts require that AZ PowerShell be the latest version (3.5.0, Feb 2020).

PowerShell スクリプトを使用した Azure リソースのデプロイDeploy Azure resources using PowerShell Script

この Azure SQL Edge チュートリアルで必要な Azure リソースをデプロイします。Deploy the Azure resources required by this Azure SQL Edge tutorial. これらは、PowerShell スクリプトまたは Azure portal を使用してデプロイできます。These can be deployed either by using a PowerShell script or through the Azure portal. このチュートリアルでは、PowerShell スクリプトを使用します。This tutorial uses a PowerShell script.

  1. このチュートリアルで PowerShell スクリプトを実行するために必要なモジュールをインポートします。Import the modules needed to run the PowerShell script in this 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-ml
    

    注意

    この記事では、azure-iot と呼ばれる、Azure IoT 拡張機能の最新バージョンを使用します。This article uses the newest version of the Azure IoT extension, called azure-iot. 従来のバージョンは azure-iot-cli-ext と呼ばれます。一度にインストールできるバージョンは 1 つだけです。The legacy version is called azure-iot-cli-ext.You should only have one version installed at a time. コマンド az extension list を使用すると、現在インストールされている拡張機能を確認できます。You can use the command az extension list to validate the currently installed extensions.

    拡張機能の従来のバージョンを削除するには、az extension remove --name azure-cli-iot-ext を使用します。Use az extension remove --name azure-cli-iot-ext to remove the legacy version of the extension.

    拡張機能の新しいバージョンを追加するには、az extension add --name azure-iot を使用します。Use az extension add --name azure-iot to add the new version of the extension.

    インストール済みの拡張機能を表示するには、az extension list を使用してください。To see what extensions you have installed, use az extension list.

  2. PowerShell スクリプトで必要な変数を宣言します。Declare the variables required by the PowerShell script.

    $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. その他の変数を宣言します。Declare the rest of the variables.

    $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 "IoTAdmin@1234" -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. アセットの作成を開始するために Azure にログインします。To begin creating assets, log in to Azure.

    Login-AzAccount
    
    az login
    
  5. Azure サブスクリプション ID を設定します。Set the Azure subscription ID.

    Select-AzSubscription -Subscription $SubscriptionName
    az account set --subscription $SubscriptionName
    
  6. リソース グループがまだ存在していない場合は作成します。Create the resource group if it doesn't already exist.

    $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")
    }
    
  7. リソース グループにストレージア カウントとストレージ アカウント コンテナーを作成します。Create the storage account and storage account container in the resource group.

    $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. データベースの dacpac ファイルをストレージ アカウントにアップロードし、BLOB の SAS URL を生成します。Upload the database dacpac file to the storage account and generate a SAS URL for the blob. データベース dacpac BLOB の SAS URL をメモしておきます。Make a note of the SAS URL for the database dacpac blob.

    $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. このリソース グループ内に Azure コンテナー レジストリを作成します。Create an Azure container registry within this resource group.

    $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. ARM/AMD Docker イメージをコンテナー レジストリにプッシュします。Push the ARM/AMD docker images to the container registry.

    $containerRegistryCredentials = Get-AzContainerRegistryCredential -ResourceGroupName $ResourceGroup -Name $containerRegistryName
    
    $amddockerimageFile = Read-Host "Please Enter the location to the amd docker tar file:"
    $armdockerimageFile = Read-Host "Please Enter the location to the arm docker tar file:"
    $amddockertag = $containerRegistry.LoginServer + "/silicaprediction" + ":amd64"
    $armdockertag = $containerRegistry.LoginServer + "/silicaprediction" + ":arm64"
    
    docker login $containerRegistry.LoginServer --username $containerRegistryCredentials.Username --password $containerRegistryCredentials.Password
    
    docker import $amddockerimageFile $amddockertag
    docker push $amddockertag
    
    docker import $armdockerimageFile $armdockertag
    docker push $armdockertag
    
  11. リソース グループ内にネットワーク セキュリティ グループを作成します。Create the network security group within the resource group.

    $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")
    }
    
  12. SQL Edge 対応の Azure 仮想マシンを作成します。Create an Azure virtual machine enabled with SQL Edge. この VM は Edge デバイスとして機能します。This VM will act as an Edge device.

    $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 ")
    }
    
  13. リソース グループ内に IoT ハブを作成します。Create an IoT hub within the resource group.

    $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") 
    }
    
  14. Edge デバイスを IoT ハブに追加します。Add an Edge device to the IoT hub. この手順では、デバイスのデジタル アイデンティティのみが作成されます。This step only creates the device digital identity.

    $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
    
  15. デバイスのプライマリ接続文字列を取得します。Get the device primary connection string. これは、後から VM で必要になります。This will be needed later for the VM. 次のコマンドでは、デプロイのために Azure CLI が使用されます。The following command uses Azure CLI for deployments.

    $deviceConnectionString = az iot hub device-identity show-connection-string --device-id $EdgeDeviceId --hub-name $IoTHubName --resource-group $ResourceGroup --subscription $SubscriptionName
    $connString = $deviceConnectionString[1].Substring(23,$deviceConnectionString[1].Length-24)
    $connString
    
  16. Edge デバイス上の IoT Edge 構成ファイルの接続文字列を更新します。Update the connection string in the IoT Edge configuration file on the Edge device. 次のコマンドでは、デプロイのために Azure CLI が使用されます。The following commands use Azure CLI for deployments.

    $script = "/etc/iotedge/configedge.sh '" + $connString + "'"
    az vm run-command invoke -g $ResourceGroup -n $EdgeDeviceId  --command-id RunShellScript --script $script
    
  17. リソース グループ内に Azure Machine Learning ワークスペースを作成します。Create an Azure Machine Learning workspace within the resource group.

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

次の手順Next Steps