次の方法で共有


チュートリアル: Azure PowerShell を使用した Virtual Machine Scale Sets へのアプリケーションのインストール

スケール セット内の仮想マシン (VM) インスタンスでアプリケーションを実行する には、まず、アプリケーション コンポーネントと必要なファイルをインストールする必要があります。 前のチュートリアルでは、カスタム VM イメージを作成および使用して VM インスタンスをデプロイする方法について学習しました。 このカスタム イメージには、手動によるアプリケーションのインストールと構成が含まれていました。 このほか、各 VM インスタンスがデプロイされた後のスケール セットへのアプリケーションのインストールを自動化したり、既にスケール セットで実行されているアプリケーションを更新したりできます。 このチュートリアルで学習する内容は次のとおりです。

  • スケール セットへのアプリケーションの自動インストール
  • Azure カスタム スクリプト拡張機能の使用
  • スケール セットで実行中のアプリケーションの更新

Azure サブスクリプションをお持ちでない場合は、開始する前に 無料アカウント を作成してください。

Azure Cloud Shell

Azure では、ブラウザーを介して使用できる対話型のシェル環境、Azure Cloud Shell がホストされています。 Cloud Shell で Bash または PowerShell を使用して、Azure サービスを操作できます。 ローカル環境に何もインストールしなくても、Cloud Shell にプレインストールされているコマンドを使用して、この記事のコードを実行できます。

Azure Cloud Shell を開始するには、以下のようにします。

オプション 例とリンク
コードまたはコマンド ブロックの右上隅にある [使ってみる] を選択します。 [使ってみる] を選択しても、コードまたはコマンドは Cloud Shell に自動的にはコピーされません。 Azure Cloud Shell の [使ってみる] の例を示すスクリーンショット。
https://shell.azure.com に移動するか、[Cloud Shell を起動する] ボタンを選択して、ブラウザーで Cloud Shell を開きます。 Azure Cloud Shell を起動するボタン。
Azure portal の右上にあるメニュー バーの [Cloud Shell] ボタンを選択します。 Azure portal の [Cloud Shell] ボタンを示すスクリーンショット

Azure Cloud Shell を使用するには、以下のようにします。

  1. Cloud Shell を開始します。

  2. コード ブロック (またはコマンド ブロック) の [コピー] ボタンを選択し、コードまたはコマンドをコピーします。

  3. Windows と Linux では Ctrl+Shift+V キーを選択し、macOS では Cmd+Shift+V キーを選択して、コードまたはコマンドを Cloud Shell セッションに貼り付けます。

  4. Enter キーを選択して、コードまたはコマンドを実行します。

Azure カスタム スクリプト拡張機能とは

カスタム スクリプト拡張機能は、Azure VM でスクリプトをダウンロードし、実行します。 この拡張機能は、デプロイ後の構成、ソフトウェアのインストール、その他の構成や管理タスクに役立ちます。 スクリプトは、Azure ストレージや GitHub からダウンロードできます。また、拡張機能の実行時に Azure Portal に提供することもできます。

カスタム スクリプト拡張機能は Azure Resource Manager テンプレートと統合します。 Azure CLI、Azure PowerShell、Azure portal、REST API と組み合わせて使用することもできます。 詳細については、「Windows のカスタム スクリプト拡張機能」を参照してください。

カスタム スクリプト拡張機能が動作していることを確認するには、IIS Web サーバーをインストールしてスケール セット VM インスタンスのホスト名を出力する機能を備えたスケール セットを作成します。 カスタム スクリプト拡張機能の定義によって、GitHub からサンプル スクリプトがダウンロードされ、必要なパッケージがインストールされた後、VM インスタンスのホスト名が基本的な HTML ページに書き込まれます。

スケール セットを作成する

New-AzResourceGroup を使用して Azure リソース グループを作成します。 次の例では、myResourceGroup という名前のリソース グループを "米国東部" の場所に作成します。

New-AzResourceGroup -Name myResourceGroup -Location "East US"

