Azure 仮想マシンを作成および管理するためのオプションについて説明する

完了

VM などのリソースを初めて作成する場合には、Azure portal が最も簡単です。 ただし、いくつかのリソースをまとめて作成する場合は、Azure を使用する方法が、最も効率的または早いわけではありません。 今回の場合、最終的には、さまざまなタスクを処理する数十の VM を作成します。 Azure portal でそれらを手動で作成するのは、楽しいタスクではありません。

Azure でリソースを作成および管理するには、他にもいくつかの方法があります。

  • Azure Resource Manager のテンプレート
  • Azure PowerShell
  • Azure CLI
  • Azure REST API
  • Azure クライアント SDK
  • Azure VM 拡張機能
  • Azure Automation サービス

Resource Manager テンプレート

VM のコピーを、同じ設定で作成したいとします。 その場合、VM のイメージを作成し、それを Azure にアップロードし、新しい VM の基として参照します。 このプロセスは、非効率的で時間がかかります。 Azure には、VM の正確なコピーを作成する、テンプレートを作成するためのオプションがあります。

Resource Manager テンプレートとは、ソリューションに対してデプロイが必要なリソースを定義した JSON ファイルのことです。

VM のリソース テンプレートを作成することができます。 [VM] メニューの [オートメーション] で、[テンプレートのエクスポート] を選択します。

Screenshot showing Export template option for a VM.

Note

この Learn モジュールのサンドボックスに含まれるリソースのポリシーを使用すると、先ほど作成した VM をエクスポートできなくなります。そうは言っても、エクスポートされたテンプレートは編集しやすい JSON ファイルです。 テンプレートをダウンロードするか後で使用するために保存することも、そのテンプレートに基づいて新しい VM をすぐにデプロイすることもできます。 たとえば、テスト環境でテンプレートから作成した VM が、お使いのオンプレミスのマシンと置き換える場合に、うまく機能しないことがわかったとします。 リソース グループを削除し (このとき、すべてのリソースが削除されます)、テンプレートを調整して、再度試すことができます。 デプロイ済みの既存のリソースのみを変更したい場合は、それを作成するために使用したテンプレートを変更して再デプロイできます。 Resource Manager により、新しいテンプレートに合うようリソースが変更されます。

それが希望どおりに動作するようになった後で、そのテンプレートを使用して、ステージングや運用など、ご利用のインフラストラクチャの複数のバージョンを簡単にレプリケートすることができます。 VM 名、ネットワーク名、ストレージ アカウント名などのフィールドをパラメーター化し、繰り返しテンプレートを読み込み、さまざまなパラメーターを使用し、各環境用にカスタマイズすることができます。

テンプレート使用の詳細については、「クイック スタート: ARM テンプレートを使用して Ubuntu Linux 仮想マシンを作成する」を参照してください。

Azure CLI

スクリプトとコマンド ラインで Azure とやり取りするオプションに、Azure CLI があります。

Azure CLI は、コマンド ラインから仮想マシンやディスクなどの Azure リソースを管理するための、Microsoft のクロスプラットフォーム コマンド ライン ツールです。 これは Linux、macOS、または Windows で使用できます。あるいはブラウザーの Cloud Shell で利用できます。

たとえば、CLI から、az vm create コマンドを使用して Azure VM を作成することができます。

az vm create \
    --resource-group TestResourceGroup \
    --name test-wp1-eus-vm \
    --image Ubuntu2204 \
    --admin-username azureuser \
    --generate-ssh-keys

Azure CLI は、Ruby や Python などのその他のスクリプト言語で使用できます。

VM を作成および管理する方法の詳細については、「Manage virtual machines with the Azure CLI tool」 (Azure CLI ツールを使用して仮想マシンを管理する) モジュールを参照してください。

Azure CLI を使用して VM を作成する方法の詳細については、「クイック スタート: CLI を使用して Linux 仮想マシンを作成する」を参照してください。

Azure PowerShell

Azure PowerShell は、1 回限りの対話型のタスクや、繰り返し実行するタスクを自動化するのに最適です。

Note

PowerShell とは、シェル ウィンドウやコマンド解析などのサービスを提供する、クロスプラットフォームのシェルです。 Azure PowerShell は、(コマンドレットと呼ばれる) Azure 固有のコマンドを追加する、オプションのアドオン パッケージです。 Azure PowerShell のインストールと使用の詳細は、別のトレーニング モジュールで説明しています。

