다음을 통해 공유


Azure CLI 및 Python을 사용하여 Azure Stack Edge Pro GPU 디바이스에 VM 배포

적용 대상: Pro GPU SKU의 경우 예Azure Stack Edge Pro - GPUPro 2 SKU의 경우 예Azure Stack Edge Pro 2Pro R SKU의 경우 예Azure Stack Edge Pro RMini R SKU의 경우 예Azure Stack Edge Mini R

API를 사용하여 Azure Stack Edge 디바이스에서 VM(가상 머신)을 만들고 관리할 수 있습니다. 이러한 API는 로컬 Azure Stack Edge 엔드포인트를 사용하여 호출되는 표준 Azure Resource Manager API입니다. Azure Resource Manager API는 일관된 관리 계층을 제공하며, 이 경우 디바이스에 있는 로컬 구독에서 VM을 생성, 업데이트 및 삭제할 수 있습니다. Azure PowerShell cmdlet을 통해 Azure Stack Edge에서 실행되는 Azure Resource Manager에 연결할 수 있습니다.

이 자습서에서는 Python 및 Azure API를 사용하여 Azure Stack Edge Pro 디바이스에서 VM을 만들고 관리하는 방법을 설명합니다.

VM 배포 워크플로

다음 다이어그램에 배포 워크플로가 나와 있습니다.

VM 배포 워크플로

배포 워크플로에 대한 개략적인 요약은 다음과 같습니다.

  1. Azure Resource Manager에 연결
  2. 리소스 그룹 만들기
  3. 저장소 계정 만들기
  4. 호스트 파일에 Blob URI 추가
  5. 인증서 설치
  6. VHD 업로드
  7. VHD에서 관리 디스크 만들기
  8. 이미지 관리 디스크에서 VM 이미지 만들기
  9. 이전에 만든 리소스로 VM 만들기
  10. VNet 만들기
  11. VNet 서브넷 ID를 사용하여 VNIC 만들기

워크플로 다이어그램에 대한 자세한 설명은 Azure PowerShell을 사용하여 Azure Stack Edge Pro 디바이스에 VM 배포를 참조하세요. Azure Resource Manager에 연결하는 방법에 대한 자세한 내용은 Azure PowerShell을 사용하여 Azure Resource Manager에 연결을 참조하세요.

필수 조건

Azure CLI와 Python을 사용하여 Azure Stack Edge Pro 디바이스에서 VM 만들기 및 관리를 시작하기 전에, 다음 단계에 나열된 사전 요구 사항을 완료했는지 확인해야 합니다.

  1. 1단계: Azure Stack Edge Pro 디바이스 구성의 설명대로 Azure Stack Edge Pro 디바이스에서 네트워크 설정을 완료했습니다.

  2. 컴퓨팅용 네트워크 인터페이스를 사용하도록 설정했습니다. 이 네트워크 인터페이스 IP는 VM 배포를 위한 가상 스위치를 만드는 데 사용됩니다. 이 프로세스를 안내하는 단계는 다음과 같습니다.

    1. Compute로 이동합니다. 가상 스위치를 만드는 데 사용할 네트워크 인터페이스를 선택합니다.

      Important

      컴퓨팅용 포트는 하나만 구성할 수 있습니다.

    2. 네트워크 인터페이스에서 컴퓨팅을 사용하도록 설정합니다. 이 네트워크 인터페이스에 해당하는 가상 스위치를 Azure Stack Edge Pro가 만들고 관리합니다.

  3. Azure Stack Edge Pro 디바이스와 클라이언트의 신뢰할 수 있는 저장소에 모든 인증서를 만들고 설치했습니다. 2단계: 인증서 만들기 및 설치에 설명된 절차를 따릅니다.

  4. Azure Stack Edge Pro 디바이스에 대해 Base-64로 인코딩된 .cer 인증서(PEM 형식)를 만들었습니다. 해당 인증서가 디바이스에 서명 체인으로 이미 업로드되었으며 클라이언트의 신뢰할 수 있는 루트 저장소에 설치되어 있습니다. 이 인증서가 클라이언트에서 작동하려면 Python용 pem 형식도 필요합니다.

    certutil 명령을 사용하여 이 인증서를 pem 형식으로 변환합니다. 인증서가 포함된 디렉터리에서 이 명령을 실행해야 합니다.

    certutil.exe <SourceCertificateName.cer> <DestinationCertificateName.pem>
    

    다음 샘플은 명령 사용법을 보여줍니다.

    PS C:\Certificates> certutil.exe -encode aze-root.cer aze-root.pem
    Input Length = 2150
    Output Length = 3014
    CertUtil: -encode command completed successfully.
    PS C:\Certificates>
    

    pem을 나중에 Python 저장소에도 추가합니다.

  5. 디바이스의 로컬 웹 UI에 있는 네트워크 페이지에서 디바이스 IP를 할당했습니다. 이 IP를 다음에 추가합니다.

    • 클라이언트의 호스트 파일 또는
    • DNS 서버 구성

    Important

    엔드포인트 이름 확인을 위해 DNS 서버 구성을 수정하는 것이 좋습니다.

    1. 메모장을 관리자(파일을 저장하려면 관리자 권한이 필요함) 권한으로 시작한 다음, C:\Windows\System32\Drivers\etc에 있는 hosts 파일을 엽니다.

      Windows 탐색기 호스트 파일

    2. 다음 항목을 디바이스에 적합한 값으로 대체하고 hosts 파일에 추가합니다.

      <Device IP> login.<appliance name>.<DNS domain>
      <Device IP> management.<appliance name>.<DNS domain>
      <Device IP> <storage name>.blob.<appliance name>.<DNS domain>
      
    3. 다음 이미지를 참조하세요. 호스트 파일을 저장합니다.

      메모장의 hosts 파일

  6. 이 절차에 사용된 Python 스크립트를 다운로드합니다.

  7. Azure CLI에 대한 환경을 준비합니다.

