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 コマンドレット オプションを使用します。

  • ストレージ アカウントを使用してデプロイを手早く作成する

    • このパラメーター セットでは、デプロイ用のパッケージ (.cspkg または .zip) ファイル、構成 (.cscfg) ファイル、定義 (.csdef) ファイルをストレージ アカウントの入力として使用します。
    • このコマンドレットは、Cloud Services (延長サポート) ロール プロファイル、ネットワーク プロファイル、OS プロファイルを最小限の入力から作成します。
    • 証明書を入力するには、キー コンテナー名を指定する必要があります。 キー コンテナー内の証明書サムプリントは、デプロイの構成 (.cscfg) ファイルで指定した証明書に対して検証されます。
  • Shared Access Signature URI を使用してデプロイを手早く作成する

    • このパラメーター セットでは、パッケージ (.cspkg または .zip) ファイルの Shared Access Signature (SAS) URI と、構成 (.cscfg) ファイルおよび定義 (.csdef) ファイルのローカル パスを入力します。 ストレージ アカウントの入力は必要ありません。
    • このコマンドレットは、クラウド サービス ロール プロファイル、ネットワーク プロファイル、および OS プロファイルの最小限の入力を作成します。
    • 証明書を入力するには、キー コンテナー名を指定する必要があります。 キー コンテナー内の証明書サムプリントは、デプロイの構成 (.cscfg) ファイルで指定した証明書に対して検証されます。
  • ロール プロファイル、OS プロファイル、ネットワーク プロファイル、拡張プロファイルの Shared Access Signature URI を使用してデプロイを作成する

    • このパラメーター セットでは、パッケージ (.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 (延長サポート) では、Basic SKU のパブリック IP アドレスのみがサポートされています。 Standard 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 アドレスをロード バランサーのフロントエンドに関連付けます。 Cloud Services (延長サポート) リソースと同じサブスクリプション内に、クラシック SKU ロード バランサー リソースが Azure プラットフォームによって自動的に作成されます。 このロード バランサーは、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 (延長サポート) のデプロイと同じリージョンおよびサブスクリプション内に存在し、一意の名前を持っている必要があります。 詳細については、「Azure 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 の 2 つのロールが定義されています。 ロール プロファイル情報は、デプロイ構成 (.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