次に、New-AzVmss を使用して Virtual Machine Scale Sets を作成します。 個々の VM インスタンスにトラフィックを分散するために、ロード バランサーも作成されます。 ロード バランサーには、TCP ポート 80 上のトラフィックを分散させるルールが含まれています。 また、TCP ポート 3389 上のリモート デスクトップ トラフィックと TCP ポート 5985 上の PowerShell リモート処理を許可するルールも含まれています。 メッセージが表示されたら、スケール セット内の VM インスタンス用の自分の管理者資格情報を設定できます。

New-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet" `
  -OrchestrationMode "Flexible" `
  -Location "EastUS" `
  -UpgradePolicyMode "Manual" `
  -VirtualNetworkName "myVnet" `
  -SubnetName "mySubnet" `
  -PublicIpAddressName "myPublicIPAddress" `
  -LoadBalancerName "myLoadBalancer" 

すべてのスケール セットのリソースと VM を作成および構成するのに数分かかります。

カスタム スクリプト拡張機能の定義の作成

Azure PowerShell では、ハッシュテーブルを使用して、ダウンロードするファイルおよび実行するコマンドを格納します。 次の例では、GitHub のサンプル スクリプトを使用します。 最初に、次のようにこの構成オブジェクトを作成します。

$customConfig = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis.ps1"
}

次に、Add-AzVmssExtension を使用してカスタム スクリプト拡張機能を適用します。 前に定義した構成オブジェクトが拡張機能に渡されます。 Update-AzVmss を使用して、スケール セット プロファイル インスタンスの拡張機能を更新します。

# Get information about the scale set
$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"

# Add the Custom Script Extension to install IIS and configure basic website
$vmss = Add-AzVmssExtension `
  -VirtualMachineScaleSet $vmss `
  -Name "customScript" `
  -Publisher "Microsoft.Compute" `
  -Type "CustomScriptExtension" `
  -TypeHandlerVersion 1.9 `
  -Setting $customConfig

# Update the scale set
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

既存のスケール セット インスタンスに拡張機能を追加する

手動アップグレードを実行して、更新された拡張機能を既存のすべてのスケール セット インスタンスに適用します。 更新は、完了するまでに数分かかる場合があります。

Update-AzVmssInstance -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet" -InstanceId "*"

スケール セット内の各 VM インスタンスが、GitHub からスクリプトをダウンロードして実行します。 より複雑な例では、複数のアプリケーション コンポーネントおよびファイルをインストールできます。 スケール セットがスケールアップされた場合、新しい VM インスタンスで同じカスタム スクリプト拡張機能定義が自動的に適用され、必要なアプリケーションがインストールされます。

アプリケーションへのトラフィックを許可する

基本的な Web アプリケーションへのアクセスを許可するには、New-AzNetworkSecurityRuleConfigNew-AzNetworkSecurityGroup を使用してネットワーク セキュリティ グループを作成します。 詳細については、Microsoft Azure Virtual Machine Scale Sets のネットワークに関する記事を参照してください。

