Azure Stack Hub で AzureRM から Azure PowerShell Az に移行する
Az モジュールは AzureRM と同等の機能を備えていますが、より短く一貫性のあるコマンドレット名を使用します。 AzureRM コマンドレット用に記述されたスクリプトは、新しいモジュールでは自動的には機能しません。 移行を容易にするために、Az には、AzureRM を使用して既存のスクリプトを実行できるツールが用意されています。 新しいコマンド セットへの移行は便利ではありませんが、この記事は新しいモジュールへの移行を開始するのに役立ちます。
AzureRM と Az の間の重大な変更の完全な一覧については、Az 1.0.0 の 移行ガイドを参照してください。
インストールされているバージョンの AzureRM を確認する
移行手順を実行する前に、システムにインストールされている AzureRM のバージョンを確認します。 これにより、スクリプトが最新リリースで既に実行されていることを確認し、AzureRM をアンインストールせずにコマンド エイリアスを有効にできるかどうかを通知できます。
インストールした AzureRM のバージョンを確認するには、次のコマンドを実行します。
Get-InstalledModule -Name AzureRM -AllVersions
現在のスクリプトが AzureRM で動作するかどうかを確認する
これが最も重要なステップです。 既存のスクリプトを実行し、AzureRM (2.5.0) の 最新の リリースで動作することを確認します。 スクリプトが機能しない場合は、AzureRM 移行ガイドのを必ずお読みください。
Azure PowerShell Az モジュールをインストールする
最初の手順では、プラットフォームに Az モジュールをインストールします。 Az をインストールするときは、AzureRM をアンインストールすることをお勧めします。 次の手順では、既存のスクリプトを実行し続け、古いコマンドレット名の互換性を有効にする方法について説明します。
Azure PowerShell Az モジュールをインストールするには、次の手順に従います。
- 推奨: AzureRM モジュールをアンインストールします。 AzureRM のインストールされているすべてのバージョンを、 最新バージョンだけでなく必ず削除してください。
- Az モジュール をインストールする
AzureRM 互換性エイリアスを有効にする
重要
AzureRM のすべての バージョンを アンインストールした場合にのみ、互換モードを有効にしてください。 引き続き使用可能な AzureRM コマンドレットで互換モードを有効にすると、予期しない動作が発生する可能性があります。 AzureRM をインストールしたままにする場合は、この手順をスキップしますが、すべての AzureRM コマンドレットで古いモジュールが使用され、Az コマンドレットは呼び出されないことに注意してください。
AzureRM がアンインストールされ、スクリプトが最新の AzureRM バージョンで動作する場合、次の手順は Az モジュールの互換モードを有効にすることです。 次のコマンドを使用して互換性を有効にします。
Enable-AzureRmAlias -Scope CurrentUser
エイリアスを使用すると、Az モジュールがインストールされている古いコマンドレット名を使用できます。 これらのエイリアスは、選択したスコープのユーザー プロファイルに書き込まれます。 ユーザー プロファイルが存在しない場合は、ユーザー プロファイルが作成されます。
警告
このコマンドには別の -Scope
を使用できますが、お勧めしません。 エイリアスは、選択したスコープのユーザー プロファイルに書き込まれるので、可能な限りスコープを制限して有効にしてください。 システム全体でエイリアスを有効にすると、ローカル スコープに AzureRM がインストールされている他のユーザーに問題が発生する可能性もあります。
エイリアス モードが有効になったら、スクリプトをもう一度実行して、期待どおりに動作することを確認します。
モジュールとコマンドレットの名前を変更する
一般に、モジュール名が変更され、AzureRM
と Azure
が Az
になり、コマンドレットでも同じになります。
たとえば、AzureRM.Compute
モジュールの名前が Az.Compute
に変更されました。 New-AzureRMVM
が New-AzVM
になり、Get-AzureStorageBlob
が Get-AzStorageBlob
になりました。
この名前付け変更には、注意する必要がある例外があります。 一部のモジュールは、AzureRM
または Azure
を Az
に変更する以外に、コマンドレットのサフィックスに影響を与えずに、名前を変更したり、既存のモジュールにマージしたりしました。 それ以外の場合は、新しいモジュール名を反映するように完全なコマンドレット サフィックスが変更されました。
AzureRM モジュール | Az モジュール | コマンドレットサフィックスが変更されましたか? |
---|---|---|
AzureRM.Profile | Az.Accounts | はい |
AzureRM.Insights | Az.Monitor | はい |
AzureRM.Tags | Az.Resources | いいえ |
AzureRM.UsageAggregates | Az.Billing | いいえ |
AzureRM.Consumption | Az.Billing | いいえ |
概要
これらの手順に従うことで、既存のすべてのスクリプトを更新して新しいモジュールを使用できます。 移行を困難にしたこれらの手順に関する質問や問題がある場合は、手順を改善できるように、この記事にコメントしてください。
Az 1.0.0 の破壊的変更
このドキュメントでは、AzureRM 6.x と新しい Az モジュールバージョン 1.x 以降の間の変更について詳しく説明します。 目次は、スクリプトに影響を与える可能性があるモジュール固有の変更を含む、完全な移行パスのガイドに役立ちます。
重大な変更 - 全般
このセクションでは、Az モジュールの再設計の一部である一般的な破壊的変更について詳しく説明します。
コマンドレット名詞プレフィックスの変更
AzureRM モジュールでは、コマンドレットは名詞プレフィックスとして AzureRM
または Azure
を使用します。 Az ではコマンドレット名が簡略化され、正規化されるため、すべてのコマンドレットでコマンドレット名詞プレフィックスとして 'Az' が使用されます。 例えば:
Get-AzureRMVM
Get-AzureKeyVaultSecret
次の内容に変更されました。
Get-AzVM
Get-AzKeyVaultSecret
これらの新しいコマンドレット名への移行を簡単にするために、Az では、Enable-AzureRmAlias と Disable-AzureRmAlias 2 つの新しいコマンドレットが導入されています。 Enable-AzureRmAlias
は、新しい Az コマンドレット名にマップされる古いコマンドレット名のエイリアスを AzureRM に作成します。 -Scope
引数をEnable-AzureRmAlias
と共に使用することで、どこでエイリアスを有効にするかを選択できます。
たとえば、AzureRM の次のスクリプトです。
#Requires -Modules AzureRM.Storage
Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob
Enable-AzureRmAlias
を使用して、最小限の変更で実行できます。
#Requires -Modules Az.Storage
Enable-AzureRmAlias -Scope Process
Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob
Enable-AzureRmAlias -Scope CurrentUser
を実行すると、開くすべての PowerShell セッションのエイリアスが有効になるため、このコマンドレットを実行した後、次のようなスクリプトをまったく変更する必要はありません。
Get-AzureRmStorageAccount | Get-AzureStorageContainer | Get-AzureStorageBlob
エイリアス コマンドレットの使用方法の詳細については、Enable-AzureRmAlias リファレンスを参照してください。
準備ができたら、Disable-AzureRmAlias
を使って作成されたエイリアスを削除して無効にします。 詳細については、Disable-AzureRmAlias リファレンスを参照してください。
重要
エイリアスを無効にする場合は、必ず、エイリアスが有効になっているすべてのスコープに対して無効にしてください。
モジュール名の変更
次のモジュールを除き、モジュール名が AzureRM.*
から Az.*
に変更されました。
AzureRM モジュール | Azモジュール |
---|---|
Azure.Storage | Az.Storage |
Azure.AnalysisServices | Az.AnalysisServices |
AzureRM.Profile | Az.Accounts |
AzureRM.Insights | Az.Monitor |
AzureRM.RecoveryServices.Backup | Az.RecoveryServices |
AzureRM.RecoveryServices.SiteRecovery | Az.RecoveryServices |
AzureRM.Tags | Az.Resources |
AzureRM.MachineLearningCompute | Az.MachineLearning |
AzureRM.UsageAggregates | Az.Billing |
AzureRM.Consumption | Az.Billing |
モジュール名の変更は、#Requires
または Import-Module
を使用して特定のモジュールを読み込むスクリプトを、代わりに新しいモジュールを使用するように変更する必要があることを意味します。 コマンドレットサフィックスが変更されていないモジュールの場合、これはモジュール名が変更されたが、操作領域を示すサフィックス ないことを意味します。
#Requires ステートメントと Import-Module ステートメントの移行
#Requires
または Import-Module
を使用して AzureRM モジュールへの依存関係を宣言するスクリプトは、新しいモジュール名を使用するように更新する必要があります。 例えば:
#Requires -Module AzureRM.Compute
次のように変更する必要があります。
#Requires -Module Az.Compute
Import-Module
の場合:
Import-Module -Name AzureRM.Compute
次のように変更する必要があります。
Import-Module -Name Az.Compute
完全修飾コマンドレット呼び出しの移行
次のようなモジュール修飾コマンドレット呼び出しを使用するスクリプト。
AzureRM.Compute\Get-AzureRmVM
新しいモジュールとコマンドレットの名前を使用するには、次のように変更する必要があります。
Az.Compute\Get-AzVM
モジュール マニフェストの依存関係の移行
モジュール マニフェスト (.psd1) ファイルを介して AzureRM モジュールへの依存関係を表すモジュールは、RequiredModules
セクションのモジュール名を更新する必要があります。
RequiredModules = @(@{ModuleName="AzureRM.Profile"; ModuleVersion="5.8.2"})
次のように変更する必要があります。
RequiredModules = @(@{ModuleName="Az.Accounts"; ModuleVersion="1.0.0"})
削除されたモジュール
次のモジュールが削除されました。
AzureRM.Backup
AzureRM.Compute.ManagedService
AzureRM.Scheduler
これらのサービスのツールは、アクティブにサポートされなくなりました。 お客様は、便利になったらすぐに代替サービスに移行することをお勧めします。
Windows PowerShell 5.1 および .NET 4.7.2
PowerShell 5.1 for Windows で Az を使用するには、.NET Framework 4.7.2 をインストールする必要があります。 PowerShell Core 6.x 以降を使用する場合、.NET Framework は必要ありません。
PSCredential を使用したユーザー ログインの一時的な削除
.NET Standard の認証フローが変更されたため、PSCredential を使用してユーザー ログインを一時的に削除しています。 この機能は、Windows 用 PowerShell 5.1 の 2019 年 1 月 15 日リリースで再導入される予定です。 これについては、この GitHub の問題 詳しく説明します。
Web ブラウザー プロンプトではなく、既定のデバイス コード ログイン
.NET Standard の認証フローが変更されたため、対話型ログイン時に既定のログイン フローとしてデバイス ログインを使用しています。 2019 年 1 月 15 日リリースでは、Windows 用 PowerShell 5.1 の Web ブラウザー ベースのログインが既定として再導入されます。 その時点で、ユーザーは Switch パラメーターを使用してデバイス ログインを選択できます。
モジュールの破壊的変更
このセクションでは、個々のモジュールとコマンドレットの具体的な破壊的変更について詳しく説明します。
Az.ApiManagement (以前の AzureRM.ApiManagement)
- 次のコマンドレットを削除しました。
- New-AzureRmApiManagementHostnameConfiguration
- Set-AzureRmApiManagementHostnames
- Update-AzureRmApiManagementDeployment
- Import-AzureRmApiManagementHostnameCertificate
- Set-AzApiManagement コマンドレット 使用して、代わりにこれらのプロパティを設定します
- 次のプロパティを削除しました。
PsApiManagementContext
からプロパティPortalHostnameConfiguration
、ProxyHostnameConfiguration
、ManagementHostnameConfiguration
、および型PsApiManagementHostnameConfiguration
のScmHostnameConfiguration
を削除しました。 代わりに、PortalCustomHostnameConfiguration
、ProxyCustomHostnameConfiguration
、ManagementCustomHostnameConfiguration
、および型PsApiManagementCustomHostNameConfiguration
のScmCustomHostnameConfiguration
を使用します。- PsApiManagementContext からプロパティ
StaticIPs
を削除しました。 プロパティは、PublicIPAddresses
とPrivateIPAddresses
に分割されています。 - コマンドレットから必要なプロパティ
Location
New-AzureApiManagementVirtualNetwork 削除しました。
Az.Billing (以前の AzureRM.Billing、AzureRM.Consumption、AzureRM.UsageAggregates)
InvoiceName
パラメーターは、Get-AzConsumptionUsageDetail
コマンドレットから削除されました。 スクリプトでは、請求書に他の ID パラメーターを使用する必要があります。
Az.Compute (以前の AzureRM.Compute)
IdentityIds
はPSVirtualMachine
Identity
プロパティから削除され、PSVirtualMachineScaleSet
オブジェクトスクリプトはこのフィールドの値を使用して処理を決定する必要がなくなります。PSVirtualMachineScaleSetVM
オブジェクトのInstanceView
プロパティの型がVirtualMachineInstanceView
からVirtualMachineScaleSetVMInstanceView
に変更されますUpgradePolicy
プロパティからAutoOSUpgradePolicy
プロパティとAutomaticOSUpgrade
プロパティが削除される- オブジェクト内の
Sku
プロパティの型PSSnapshotUpdate
DiskSku
からSnapshotSku
に変更されます VmScaleSetVMParameterSet
はAdd-AzVMDataDisk
コマンドレットから削除されたため、ScaleSet VM にデータ ディスクを個別に追加することはできなくなります。
Az.KeyVault (以前の AzureRM.KeyVault)
PurgeDisabled
プロパティがPSKeyVaultKeyAttributes
、PSKeyVaultKeyIdentityItem
、およびPSKeyVaultSecretAttributes
オブジェクトから削除されました。スクリプトは、処理の決定を行うために、PurgeDisabled
プロパティを参照しなくなりました。
Az.Monitor (以前の AzureRM.Insights)
複数形の名前
Categories
とTimegrains
パラメーターを削除し、Set-AzDiagnosticSetting
コマンドレット スクリプトで単一形のパラメーター名を優先的に使用するようにしました。Set-AzureRmDiagnosticSetting -Timegrains PT1M -Categories Category1, Category2
次のように変更する必要があります。
Set-AzDiagnosticSetting -Timegrain PT1M -Category Category1, Category2
Az.Network (以前の AzureRM.Network)
- 非推奨の
ResourceId
パラメーターGet-AzServiceEndpointPolicyDefinition
コマンドレットから削除されました - 非推奨の
EnableVmProtection
プロパティPSVirtualNetwork
オブジェクトから削除されました - 非推奨の
Set-AzVirtualNetworkGatewayVpnClientConfig
コマンドレットを削除しました
スクリプトは、これらのフィールドの値に基づいて処理の決定を行うべきではありません。
Az.Resources (以前の AzureRM.Resources)
コマンドレット
New/Set-AzPolicyAssignment
からパラメーターSku
を削除しました。Password
パラメーターがNew-AzADServicePrincipal
およびNew-AzADSpCredential
コマンドレットから削除され、パスワードが自動的に生成されます。パスワードを指定するスクリプト:New-AzAdSpCredential -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb -Password $secPassword
出力からパスワードを取得するように変更する必要があります。
$credential = New-AzAdSpCredential -ObjectId aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb $secPassword = $credential.Secret
Az.Storage (以前の Azure.Storage と AzureRM.Storage)
- ストレージ アカウント名のみを使用した Oauth ストレージ コンテキストの作成をサポートするために、既定のパラメーター セットが
OAuthParameterSet
に変更されました- 例:
$ctx = New-AzureStorageContext -StorageAccountName $accountName
- 例:
Get-AzStorageUsage
コマンドレットでは、Location
パラメーターが必須になりました- Storage API メソッドでは、同期 API 呼び出しではなく、タスクベースの非同期パターン (TAP) が使用されるようになりました。 次の例では、新しい非同期コマンドを示します。
BLOB スナップショット
AzureRM:
$b = Get-AzureStorageBlob -Container $containerName -Blob $blobName -Context $ctx
$b.ICloudBlob.Snapshot()
Az:
$b = Get-AzStorageBlob -Container $containerName -Blob $blobName -Context $ctx
$task = $b.ICloudBlob.SnapshotAsync()
$task.Wait()
$snapshot = $task.Result
スナップショットの共有
AzureRM:
$Share = Get-AzureStorageShare -Name $containerName -Context $ctx
$snapshot = $Share.Snapshot()
Az:
$Share = Get-AzStorageShare -Name $containerName -Context $ctx
$task = $Share.SnapshotAsync()
$task.Wait()
$snapshot = $task.Result
論理的に削除された BLOB の削除の取り消し
AzureRM:
$b = Get-AzureStorageBlob -Container $containerName -Blob $blobName -IncludeDeleted -Context $ctx
$b.ICloudBlob.Undelete()
Az:
$b = Get-AzStorageBlob -Container $containerName -Blob $blobName -IncludeDeleted -Context $ctx
$task = $b.ICloudBlob.UndeleteAsync()
$task.Wait()
BLOB 層を設定する
AzureRM:
$blockBlob = Get-AzureStorageBlob -Container $containerName -Blob $blockBlobName -Context $ctx
$blockBlob.ICloudBlob.SetStandardBlobTier("hot")
$pageBlob = Get-AzureStorageBlob -Container $containerName -Blob $pageBlobName -Context $ctx
$pageBlob.ICloudBlob.SetPremiumBlobTier("P4")
Az:
$blockBlob = Get-AzStorageBlob -Container $containerName -Blob $blockBlobName -Context $ctx
$task = $blockBlob.ICloudBlob.SetStandardBlobTierAsync("hot")
$task.Wait()
$pageBlob = Get-AzStorageBlob -Container $containerName -Blob $pageBlobName -Context $ctx
$task = $pageBlob.ICloudBlob.SetPremiumBlobTierAsync("P4")
$task.Wait()
Az.Websites (以前の AzureRM.Websites)
PSAppServicePlan
、PSCertificate
、PSCloningInfo
、およびPSSite
オブジェクトから非推奨のプロパティを削除しました
次の手順
- Azure Stack Hub 上の PowerShell の詳細については、「Azure Stack Hub での PowerShell の概要 」を参照してください。
- PowerShell Az モジュールをインストールする(Azure Stack Hub 用の PowerShell Az モジュールのインストール に関するページを参照