たとえば、New-AzVM コマンドレットを使用すると、Debian ベース Azure の新しい仮想マシンを作成できます。

New-AzVm `
    -ResourceGroupName "TestResourceGroup" `
    -Name "test-wp1-eus-vm" `
    -Location "East US" `
    -Image Debian11 `
    -VirtualNetworkName "test-wp1-eus-network" `
    -SubnetName "default" `
    -SecurityGroupName "test-wp1-eus-nsg" `
    -PublicIpAddressName "test-wp1-eus-pubip" `
    -GenerateSshKey `
    -SshKeyName myPSKey
    -OpenPorts 22

ここに示されているようにさまざまなパラメーターを提供し、利用できる多数の VM の構成設定を処理します。 ほとんどのパラメーターには妥当な値があるため、必須パラメーターのみを指定する必要があります。 Azure PowerShell で VM を作成および管理する方法の詳細については、「Automate Azure tasks using scripts with PowerShell」(PowerShell でスクリプトを使用して Azure タスクを自動化する) のモジュールを参照してください。

PowerShell を使用して VM を作成する方法については、「クイック スタート: PowerShell を使用して Linux 仮想マシンを作成する」を参照してください。

Terraform

Azure には Terraform プロバイダーもあるため、Terraform を使用して VM を簡単に作成し、管理できます。 Terraform を使用すると、クラウド インフラストラクチャの定義、プレビュー、およびデプロイを行うことができます。 Terraform を使用する際は、HCL 構文を使って構成ファイルを作成します。 HCL 構文では、Azure などのクラウド プロバイダーと、クラウド インフラストラクチャを構成する要素を指定できます。 構成ファイルを作成したら、"実行プラン" を作成します。これにより、インフラストラクチャの変更をデプロイ前にプレビューすることができます。 変更を確認したら、実行プランを適用してインフラストラクチャをデプロイします。

詳細については、「Azure Terraform プロバイダー」と「クイック スタート: Terraform を使用して VM を作成する」を参照してください。

プログラム (API)

一般的に、実行するスクリプトがシンプルであり、コマンドライン ツールを使用する場合、Azure PowerShell と Azure CLI はいずれも適した選択肢です。 複雑なロジックの大規模なアプリケーションの一部として VM を作成および管理する場合のより複雑なシナリオでは、別のアプローチをとる必要があります。

Azure では、プログラムを使用して、さまざまな種類のリソースとやりとりすることができます。

Azure REST API

Azure REST API では、リソースごとに分類された操作と、VM の作成と管理の機能を開発者が利用できます。 操作は、対応する HTTP メソッド (GETPUTPOSTDELETE、および PATCH) と対応する応答と共に、URI として公開されます。

Azure コンピューティング API によって、仮想マシンおよび仮想マシンでサポートされるリソースに、プログラムからアクセスできるようになります。

詳細については、「仮想マシン REST API リファレンス」を参照してください。

Azure クライアント SDK

REST API はプラットフォームや言語に依存しませんが、多くの場合、開発者はより高レベルの抽象化を求めます。 Azure クライアント SDK では、Azure REST API をカプセル化できるため、開発者は Azure とより簡単にやりとりすることができるようになります。

Azure クライアント SDK は、C#、Java、Node.js、PHP、Python、Ruby、および Go など .NET ベースの言語を含む、さまざまな言語やフレームワークで使用できます。

Microsoft.Azure.Management.Fluent NuGet パッケージを使用して Azure VM を作成する C# コードのスニペット例を次に示します。

var azure = Azure
    .Configure()
    .WithLogLevel(HttpLoggingDelegatingHandler.Level.Basic)
    .Authenticate(credentials)
    .WithDefaultSubscription();
// ...
var vmName = "test-wp1-eus-vm";

azure.VirtualMachines.Define(vmName)
    .WithRegion(Region.USEast)
    .WithExistingResourceGroup("TestResourceGroup")
    .WithExistingPrimaryNetworkInterface(networkInterface)
    .WithLatestWindowsImage("MicrosoftWindowsServer", "WindowsServer", "2012-R2-Datacenter")
    .WithAdminUsername("jonc")
    .WithAdminPassword("aReallyGoodPasswordHere")
    .WithComputerName(vmName)
    .WithSize(VirtualMachineSizeTypes.StandardDS1)
    .Create();