1단계: 클라이언트에서 Azure CLI/Python 설정

프로필 확인 및 Azure CLI 설치

  1. 클라이언트에 Azure CLI를 설치합니다. 이 예제에서는 Azure CLI 2.0.80이 설치되었습니다. Azure CLI의 버전을 확인하려면 az --version 명령을 실행합니다.

    다음은 위 명령의 샘플 출력입니다.

    PS C:\windows\system32> az --version
    azure-cli                         2.0.80
    
    command-modules-nspkg              2.0.3
    core                              2.0.80
    nspkg                              3.0.4
    telemetry                          1.0.4
    Extensions:
    azure-cli-iot-ext                  0.7.1
    
    Python location 'C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe'
    Extensions directory 'C:\.azure\cliextensions'
    
    Python (Windows) 3.6.6 (v3.6.6:4cf1f54eb7, Jun 27 2018, 02:47:15) [MSC v.1900 32 bit (Intel)]
    
    Legal docs and information: aka.ms/AzureCliLegal
    
    Your CLI is up-to-date.
    
    Please let us know how we are doing: https://aka.ms/clihats
    PS C:\windows\system32>
    

    Azure CLI가 없으면 Windows에서 Azure CLI를 다운로드하여 설치합니다. Windows 명령 프롬프트 또는 Windows PowerShell을 통해 Azure CLI를 실행할 수 있습니다.

  2. CLI의 Python 위치를 기록해 둡니다. Azure CLI에 대해 신뢰할 수 있는 루트 인증서 저장소의 위치를 확인하려면 Python 위치가 필요합니다.

  3. 이 문서에 사용된 샘플 스크립트를 실행하려면 다음 Python 라이브러리 버전이 필요합니다.

    azure-common==1.1.23
    azure-mgmt-resource==2.1.0
    azure-mgmt-network==2.7.0
    azure-mgmt-compute==5.0.0
    azure-mgmt-storage==1.5.0
    azure-storage-blob==1.2.0rc1
    haikunator
    msrestazure==0.6.2
    

    해당 버전을 설치하려면 다음 명령을 실행합니다.

    .\python.exe -m pip install haikunator
    

    다음 샘플 출력은 Haikunator 설치를 보여줍니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe -m pip install haikunator
    
    Collecting haikunator
      Downloading https://files.pythonhosted.org/packages/43/fa/130968f1a1bb1461c287b9ff35c630460801783243acda2cbf3a4c5964a5/haikunator-2.1.0-py2.py3-none-any.whl
    
    Installing collected packages: haikunator
    Successfully installed haikunator-2.1.0
    You are using pip version 10.0.1, however version 20.0.1 is available.
    You should consider upgrading using the 'python -m pip install --upgrade pip' command.
    
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> 
    

    다음 샘플 출력은 msrestazure의 pip 설치를 보여줍니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe -m pip install msrestazure==0.6.2
    Requirement already satisfied: msrestazure==0.6.2 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (0.6.2)
    Requirement already satisfied: msrest<2.0.0,>=0.6.0 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from msrestazure==0.6.2) (0.6.10)
    === CUT ===========================  CUT ==================================
    Requirement already satisfied: cffi!=1.11.3,>=1.8 in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from cryptography>=1.1.0->adal<2.0.0,>=0.6.0->msrestazure==0.6.2) (1.13.2)
    Requirement already satisfied: pycparser in c:\program files (x86)\microsoft sdks\azure\cli2\lib\site-packages (from cffi!=1.11.3,>=1.8->cryptography>=1.1.0->adal<2.0.0,>=0.6.0->msrestazure==0.6.2) (2.18)
    You are using pip version 10.0.1, however version 20.0.1 is available.
    You should consider upgrading using the 'python -m pip install --upgrade pip' command.
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    

