Azure PowerShell을 사용하여 Cloud Services(추가 지원) 배포

이 문서에서는 Az.CloudService Azure PowerShell 모듈을 사용하여 여러 역할(WebRole 및 WorkerRole)이 있는 Azure Cloud Services(추가 지원) 배포를 만드는 방법을 보여 줍니다.

필수 조건

Azure PowerShell을 사용하여 배포를 만들기 위한 필수 조건으로 다음 단계를 완료합니다.

  1. Cloud Services(추가 지원)에 대한 배포 필수 구성 요소를 검토하고 필요한 리소스를 만듭니다.

  2. Az.CloudService PowerShell 모듈을 설치합니다.

    Install-Module -Name Az.CloudService 
    
  3. 새 리소스 그룹 만들기 기존 리소스 그룹을 사용하는 경우 이 단계는 선택 사항입니다.

    New-AzResourceGroup -ResourceGroupName “ContosOrg” -Location “East US” 
    
  4. Cloud Services(추가 지원) 배포를 위한 패키지(.cspkg 또는 .zip) 파일과 구성(.cscfg) 파일을 저장하기 위해 Azure에 스토리지 계정과 컨테이너를 만듭니다. 스토리지 계정 이름에는 고유한 이름을 사용해야 합니다. 기존 스토리지 계정을 사용하는 경우 이 단계는 선택 사항입니다.

    $storageAccount = New-AzStorageAccount -ResourceGroupName “ContosOrg” -Name “contosostorageaccount” -Location “East US” -SkuName “Standard_RAGRS” -Kind “StorageV2” 
    $container = New-AzStorageContainer -Name “contosocontainer” -Context $storageAccount.Context -Permission Blob 
    

Cloud Services(추가 지원) 배포

Cloud Services(추가 지원)를 배포하려면 다음 PowerShell cmdlet 옵션을 사용합니다.

  • 스토리지 계정을 사용하여 배포를 빠르게 만듭니다.

    • 이 매개 변수 집합은 배포를 위한 패키지(.cspkg 또는 .zip) 파일, 구성(.cscfg) 파일, 정의(.csdef) 파일을 스토리지 계정의 입력으로 입력합니다.
    • 이 cmdlet은 최소 입력으로 Cloud Services(추가 지원) 역할 프로필, 네트워크 프로필 및 OS 프로필을 만듭니다.
    • 인증서를 입력하려면 키 자격 증명 모음 이름을 지정해야 합니다. 키 자격 증명 모음의 인증서 지문은 배포에 대한 구성(.cscfg) 파일에서 지정한 인증서에 대해 유효성을 검사합니다.
  • 공유 액세스 서명 URI를 사용하여 배포를 빠르게 만듭니다.

    • 이 매개 변수 집합은 구성(.cscfg) 파일과 정의(.csdef) 파일에 대한 로컬 경로와 함께 패키지(.cspkg 또는 .zip) 파일의 SAS(공유 액세스 서명) URI를 입력합니다. 스토리지 계정 입력이 필요하지 않습니다.
    • 이 cmdlet은 최소 입력으로 클라우드 서비스 역할 프로필, 네트워크 프로필 및 OS 프로필을 만듭니다.
    • 인증서를 입력하려면 키 자격 증명 모음 이름을 지정해야 합니다. 키 자격 증명 모음의 인증서 지문은 배포에 대한 구성(.cscfg) 파일에서 지정한 인증서에 대해 유효성을 검사합니다.
  • 공유 액세스 서명 URI가 있는 역할 프로필, OS 프로필, 네트워크 프로필 및 확장 프로필을 사용하여 배포를 만듭니다.

    • 이 매개 변수 집합은 패키지(.cspkg 또는 .zip) 파일과 구성(.cscfg) 파일의 SAS URI를 입력합니다.
    • 역할 프로필, 네트워크 프로필, OS 프로필, 확장 프로필 등 프로필 개체를 지정해야 합니다. 프로필은 구성(.cscfg) 파일과 정의(.csdef) 파일에 설정한 값과 일치해야 합니다.

