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

完了

PowerShell では、対話モードでコマンドを記述し、すぐに実行できます。

顧客関係管理 (CRM) の例の全体的な目標は、仮想マシンを含む 3 つのテスト環境を作成することであることを思い出してください。 リソース グループを使用して、VM が確実に別々の環境に整理されるようにします (ユニット テスト用に 1 つ、統合テスト用に 1 つ、受け入れテスト用に 1 つ)。 リソース グループを作成する必要があるのは 1 回だけであるため、このユース ケースでは、PowerShell の対話モードを使用することをお勧めします。

PowerShell にコマンドを入力すると、PowerShell はコマンドを "コマンドレット" と照合した後、要求されたアクションを実行します。 まず、使用できる一般的なコマンドをいくつか見てから PowerShell 用の Azure サポートのインストールについて確認します。

PowerShell コマンドレットとは

PowerShell コマンドはコマンドレットと呼ばれています。 コマンドレットは 1 つの機能を操作するコマンドです。 コマンドレットという用語は、"小さなコマンド" を意味するためのものです。慣例により、コマンドレットの作成者は、コマンドレットをシンプルで単一の目的用に保つことが推奨されます。

基本の PowerShell 製品には、セッションやバックグラウンド ジョブなどの機能で使用できるコマンドレットが付属します。 他の機能を操作するコマンドレットを得るために、PowerShell インストールにモジュールを追加できます。 たとえば、サードパーティ モジュールには、FTP と連動するモジュール、オペレーティング システムを管理するモジュール、ファイル システムにアクセスするモジュールなどがあります。

コマンドレットは、動詞と名詞の名前付け規則に従います。たとえば、Get-ProcessFormat-TableStart-Service などです。 動詞の選択にも規則があります。たとえば、データの取得は "get"、データの挿入または更新は "set"、データの書式設定は "format"、宛先への直接出力は "out" になります。

コマンドレットの作成者には、コマンドレットごとにヘルプ ファイルを含めることをお勧めします。 Get-Help コマンドレットを実行すると、コマンドレットのヘルプ ファイルが表示されます。 たとえば、Get-ChildItem コマンドレットのヘルプを表示するには、Windows PowerShell セッションで次のステートメントを入力します。

Get-Help -Name Get-ChildItem -Detailed

PowerShell モジュールとは

コマンドレットは "モジュール" に付属しています。 PowerShell モジュールは、利用可能な各コマンドレットを処理するコードを含むダイナミックリンク ライブラリ (DLL) です。 PowerShell にコマンドレットを読み込む場合は、そのコマンドレットが含まれるモジュールを読み込みます。 Get-Module コマンドを使用して、読み込まれたモジュールのリストを取得することができます。

Get-Module

このコマンドの出力は、次のようになります。

