スクリプトを使用して Azure PowerShell で Azure リソースを作成する

完了

複雑なタスクや反復的なタスクは、手動で実行すると時間がかかり、エラーが発生しやすくなる場合があります。 組織は、コストを削減してエラーを回避するためにこれらのタスクを自動化したいと考えます。

自動化は、顧客関係管理 (CRM) の例に不可欠です。この例では、継続的に削除して再作成する必要がある複数の Linux 仮想マシン (VM) でソフトウェアをテストしています。 PowerShell スクリプトを使用して VM の作成を自動化すると、毎回手動で作成するよりもはるかに効率的で信頼性が高くなります。

VM を作成するコア操作以外に、スクリプトは他のいくつかの要件を満たす必要があります。

  • 複数の VM の作成:New-AzVM を使用して、一意に名前が付けられた複数の VM を作成します。
  • リソース グループ パラメーター:スクリプトでリソース グループの名前をパラメーターとして受け入れることを許可します。

このユニットでは、これらの要件を満たす PowerShell スクリプトを記述して実行する方法について説明します。

PowerShell スクリプトとは

PowerShell スクリプトは、コマンドと制御コンストラクトを含むテキスト ファイルです。 コマンドはコマンドレットの呼び出しであり、コントロール コンストラクトは、PowerShell によって提供されるループ、変数、パラメーター、コメントなどのプログラミング機能です。

PowerShell スクリプト ファイルには .ps1 ファイル拡張子が付いています。 任意のテキスト エディターを使用してこれらのファイルを作成して保存することができます。

ヒント

PowerShell スクリプトを記述する場合は、Windows、Linux、macOS で無料でサポートされている Visual Studio Code (VS Code) の使用を検討してください。 VS Code 用 PowerShell 拡張機能には、構文の強調表示や使用可能なコマンドレットの一覧などの機能が用意されています。

次のスクリーンショットは、Azure に接続して仮想マシンを作成するためのサンプル スクリプトを含む VS Code の例です。

Azure で仮想マシンを作成するための PowerShell スクリプトを含む VS Code のスクリーンショット。

スクリプトを作成したら、PowerShell コマンド ラインから、ファイル名の前に現在のディレクトリのドットと円記号を渡して実行できます。

.\myScript.ps1

PowerShell 手法

PowerShell には、プログラミング言語でよく見られる機能が含まれています。 変数の定義、ブランチとループの使用、コマンド ライン パラメーターのキャプチャ、関数の記述、コメントの追加などを行うことができます。 重点を置いているスクリプトには、変数、ループ、パラメーターの 3 つの主要な機能が必要です。

変数

PowerShell では、変数はドル記号 ($) を使用して宣言され、等号 (=) 演算子を使用して値が割り当てられます。 次に例を示します。

$location = 'eastus'

変数に格納されている値を確認するには、$ プレフィックスとその名前を使用します。

$location

変数でオブジェクトを保持することができます。 たとえば、次の定義は、Get-Credential コマンドレットによって返されるオブジェクトに $adminCredential 変数を設定します。

$adminCredential = Get-Credential

ループ

PowerShell には、ForForeachDo-UntilDo-WhileWhile などのいくつかのループ構造があります。 Foreach ループは、コレクション内の一連の値に対してループを実行する必要があるシナリオに適しています。

$items = 1..3
foreach ($item in $items) {
    $item
}

パラメーター

PowerShell スクリプトを作成するときに、スクリプトにパラメーターを追加し、スクリプトの実行時にこれらのパラメーターの値を指定できます。 次に例を示します。

.\setupEnvironment.ps1 -VmCount 5 -Location eastus

スクリプト内で、変数に値をキャプチャします。 この例では、パラメーターは VmCountLocation です。

param (
    [int]$VmCount,
    [string]$Location
)

これらのパラメーターを入力とループとして使用して、指定されたパラメーターに基づいて一連の VM を作成できます。 この方法では、スクリプトの汎用性が維持され、同じコードの繰り返しが回避されます。

手法の組み合わせ

PowerShell 言語機能と Azure PowerShell コマンドレットを組み合わせることで、Azure タスクを自動化するために必要なすべてのツールが提供されます。 CRM の例では、パラメーター化されたスクリプトとループを使用して複数の Linux VM を作成してプロセスを効率化できます。 このスクリプトを使用すると、1 つの手順で複雑な操作を実行できます。

サンプル スクリプト

変数、ループ、パラメーターを使用して複数の VM を作成するサンプル スクリプトを次に示します。

param (
    [int]$VmCount = 3,
    [string]$ResourceGroupName,
    [string]$Location = 'eastus'
)

$adminCredential = Get-Credential

$vms = 'web','app','sql'

foreach ($vm in $vms) {
    $vmName = "testvm-$vm"

    $azVmParams = @{
        ResourceGroupName   = $ResourceGroupName
        Name                = $vmName
        Credential          = $adminCredential
        Location            = $Location
        Image               = 'Canonical:0001-com-ubuntu-server-jammy:22_04-lts:latest'
        OpenPorts           = 22
        PublicIpAddressName = $vmName
    }
    New-AzVM @azVmParams
}

スクリプトの実行

スクリプトを CreateVMs.ps1 として保存し、PowerShell コマンド ラインから実行し、必要なパラメーターを指定します。

.\CreateVMs.ps1 -ResourceGroupName <resource-group-name>

このスクリプトを使用すると、異なるリソース グループに複数の VM を効率的に作成し、反復的なタスクを自動化し、Azure 環境全体の一貫性を確保できます。