스토리지 계정을 사용하여 배포를 빠르게 만들기

패키지(.cspkg 또는 .zip) 파일, 구성(.cscfg) 파일, 정의(.csdef) 파일을 사용하여 Cloud Services(추가 지원) 배포를 만듭니다.

$cspkgFilePath = "<Path to .cspkg file>"
$cscfgFilePath = "<Path to .cscfg file>"
$csdefFilePath = "<Path to .csdef file>"
      
# Create a Cloud Services (extended support) deployment   
New-AzCloudService
-Name "ContosoCS" `
-ResourceGroupName "ContosOrg" `
-Location "EastUS" `
-ConfigurationFile $cscfgFilePath `
-DefinitionFile $csdefFilePath `
-PackageFile $cspkgFilePath `
-StorageAccount $storageAccount `
[-KeyVaultName <string>]

SAS URI를 사용하여 배포를 빠르게 만들기

  1. 배포용 패키지(.cspkg 또는 .zip) 파일을 스토리지 계정에 업로드합니다.

    $tokenStartTime = Get-Date 
    $tokenEndTime = $tokenStartTime.AddYears(1) 
    $cspkgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cspkg” -Container “contosocontainer” -Blob “ContosoApp.cspkg” -Context $storageAccount.Context 
    $cspkgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cspkgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cspkgUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri + $cspkgToken 
    $cscfgFilePath = "<Path to cscfg file>"
    $csdefFilePath = "<Path to csdef file>"
    
  2. 패키지(.cspkg 또는 .zip) 파일, 구성(.cscfg) 파일, 정의(.csdef) 파일 SAS URI를 사용하여 Cloud Services(추가 지원) 배포를 만듭니다.

    New-AzCloudService
        -Name "ContosoCS" `
        -ResourceGroupName "ContosOrg" `
        -Location "EastUS" `
        -ConfigurationFile $cspkgFilePath `
        -DefinitionFile $csdefFilePath `
        -PackageURL $cspkgUrl `
        [-KeyVaultName <string>]
    

프로필 개체 및 SAS URI를 사용하여 배포 만들기

  1. Cloud Services(추가 지원) 구성(.cscfg) 파일을 스토리지 계정에 업로드합니다.

    $cscfgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cscfg” -Container contosocontainer -Blob “ContosoApp.cscfg” -Context $storageAccount.Context 
    $cscfgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cscfgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cscfgUrl = $cscfgBlob.ICloudBlob.Uri.AbsoluteUri + $cscfgToken 
    
  2. Cloud Services(추가 지원) 패키지(.cspkg 또는 .zip) 파일을 스토리지 계정에 업로드합니다.

    $tokenStartTime = Get-Date 
    $tokenEndTime = $tokenStartTime.AddYears(1) 
    $cspkgBlob = Set-AzStorageBlobContent -File “./ContosoApp/ContosoApp.cspkg” -Container “contosocontainer” -Blob “ContosoApp.cspkg” -Context $storageAccount.Context 
    $cspkgToken = New-AzStorageBlobSASToken -Container “contosocontainer” -Blob $cspkgBlob.Name -Permission rwd -StartTime $tokenStartTime -ExpiryTime $tokenEndTime -Context $storageAccount.Context 
    $cspkgUrl = $cspkgBlob.ICloudBlob.Uri.AbsoluteUri + $cspkgToken 
    
  3. 가상 네트워크 및 서브넷을 만듭니다. 기존 네트워크와 서브넷을 사용하는 경우 이 단계는 선택 사항입니다. 이 예에서는 Cloud Services(추가 지원) 역할(WebRole 및 WorkerRole) 모두에 대해 단일 가상 네트워크와 서브넷을 사용합니다.

    $subnet = New-AzVirtualNetworkSubnetConfig -Name "ContosoWebTier1" -AddressPrefix "10.0.0.0/24" -WarningAction SilentlyContinue 
    $virtualNetwork = New-AzVirtualNetwork -Name “ContosoVNet” -Location “East US” -ResourceGroupName “ContosOrg” -AddressPrefix "10.0.0.0/24" -Subnet $subnet 
    
  4. 공용 IP 주소를 만들고 공용 IP 주소에 대한 DNS 레이블 값을 설정합니다. Cloud Services(추가 지원)는 기본 SKU 공용 IP 주소만 지원합니다. 표준 SKU 공용 IP 주소는 Cloud Services(추가 지원)에서 작동하지 않습니다.

    고정 IP 주소를 사용하는 경우 배포를 위한 구성(.cscfg) 파일에서 예약된 IP 주소로 참조해야 합니다.

    $publicIp = New-AzPublicIpAddress -Name “ContosIp” -ResourceGroupName “ContosOrg” -Location “East US” -AllocationMethod Dynamic -IpAddressVersion IPv4 -DomainNameLabel “contosoappdns” -Sku Basic 
    
  5. 네트워크 프로필 개체를 만든 다음 공용 IP 주소를 부하 분산 장치의 프런트 엔드에 연결합니다. Azure 플랫폼은 Cloud Services(추가 지원) 리소스와 동일한 구독에 클래식 SKU 부하 분산 장치 리소스를 자동으로 만듭니다. 부하 분산 장치는 Azure Resource Manager의 읽기 전용 리소스입니다. Cloud Services(추가 지원) 구성(.cscfg) 파일과 배포(.csdef) 파일을 통해서만 리소스를 업데이트할 수 있습니다.

    $publicIP = Get-AzPublicIpAddress -ResourceGroupName ContosOrg -Name ContosIp  
    $feIpConfig = New-AzCloudServiceLoadBalancerFrontendIPConfigurationObject -Name 'ContosoFe' -PublicIPAddressId $publicIP.Id 
    $loadBalancerConfig = New-AzCloudServiceLoadBalancerConfigurationObject -Name 'ContosoLB' -FrontendIPConfiguration $feIpConfig 
    $networkProfile = @{loadBalancerConfiguration = $loadBalancerConfig} 
    
  6. 키 자격 증명 모음을 생성합니다. 키 자격 증명 모음에는 Cloud Services(추가 지원) 역할과 관련된 인증서가 저장됩니다. 키 자격 증명 모음은 Cloud Services(추가 지원) 배포와 동일한 지역 및 구독에 있어야 하며 고유한 이름을 가져야 합니다. 자세한 내용은 Cloud Services에 인증서 사용(추가 지원)을 참조하세요.

    New-AzKeyVault -Name "ContosKeyVault” -ResourceGroupName “ContosOrg” -Location “East US” 
    
  7. 키 자격 증명 모음 액세스 정책을 업데이트하고, 인증서 권한을 사용자 계정에 부여합니다.

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -EnabledForDeployment
    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -UserPrincipalName 'user@domain.com' -PermissionsToCertificates create,get,list,delete 
    

    또는 ObjectId 값을 사용하여 액세스 정책을 설정합니다. ObjectId 값을 가져오려면 Get-AzADUser를 실행합니다.

    Set-AzKeyVaultAccessPolicy -VaultName 'ContosKeyVault' -ResourceGroupName 'ContosOrg' -ObjectId 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' -PermissionsToCertificates create,get,list,delete 
    
  8. 다음 예에서는 키 자격 증명 모음에 자체 서명된 인증서를 추가합니다. Cloud Services(추가 지원) 역할에 대한 구성(.cscfg) 파일을 통해 인증서 지문을 추가해야 합니다.

    $Policy = New-AzKeyVaultCertificatePolicy -SecretContentType "application/x-pkcs12" -SubjectName "CN=contoso.com" -IssuerName "Self" -ValidityInMonths 6 -ReuseKeyOnRenewal 
    Add-AzKeyVaultCertificate -VaultName "ContosKeyVault" -Name "ContosCert" -CertificatePolicy $Policy 
    
  9. OS 프로필 메모리 내 개체를 만듭니다. OS 프로필은 Cloud Services(추가 지원) 역할과 연관된 인증서를 지정하는데, 이는 이전 단계에서 만든 인증서입니다.

    $keyVault = Get-AzKeyVault -ResourceGroupName ContosOrg -VaultName ContosKeyVault 
    $certificate = Get-AzKeyVaultCertificate -VaultName ContosKeyVault -Name ContosCert 
    $secretGroup = New-AzCloudServiceVaultSecretGroupObject -Id $keyVault.ResourceId -CertificateUrl $certificate.SecretId 
    $osProfile = @{secret = @($secretGroup)} 
    
  10. 역할 프로필 메모리 내 개체를 만듭니다. 역할 프로필은 이름, 용량, 계층 등의 역할 SKU 특정 속성을 정의합니다. 이 예에서는 frontendRole과 backendRole이라는 두 가지 역할이 정의됩니다. 역할 프로필 정보는 배포 구성(.cscfg) 파일과 정의(.csdef) 파일에 정의된 역할 구성과 일치해야 합니다.

    $frontendRole = New-AzCloudServiceRoleProfilePropertiesObject -Name 'ContosoFrontend' -SkuName 'Standard_D1_v2' -SkuTier 'Standard' -SkuCapacity 2 
    $backendRole = New-AzCloudServiceRoleProfilePropertiesObject -Name 'ContosoBackend' -SkuName 'Standard_D1_v2' -SkuTier 'Standard' -SkuCapacity 2 
    $roleProfile = @{role = @($frontendRole, $backendRole)} 
    
  11. (선택 사항) Cloud Services(추가 지원) 배포에 추가할 메모리 내 개체에 확장 프로필을 만듭니다. 이 예에서는 RDP(원격 데스크톱 프로토콜) 확장을 추가합니다.

    $credential = Get-Credential 
    $expiration = (Get-Date).AddYears(1) 
    $rdpExtension = New-AzCloudServiceRemoteDesktopExtensionObject -Name 'RDPExtension' -Credential $credential -Expiration $expiration -TypeHandlerVersion '1.2.1' 
    
    $storageAccountKey = Get-AzStorageAccountKey -ResourceGroupName "ContosOrg" -Name "contosostorageaccount"
    $configFile = "<WAD public configuration file path>"
    $wadExtension = New-AzCloudServiceDiagnosticsExtension -Name "WADExtension" -ResourceGroupName "ContosOrg" -CloudServiceName "ContosCS" -StorageAccountName "contosostorageaccount" -StorageAccountKey $storageAccountKey[0].Value -DiagnosticsConfigurationPath $configFile -TypeHandlerVersion "1.5" -AutoUpgradeMinorVersion $true 
    $extensionProfile = @{extension = @($rdpExtension, $wadExtension)} 
    

    구성(.cscfg) 파일에는 PublicConfig 태그만 있어야 하며 다음 예와 같이 네임스페이스를 포함해야 합니다.

    <?xml version="1.0" encoding="utf-8"?>
    <PublicConfig xmlns="http://schemas.microsoft.com/ServiceHosting/2010/10/DiagnosticsConfiguration">
        ...............
    </PublicConfig>
    
  12. (선택 사항) PowerShell 해시 테이블에서 배포에 추가할 태그를 정의할 수 있습니다.

    $tag=@{"Owner" = "Contoso"} 
    
  13. 정의한 프로필 개체와 SAS URI를 사용하여 Cloud Services(추가 지원) 배포를 만듭니다.

    $cloudService = New-AzCloudService ` 
        -Name “ContosoCS” ` 
        -ResourceGroupName “ContosOrg” ` 
        -Location “East US” ` 
        -PackageUrl $cspkgUrl ` 
        -ConfigurationUrl $cscfgUrl ` 
        -UpgradeMode 'Auto' ` 
        -RoleProfile $roleProfile ` 
        -NetworkProfile $networkProfile  ` 
        -ExtensionProfile $extensionProfile ` 
        -OSProfile $osProfile `
        -Tag $tag