Azure Java SDK が使用された Java の同じスニペットは、次のとおりです。

String vmName = "test-wp1-eus-vm";
// ...
VirtualMachine virtualMachine = azure.virtualMachines()
    .define(vmName)
    .withRegion(Region.US_EAST)
    .withExistingResourceGroup("TestResourceGroup")
    .withExistingPrimaryNetworkInterface(networkInterface)
    .withLatestWindowsImage("MicrosoftWindowsServer", "WindowsServer", "2012-R2-Datacenter")
    .withAdminUsername("jonc")
    .withAdminPassword("aReallyGoodPasswordHere")
    .withComputerName(vmName)
    .withSize("Standard_DS1")
    .create();

Azure VM 拡張機能

最初のデプロイの後、仮想マシンにさらに多くのソフトウェアを構成してインストールするとします。 このタスクで、自動的に監視および実行される特定の構成を使用したいとします。

Azure VM 拡張機能は、Azure VM の最初のデプロイ後にタスクを構成および自動化したい場合に使用できる、小規模なアプリケーションです。

詳しくは、Azure 仮想マシン拡張機能とその機能に関する記事をご覧ください。

Azure Automation サービス

リモート インフラストラクチャを管理する場合の運用上の最大の課題は、時間の短縮、エラーの削減、効率性の向上です。 多くのインフラストラクチャ サービスがある場合、より高いレベルから操作できるように、Azure でレベルの高いサービスを使用することを検討する必要がある場合があります。

Azure Automation では、頻繁に発生する、時間のかかる、エラーが発生しやすいタスクを簡単に自動化して、サービスを統合できます。 これらのサービスには、プロセスの自動化構成管理、および更新管理が含まれます。

  • プロセスの自動化。 特定のエラー イベントを監視している VM があるとします。 それが報告されたら、できるだけ早くアクションをとり、問題を解決したいと思っています。 プロセス オートメーションを使用すると、データセンターで発生する可能性のあるイベントに対応する監視タスクを設定できます。

  • 構成管理。 ユーザーが、VM で実行しているオペレーティング システムで利用可能なソフトウェアの更新をトラッキングしたいとします。 ユーザーには、インストールしたいまたはしたくない、特定の更新プログラムがあります。 構成管理では、これらの更新プログラムを追跡して、必要に応じてアクションをとることができます。 会社の PC、サーバー、モバイル デバイスの管理には、Microsoft Endpoint Configuration Manager を使用します。 Configuration Manager を使用すると、このサポートを、Azure VM まで拡張することができます。

  • Update Management。 このサービスを使って、VM の更新プログラムとパッチを管理します。 このサービスでは、利用可能な更新プログラムの状態を評価したり、インストールをスケジュールしたり、デプロイの結果を確認して、更新プログラムが正常に適用されたことを検証したりすることができます。 Update Management には、プロセスおよび構成を管理するサービスが組み込まれています。 VM の Update Management は、Azure Automation アカウントから直接有効にできます。 また、ポータルの仮想マシン ウィンドウから単一の仮想マシンの Update Management を有効にすることもできます。

自動シャットダウン

自動シャットダウンは、スケジュールに従って VM を自動的にシャットダウンできる Azure の機能です。 自動シャットダウンを使用すると、VM が不要なときは実行されないため、コストを節約できます。 自動シャットダウンは、毎日または毎週実行されるようにスケジュール設定できます。スケジュールのタイム ゾーンを指定することもできます。

Azure portal で VM の自動シャットダウン機能に移動するには、ポータルで VM のブレードに移動し、[操作] セクションの [Auto-shutdown] (自動シャットダウン) をクリックし、好みに応じて自動シャットダウン設定を構成します。

Screenshot showing Auto-shutdown option for a VM.

詳細については、自動シャットダウンに関する記事を参照してください。

このように、Azure にはリソースを作成および管理するためのさまざまなツールが用意されているので、管理業務を "自分に合った" プロセスに統合できます。 他の Azure サービスをいくつか調べて、インフラストラクチャのリソースがスムーズに実行されていることを確認しましょう。