#Create a rule to allow traffic over port 80
$nsgFrontendRule = New-AzNetworkSecurityRuleConfig `
  -Name myFrontendNSGRule `
  -Protocol Tcp `
  -Direction Inbound `
  -Priority 200 `
  -SourceAddressPrefix * `
  -SourcePortRange * `
  -DestinationAddressPrefix * `
  -DestinationPortRange 80 `
  -Access Allow

#Create a network security group and associate it with the rule
$nsgFrontend = New-AzNetworkSecurityGroup `
  -ResourceGroupName  "myResourceGroup" `
  -Location EastUS `
  -Name myFrontendNSG `
  -SecurityRules $nsgFrontendRule

$vnet = Get-AzVirtualNetwork `
  -ResourceGroupName  "myResourceGroup" `
  -Name myVnet

$frontendSubnet = $vnet.Subnets[0]

$frontendSubnetConfig = Set-AzVirtualNetworkSubnetConfig `
  -VirtualNetwork $vnet `
  -Name mySubnet `
  -AddressPrefix $frontendSubnet.AddressPrefix `
  -NetworkSecurityGroup $nsgFrontend

Set-AzVirtualNetwork -VirtualNetwork $vnet

スケール セットのテスト

Web サーバーが動いていることを確認するには、Get-AzPublicIpAddress を使用してロード バランサーのパブリック IP アドレスを取得します。 次の例は、myResourceGroup リソース グループに作成された IP アドレスを表示します。

Get-AzPublicIpAddress -ResourceGroupName "myResourceGroup" | Select IpAddress

ロード バランサーのパブリック IP アドレスを Web ブラウザーに入力します。 ロード バランサーは、次の例に示すように、VM インスタンスのいずれかにトラフィックを配分します。

IIS の基本的な Web ページ

次の手順で更新されたバージョンを確認できるように、Web ブラウザーを開いたままにしておきます。

アップグレード ポリシーを変更する

前のセクションでは、更新されたアプリケーションをすべてのスケール セット インスタンスに適用するために、手動アップグレードが必要でした。 既存のすべてのスケール セット インスタンスに更新を自動的に適用できるようにするには、アップグレード ポリシーを手動から自動に更新します。 アップグレード ポリシーの詳細については、「Virtual Machine Scale Sets のアップグレード ポリシー」を参照してください。

$vmss = Get-AzVmss -ResourceGroupName "myResourceGroup" -VMScaleSetName "myScaleSet"

Update-Azvmss `
    -ResourceGroupName "myResourceGroup" `
    -Name "myScaleSet" `
    -UpgradePolicyMode "Automatic" `
    -VirtualMachineScaleSet $vmss

アプリのデプロイの更新

スケール セットのライフサイクル全体にわたり、アプリケーションの更新されたバージョンをデプロイする必要があります。 カスタム スクリプト拡張機能を使用すると、更新されたデプロイ スクリプトを参照し、拡張機能をスケール セットに再適用することができます。

customConfigv2 という名前の新しい構成定義を作成します。 この定義では、アプリケーションのインストール スクリプトの更新された v2 バージョンを実行します。

$customConfigv2 = @{
  "fileUris" = (,"https://raw.githubusercontent.com/Azure-Samples/compute-automation-configurations/master/automate-iis-v2.ps1");
  "commandToExecute" = "powershell -ExecutionPolicy Unrestricted -File automate-iis-v2.ps1"
}

スケール セット内の VM インスタンスに対するカスタム スクリプト拡張機能構成を更新します。 customConfigv2 定義が、アプリケーションの更新されたバージョンをスケール セットに適用するために使用されます。

$vmss = Get-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -VMScaleSetName "myScaleSet"
 
$vmss.VirtualMachineProfile.ExtensionProfile[0].Extensions[0].Settings = $customConfigv2
 
Update-AzVmss `
  -ResourceGroupName "myResourceGroup" `
  -Name "myScaleSet" `
  -VirtualMachineScaleSet $vmss

スケール セットはこのとき自動アップグレード ポリシーを使用しているため、更新されたアプリケーションが既存のスケール セット インスタンスに自動的に適用されます。 Web ブラウザーを最新の情報に更新して、更新されたアプリケーションを表示します。 更新されたバージョンを確認するには、ブラウザーで Web サイトを更新します。

IIS の更新された Web ページ

リソースをクリーンアップする

スケール セットと追加のリソースを削除するには、Remove-AzResourceGroup を使用して、リソース グループとそのすべてのリソースを削除します。 -Force パラメーターは、追加のプロンプトを表示せずにリソースの削除を確定します。 -AsJob パラメーターは、操作の完了を待たずにプロンプトに制御を戻します。

Remove-AzResourceGroup -Name "myResourceGroup" -Force -AsJob

次のステップ

このチュートリアルでは、Azure PowerShell を使用して自動的にアプリケーションをスケール セットにインストールし、更新する方法について学習しました。

  • スケール セットへのアプリケーションの自動インストール
  • Azure カスタム スクリプト拡張機能の使用
  • スケール セットで実行中のアプリケーションの更新

次のチュートリアルに進み、スケール セットを自動的にスケーリングする方法を学習してください。