ModuleType Version    Name                                ExportedCommands
---------- -------    ----                                ----------------
Manifest   3.1.0.0    Microsoft.PowerShell.Management     {Add-Computer, Add-Content, Checkpoint-Computer, Clear-Con...
Manifest   3.1.0.0    Microsoft.PowerShell.Utility        {Add-Member, Add-Type, Clear-Variable, Compare-Object...}
Binary     1.0.0.1    PackageManagement                   {Find-Package, Find-PackageProvider, Get-Package, Get-Pack...
Script     1.0.0.1    PowerShellGet                       {Find-Command, Find-DscResource, Find-Module, Find-RoleCap...
Script     2.0.0      PSReadline                          {Get-PSReadLineKeyHandler, Get-PSReadLineOption, Remove-PS...

Az PowerShell モジュールとは

Az は、Azure 機能で使用できるコマンドレットを含む Azure PowerShell モジュールの正式名称です。 数百単位のコマンドレットが含まれ、あらゆる Azure リソースのほぼすべての面を制御できます。 リソース グループ、ストレージ、仮想マシン、Microsoft Entra ID、コンテナー、機械学習などを操作できます。 Az モジュールは、GitHub で入手できるオープンソースのコンポーネントです。

Note

-AzureRM 形式を使用した Azure PowerShell コマンドを見るか使用したことがあるかもしれません。 Az PowerShell モジュール で AzureRM PowerShell モジュールのすべての機能およびその他を利用できるようになったため、2024 年 2 月 29 日に AzureRM PowerShell モジュールは廃止になります。 サービスの中断を回避するために、2024 年 2 月 29 日までに、AzureRM PowerShell モジュールを使用するスクリプトを更新して、Az PowerShell モジュールを使用するようにしてください。 スクリプトを自動的に更新するには、 クイックスタート ガイドに従ってください。

Az PowerShell モジュールをインストールします。

Az PowerShell モジュールは、PowerShell ギャラリーと呼ばれるグローバル リポジトリから入手できます。 Install-Module コマンドレットを使用して、ローカル コンピューター上にモジュールをインストールすることができます。

最新の Azure Az PowerShell モジュールをインストールするには、次のコマンドを実行します。

  1. [スタート] メニューを開き、「PowerShell」と入力します。

  2. PowerShell アイコンを選択します。

  3. 次のコマンドを入力し、Enter キーを押します。

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery
    

前のコマンドは、現在のユーザーにモジュールをインストールします (Scope パラメーターで制御)。

このコマンドは、NuGet を使用してコンポーネントを取得します。 そのため、インストールしたバージョンによっては、最新バージョンの NuGet をダウンロードしてインストールするように求められる場合があります。

NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\<username>\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and import
 the NuGet provider now?
 [Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"):

Y」と入力して、Enter キーを押します。

既定では、PowerShell ギャラリーは、PowerShellGet 用の信頼できるリポジトリとしては構成されません。 信頼されていないリポジトリからインストールを実行するたびに、モジュールをインストールするかどうかを確認するメッセージが出力に表示されます。

You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"):

Y」または「A」と入力し、Enter キーを押します。

スクリプトの実行に失敗しました

セキュリティの構成によっては、Import-Module が失敗し、次のような出力が表示される場合があります。

import-module : File C:\Program Files\PowerShell\Modules\az\6.3.0\Az.psm1 cannot be loaded
because running scripts is disabled on this system. For more information, see about_Execution_Policies at
https:/go.microsoft.com/fwlink/?LinkID=135170.
At line:1 char:1
+ import-module Az
+ ~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : SecurityError: (:) [Import-Module], PSSecurityException
    + FullyQualifiedErrorId : UnauthorizedAccess,Microsoft.PowerShell.Commands.ImportModuleCommand

まったく応答せずに失敗する場合もあります。 その場合は、Ctrl+C キーを押してプログラムを停止します。

どちらの動作も、通常、実行ポリシーが "Restricted" であることを示します。つまり、外部ソース (PowerShell ギャラリーを含む) からダウンロードしたモジュールは実行できません。 これは、コマンドレット Get-ExecutionPolicy を実行することで確認できます。 コマンドレットが "Restricted" を返す場合は、次のようになります。

  1. Set-ExecutionPolicy コマンドレットを使用して、ポリシーを "RemoteSigned" に変更します。

    Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
    

    アクセス許可を求められます。

    The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
    you to the security risks described in the about_Execution_Policies help topic at
    https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
    [Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): Y
    
  2. Y」または「A」と入力し、Enter キーを押します。

  3. コマンド プロンプトで、キーボードの上矢印を使用し、Azure に対して Install-Module コマンドを再実行します。

Az PowerShell モジュールの読み込みが進行していることを確認できます。 完了すると、Import-Module を使用してコマンドレットを読み込むことができるようになります。

Linux または macOS への Azure PowerShell のインストールには、同じコマンドを使用します。

  1. ターミナルで、次のコマンドを実行して PowerShell を起動します。

    pwsh
    
  2. PowerShell プロンプトで次のコマンドを実行して Azure PowerShell をインストールします。

    Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force
    
  3. PSGallery からのモジュールを信頼するかどうかの確認を求められたら、[はい] または [すべてはい] で答えます。

PowerShell モジュールを更新する

Azure PowerShell モジュールのバージョンの 1 つが既にインストールされていることを示す警告またはエラー メッセージが表示される場合があります。 その場合は、次のコマンドを発行して最新バージョンに更新します。

Update-Module -Name Az

Install-Module コマンドレットと同じように、モジュールの信頼の確認を求められたら [はい] または [すべてはい] で答えます。 問題がある場合は、Update-Module コマンドを使用してモジュールを再インストールすることもできます。

例:Azure PowerShell を使用してリソース グループを作成する方法

Azure モジュールをインストールしたら、Azure を使用して作業を開始できます。 ここでは一般的なタスク (リソース グループの作成) を行います。 ご存知のように、関連リソースをまとめて管理するにはリソース グループを使用します。 新しいリソース グループの作成は、新しい Azure ソリューションを開始するときに行う最初のタスクの 1 つです。

実行する手順は次の 4 つです。

  1. Azure コマンドレットをインポートします。

  2. ご利用の Azure サブスクリプションに接続します。

  3. リソース グループを作成します。

  4. 正常に作成できたことを確認します。

次の図は、この手順の概要を示します。

Diagram showing the steps to create a resource group.

各手順は異なるコマンドレットに対応しています。

Azure コマンドレットをインポートする

PowerShell 3.0 以降では、モジュール内のコマンドレットを使用すると、モジュールが自動的に読み込まれます。 既定であるモジュール自動読み込みの設定を変更していない限り、PowerShell モジュールを手動でインポートする必要はなくなりました。

接続する

Azure PowerShell のローカル インストールを使用している場合、Azure コマンドを実行する前に認証する必要があります。 Connect-AzAccount コマンドレットを実行すると、Azure 認証情報が求められ、Azure サブスクリプションに接続されます。 さまざまなオプション パラメーターがありますが、対話型プロンプトのみが必要な場合、パラメーターは必要ありません。

Connect-AzAccount

サブスクリプションを操作する

Azure の利用が初めての場合、所有しているサブスクリプションは 1 つのみと思われます。 しかし、Azure をしばらく利用している場合は、既に複数の Azure サブスクリプションを作成している可能性があります。 特定のサブスクリプションに対してコマンドを実行するように Azure PowerShell を構成することができます。

これは一度に 1 つのサブスクリプションでのみ行うことができます。 アクティブなサブスクリプションを判別するには、Get-AzContext コマンドレットを使用します。 正しいものではない場合は、別のコマンドレットを使用してサブスクリプションを変更できます。

  1. Get-AzSubscription コマンドで、アカウントのすべてのサブスクリプション名のリストを取得します。

  2. 選択するサブスクリプションの名前を渡して、そのサブスクリプションを変更します。

Set-AzContext -Subscription '00000000-0000-0000-0000-000000000000'

サブスクリプション ID を検索する必要がある場合、Azure portal に移動し、ホーム ページで [サブスクリプション] を選択します。

すべてのリソース グループのリストを取得する

アクティブなサブスクリプションのすべてのリソース グループのリストを取得できます。

Get-AzResourceGroup

より簡潔なリストを表示するには、パイプ '|' を使用して Get-AzResourceGroup から Format-Table コマンドレットに出力を送信できます。

Get-AzResourceGroup | Format-Table

次のような画面が出力されます。

ResourceGroupName                  Location       ProvisioningState Tags TagsTable ResourceId
-----------------                  --------       ----------------- ---- --------- ----------
cloud-shell-storage-southcentralus southcentralus Succeeded                        /subscriptions/00000000-0000-0000...
ExerciseResources                  eastus         Succeeded                        /subscriptions/00000000-0000-0000...

リソース グループを作成する

ご存知のように、Azure でリソースを作成する場合は、管理の目的のために、必ずリソース グループにリソースを配置します。 リソース グループは、多くの場合、新しいアプリケーションを開始するときに最初に作成するものの 1 つです。

New-AzResourceGroup コマンドレットを使用して、リソース グループを作成することができます。 名前と場所を指定する必要があります。 この名前はサブスクリプション内で一意である必要があります。 この場所は、リソース グループのメタデータが保存される場所を決定します (これはコンプライアンス上の理由から重要となる場合があります)。 "米国西部"、"北ヨーロッパ"、"インド西部" などの文字列を使用して、場所を指定します。 ほとんどの Azure コマンドレットと同様に、New-AzResourceGroup には多くのオプション パラメーターがあります。 ただし、中心的な構文は次のようになります。

New-AzResourceGroup -Name <name> -Location <location>

Note

ここでは、リソース グループの作成をユーザーの代わりに行うアクティブな Azure サンドボックスで作業を行うことに注意してください。 自分自身のサブスクリプションで作業を行いたい場合は、前述のコマンドを使用してください。

リソースを確認する

Get-AzResource により、Azure リソースがリストされます。これは、作成されたリソースと、リソース グループの作成が成功したことを確認するためにここで役に立ちます。

Get-AzResource

Get-AzResourceGroup コマンドと同様に、Format-Table コマンドレットを使用してより簡潔なリストを表示できます。

Get-AzResource | Format-Table

これで特定のリソース グループに絞り込み、そのグループに関連付けられているリソースのみをリストすることもできます。

Get-AzResource -ResourceGroupName ExerciseResources

Azure 仮想マシンを作成します。

PowerShell で実行できるもう 1 つの一般的なタスクとして、VM を作成することがあります。

Azure PowerShell では、仮想マシンを作成するための New-AzVm コマンドレットが提供されます。 コマンドレットには多くのパラメーターがあり、それを使用して数多くの VM 構成設定を処理することができます。 ほとんどのパラメーターに適切な既定値があるため、指定する必要があるのは次の 5 つのみです。

  • ResourceGroupName: 新しい VM を配置する必要があるリソース グループ。
  • Name:Azure での VM の名前。
  • 場所: VM がプロビジョニングされる必要がある地理的な場所。
  • Credential:VM 管理者アカウント用のユーザー名とパスワードが含まれているオブジェクト。 ここでは Get-Credential コマンドレットを使用します。 このコマンドレットは、ユーザー名とパスワードの指定を要求し、それを資格証明オブジェクトにパッケージ化します。
  • イメージ: VM に使用するオペレーティング システム イメージ。通常は、Linux ディストリビューションまたは Windows Server です。
   New-AzVm
       -ResourceGroupName <resource group name>
       -Name <machine name>
       -Credential <credentials object>
       -Location <location>
       -Image <image name>

前述の例に示したように、これらのパラメーターをコマンドレットに直接与えることができます。 あるいは、Set-AzVMOperatingSystemSet-AzVMSourceImageAdd-AzVMNetworkInterfaceSet-AzVMOSDisk などの他のコマンドレットを使用して、仮想マシンを構成することもできます。

Get-Credential コマンドレットと -Credential パラメーターを一緒に使用する例を以下に示します。

New-AzVM -Name MyVm -ResourceGroupName ExerciseResources -Credential (Get-Credential) ...

AzVM サフィックスは、PowerShell の VM ベースのコマンドに固有のものです。 使用できるものは他にもいくつかあります。

コマンド 説明
Remove-AzVM Azure VM を削除します
Start-AzVM 停止している VM を起動します
Stop-AzVM 実行中の VM を停止します
Restart-AzVM VM を再起動します
Update-AzVM VM の構成を更新します

例: VM の情報を取得する

Get-AzVM -Status コマンドを使用して、サブスクリプション内の VM をリストすることができます。 このコマンドに -Name プロパティを含めることによって、特定の VM の入力もサポートされます。 ここでは、それを PowerShell 変数に割り当てます。

$vm = Get-AzVM  -Name MyVM -ResourceGroupName ExerciseResources

興味深いことは、これで VM が、やりとりできる "オブジェクト" になったことです。 たとえば、そのオブジェクトに変更を加えてから、Update-AzVM コマンドを使用してその変更を Azure にプッシュして戻すことができます。

$ResourceGroupName = "ExerciseResources"
$vm = Get-AzVM  -Name MyVM -ResourceGroupName $ResourceGroupName
$vm.HardwareProfile.vmSize = "Standard_DS3_v2"

Update-AzVM -ResourceGroupName $ResourceGroupName  -VM $vm

PowerShell の対話モードは、1 回限りのタスクに適しています。 この例では、プロジェクトの有効期間中は同じリソース グループを使うので、対話形式で作成するのが妥当です。 このタスクでは多くの場合、スクリプトを記述してそのスクリプトを 1 回だけ実行するより、対話モードを使う方が簡単で速くなります。