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

完了

PowerShell を使うと、コマンドを記述して、すぐにそれを実行できます。 これは 対話モード と呼ばれています。

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

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

PowerShell コマンドレットとは

PowerShell コマンドは コマンドレット と呼ばれています。 コマンドレットは 1 つの機能を操作するコマンドです。 コマンドレット と用語は "小さなコマンド" を意味します。 慣例で、コマンドレットの作成者には、コマンドレットをシンプルにすること、目的を 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 リソースのほぼすべての面を制御できます。 リソース グループ、ストレージ、仮想マシン、Azure Active Directory、コンテナー、機械学習などを操作できます。 このモジュールは、GitHub で入手できるオープンソースのコンポーネントです。

注意

-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 をダウンロードしてインストールするように求められる場合があります。

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 キーを押してプログラムを停止します。

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

  1. SetExecutionPolicy コマンドレットを使用して、ポリシーを "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 モジュールの読み込みが進行していることを確認できます。 完了すると、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 モジュールの何らかのバージョンが既にインストールされていることを示す警告またはエラー メッセージが表示された場合は、次のコマンドを実行して、最新 のバージョンに更新できます。

Update-Module -Name Az

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

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

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

行う必要がある手順は次の 4 つです。

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

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

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

  4. 正常に作成できたことを確認します (下記参照)。

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

リソース グループを作成する手順を示す図。

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

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 を開き、ホーム ページで [サブスクリプション] を選択します。

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

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

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>

注意

リソース グループが自動的に作成されるアクティブな Azure サンドボックスで作業を行うことに注意してください。 上記のコマンドは、自分のサブスクリプションで作業する場合に使用します。

リソースを確認する

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

Get-AzResource

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

Get-AzResource | Format-Table

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

Get-AzResource -ResourceGroupName ExerciseResources

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

PowerShell で行うことができる一般的なタスクには、VM の作成もあります。

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

  • ResourceGroupName:新しい VM が配置されるリソース グループ。
  • Name:Azure での VM の名前。
  • Location: 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 回だけ実行するより、対話モードを使う方が簡単で速くなります。