Azure Stack Edge Pro CA 루트 인증서 신뢰

  1. 컴퓨터에서 인증서 위치를 찾습니다. 위치는 az cli를 설치한 위치에 따라 다를 수 있습니다. 관리자 권한으로 Windows PowerShell을 실행합니다. az cli가 Python을 설치한 경로(C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\python.exe)로 전환합니다.

    인증서 위치를 가져오려면 다음 명령을 입력합니다.

    .\python -c "import certifi; print(certifi.where())"
    

    cmdlet은 인증서 위치를 아래와 같이 반환합니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python -c "import certifi; print(certifi.where())"
    C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    

    나중에 사용할 수 있도록 이 위치를 기록해 둡니다. - C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\lib\site-packages\certifi\cacert.pem

  2. Azure Stack Edge Pro CA 루트 인증서를 기존 Python 인증서에 추가하여 신뢰합니다. 이전에 PEM 인증서를 저장한 경로를 제공합니다.

    $pemFile = "<Path to the pem format certificate>"
    

    경로의 예는 "C:\VM-scripts\rootteam3device.pem"입니다.

    그런 다음, Windows PowerShell에 다음과 같은 일련의 명령을 입력합니다.

    $root = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
        $root.Import($pemFile)
    
    Write-Host "Extracting required information from the cert file"
    $md5Hash    = (Get-FileHash -Path $pemFile -Algorithm MD5).Hash.ToLower()
    $sha1Hash   = (Get-FileHash -Path $pemFile -Algorithm SHA1).Hash.ToLower()
    $sha256Hash = (Get-FileHash -Path $pemFile -Algorithm SHA256).Hash.ToLower()
    
    $issuerEntry  = [string]::Format("# Issuer: {0}", $root.Issuer)
    $subjectEntry = [string]::Format("# Subject: {0}", $root.Subject)
    $labelEntry   = [string]::Format("# Label: {0}", $root.Subject.Split('=')[-1])
    $serialEntry  = [string]::Format("# Serial: {0}", $root.GetSerialNumberString().ToLower())
    $md5Entry = [string]::Format("# MD5 Fingerprint: {0}", $md5Hash)
    $sha1Entry= [string]::Format("# SHA1 Fingerprint: {0}", $sha1Hash)
    $sha256Entry  = [string]::Format("# SHA256 Fingerprint: {0}", $sha256Hash)
    $certText = (Get-Content -Path $pemFile -Raw).ToString().Replace("`r`n","`n")
    
    $rootCertEntry = "`n" + $issuerEntry + "`n" + $subjectEntry + "`n" + $labelEntry + "`n" + `
    $serialEntry + "`n" + $md5Entry + "`n" + $sha1Entry + "`n" + $sha256Entry + "`n" + $certText
    
    Write-Host "Adding the certificate content to Python Cert store"
    Add-Content "${env:ProgramFiles(x86)}\Microsoft SDKs\Azure\CLI2\Lib\site-packages\certifi\cacert.pem" $rootCertEntry
    
    Write-Host "Python Cert store was updated to allow the Azure Stack Edge Pro CA root certificate"
    

Azure Stack Edge Pro에 연결

  1. Azure Stack Edge Pro 환경을 az cloud register 명령을 사용해 등록합니다.

    일부 시나리오에서는 직접 아웃바운드 인터넷 연결이 SSL 인터셉션을 적용하는 프록시 또는 방화벽을 통해 라우팅됩니다. 이 경우 az cloud register 명령이 "클라우드에서 엔드포인트를 가져올 수 없습니다."와 같은 오류를 출력하며 실패할 수 있습니다. 이 오류를 해결하려면 Windows PowerShell에서 다음 환경 변수를 설정합니다.

    $ENV:AZURE_CLI_DISABLE_CONNECTION_VERIFICATION = 1 
    $ENV:ADAL_PYTHON_SSL_NO_VERIFY = 1
    
  2. Azure Resource Manager 엔드포인트, 리소스가 생성된 위치 및 원본 VHD가 있는 경로에 대한 스크립트의 환경 변수를 설정합니다. 리소스의 위치는 모든 Azure Stack Edge Pro 디바이스에서 고정되며 dbelocal로 설정됩니다. 주소 접두사 및 개인 IP 주소도 지정해야 합니다. 다음 환경 변수는 모두 "dbelocal"로 하드코딩되어야 하는 AZURE_RESOURCE_LOCATION을 제외하고 사용자 값에 기반한 값입니다.

    $ENV:ARM_ENDPOINT = "https://management.team3device.teatraining1.com"
    $ENV:AZURE_RESOURCE_LOCATION = "dbelocal"
    $ENV:VHD_FILE_PATH = "C:\Downloads\Ubuntu1604\Ubuntu13.vhd"
    $ENV:ADDRESS_PREFIXES = "5.5.0.0/16"
    $ENV:PRIVATE_IP_ADDRESS = "5.5.174.126"
    
  3. 환경을 등록합니다. 다음 매개 변수를 az cloud register가 작동할 때 사용합니다.

    설명 예시
    환경 이름 연결하려는 환경의 이름 이름 제공(예: aze-environ)
    Resource Manager 엔드포인트 URL은 https://Management.<appliancename><dnsdomain>입니다.
    이 URL을 얻으려면 디바이스의 로컬 웹 UI에서 디바이스 페이지로 이동합니다.
    예: https://management.team3device.teatraining1.com.
    az cloud register -n <environmentname> --endpoint-resource-manager "https://management.<appliance name>.<DNS domain>"
    

    다음 샘플은 위 명령의 사용법을 보여줍니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud register -n az-new-env --endpoint-resource-manager "https://management.team3device.teatraining1.com"
    
  4. 다음 명령을 사용하여 활성 환경을 설정합니다.

    az cloud set -n <EnvironmentName>
    

    다음 샘플은 위 명령의 사용법을 보여줍니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud set -n az-new-env
    Switched active cloud to 'az-new-env'.
    Use 'az login' to log in to this cloud.
    Use 'az account set' to set the active subscription.
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    
  5. Azure Stack Edge Pro 환경에 az login 명령을 사용해 로그인합니다. 사용자나 서비스 주체로 Azure Stack Edge Pro 환경에 로그인할 수 있습니다.

    사용자로 로그인하려면 다음 단계를 수행합니다.

    az login 명령 내에 직접 사용자 이름과 암호를 지정하거나 브라우저를 사용하여 인증할 수 있습니다. 계정에 다단계 인증을 사용하도록 설정된 경우 후자를 수행해야 합니다.

    다음 샘플은 az login 사용법을 보여줍니다.

    PS C:\Certificates> az login -u EdgeARMuser
    

    로그인 명령을 사용하면 암호를 입력하라는 메시지가 표시됩니다. Azure Resource Manager 암호를 제공합니다.

    다음 샘플은 암호를 제공한 후 성공한 로그인의 출력을 보여줍니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az login -u EdgeARMuser
    Password:
    [
         {
             "cloudName": "az-new-env",
             "id": "A4257FDE-B946-4E01-ADE7-674760B8D1A3",
             "isDefault": true,
             "name": "Default Provider Subscription",
             "state": "Enabled",
             "tenantId": "aaaabbbb-0000-cccc-1111-dddd2222eeee",
             "user": {
                 "name": "EdgeArmUser@localhost",
                 "type": "user"
             }
         }
    ]
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    

    idtenantId 값은 각각 Azure Resource Manager 구독 ID와 Azure Resource Manager 테넌트 ID에 해당하며 이후 단계에서 사용되므로 기록해 둡니다.

    서비스 주체로 작업하려면 다음 환경 변수를 설정해야 합니다.

    $ENV:ARM_TENANT_ID = "aaaabbbb-0000-cccc-1111-dddd2222eeee"
    $ENV:ARM_CLIENT_ID = "cbd868c5-7207-431f-8d16-1cb144b50971"
    $ENV:ARM_CLIENT_SECRET - "<Your Azure Resource Manager password>"
    $ENV:ARM_SUBSCRIPTION_ID = "<Your subscription ID>"
    

    Azure Resource Manager 클라이언트 ID는 하드 코딩됩니다. Azure Resource Manager 테넌트 ID와 Azure Resource Manager 구독 ID는 모두 이전에 실행한 az login 명령의 출력에 표시됩니다. Azure Resource Manager 클라이언트 암호는 내가 설정한 Azure Resource Manager 암호입니다.

    자세한 내용은 Azure Resource Manager 암호를 참조하세요.

  6. 프로필을 2019-03-01-hybrid 버전으로 변경합니다. 프로필 버전을 변경하려면 다음 명령을 실행합니다.

    az cloud update --profile 2019-03-01-hybrid
    

    다음 샘플은 az cloud update 사용법을 보여줍니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> az cloud update --profile 2019-03-01-hybrid
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    

2단계: VM 만들기

VM을 생성하도록 Python 스크립트가 제공됩니다. 사용자로 로그인했는지 또는 서비스 주체로 설정되었는지에 따라 스크립트는 그에 따른 입력을 수행하여 VM을 만듭니다.

  1. Python이 설치된 디렉터리에서 Python 스크립트를 실행합니다.
.\python.exe example_dbe_arguments_name_https.py cli
  1. 스크립트를 실행하면 VHD를 업로드하는 데 20~30분이 걸립니다. 업로드 작업의 진행률을 보려면 Azure Storage Explorer 또는 AzCopy를 사용하면 됩니다.

    다음은 스크립트 실행에 성공한 출력의 샘플입니다. 스크립트는 리소스 그룹 내의 모든 리소스를 만들고, 해당 리소스를 사용하여 VM을 만든 다음, 마지막으로 생성된 모든 리소스를 포함한 리소스 그룹을 삭제합니다.

    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2> .\python.exe example_dbe_arguments_name_https.py cli
    
    Create Resource Group
    Create a storage account
    Uploading to Azure Stack Storage as blob:
            ubuntu13.vhd
    
    Listing blobs...
            ubuntu13.vhd
    
    VM image resource id:
                /subscriptions/.../resourceGroups/azure-sample-group-virtual-machines118/providers/Microsoft.Compute/images/UbuntuImage
    
    Create Vnet
    Create Subnet
    Create NIC
    Creating Linux Virtual Machine
    Tag Virtual Machine
    Create (empty) managed Data Disk
    Get Virtual Machine by Name
    Attach Data Disk
    Detach Data Disk
    Deallocating the VM (to prepare for a disk resize)
    Update OS disk size
    Start VM
    Restart VM
    Stop VM
    
    List VMs in subscription
            VM: VmName118
    
    List VMs in resource group
            VM: VmName118
    
    Delete VM
    All example operations completed successfully!
    
    Delete Resource Group
    Deleted: azure-sample-group-virtual-machines118
    PS C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2>
    

다음 단계

Linux 가상 머신용 일반적인 Az CLI 명령