Azure PowerShellにおけるSwitch-AzureModeの廃止

Posted: 2015/09/09 カテゴリー: Uncategorized
タグ:, , , , , ,

概要

何が変わるのか?

Azure PowerShellチームは、Switch-AzureMode (英語 / 日本語 / 日本語) を削除します。これは、Azure PowerShellの未来のための確かな基盤を構築するための、破壊的な変更です。変更は次の通りであり、2015/09/25のリリースを目標にしています。

  • Switch-AzureModeを削除し、Azure PowerShellからモーダルな動作を削除します
  • AzureResourceManagerモジュールを、サービス/機能別のコンポーネント モジュール (サービス別の管理とデータ プレーン) に分解します
  • AzureResourceManagerモジュールのコマンドレットを、[動詞]-Azure[名詞] から [動詞]-AzureRM[名詞] に改名します
  • PowerShellギャラリー (英語 / 日本語) を介して、Azure、AzureResourceManagerモジュールを配布します
  • すべてのモジュールのリリースに対して、MSDN公開のためのコンテンツ チームへのドキュメントの自動提出を追加します

なぜ変更するのか?

Azure PowerShellは、そのモーダル/ステートフルな動作について強い批判を受けてきました。この動作は、Azure Service Management (ASM) モード、Azure Resource Management (ARM) モードを切り替えるための、Switch-AzureModeの使用に根差しています。今回の変更は破壊的な変更ですが、Azure PowerShellの発展と採用を進めるための強力な基盤を提供します。

変更の結果

  • Azure PowerShellがステートレスになり、ARMとASMを簡単に使えるようになります
  • 各Azureサービス チームが、各々のタイミングで、より迅速にモジュールをリリースできます
  • Azure Automationで、スクリプトを変更なしに実行できます
  • 各リリースとともに、ドキュメントが最新になります
  • 現在Azure Resource Managerを使っているすべてのユーザーが、破壊的な変更の対象です
  • Azure.com、MSDNなどのコンテンツを、2015/09/25までに更新する必要があります

Switch-AzureModeとは何か? なぜそれを廃止するのか?

バージョン0.8.0以降、Azure PowerShellのインストールには、Azure Service Management (ASM) モジュール、Azure Resource Manager (ARM) モジュールの両方が含まれていました。これらのモジュールは、同じセッションで使うように設計されていませんでした。同じセッションでモジュールを使えるようにするため、Switch-AzureModeを使って、1つのモジュールをロードし、別のモジュールをアンロードしていました。ASMが、Azure PowerShellセッションにロードされる既定のモジュールであり、ARMモードに遷移するには、Switch-AzureModeを使う必要がありました。

ASMやARMになじみがない場合は、これらのモジュールが、Service ManagementやResource ManagementのREST APIを対象にしたコマンドレットの集合を表していると考えてください。これらのREST APIは、仮想マシン、ネットワーク、ストレージといったAzureクラウド リソースを管理するためのインターフェイスを提供しています。ARMとASMはAzureリソースを作成するために使えますが、2つのAPIは大幅に異なるアプローチを取っています。ASMは、Azureリソースを作成するための、厳密に不可欠なモデルです。ARMは、Azureリソースについて考える、完全に新しい方法を導入しています。ARMでは、個別のリソースを作成、管理する代わりに、リソースの全体的なトポロジを論理ユニットとしてまとめて管理できます。ARMはAzure管理の未来なので、Azure PowerShellの未来でもあります。

当初、ARMは、ほとんどのユーザーが必要とする全Azure管理タスクを実行するのに必要な全機能を持っていなかったので、ASMを既定にする決定を行いました。今では、ARMは、既定になる準備ができています。ですが、我々は、一方のコマンドレット群が既定になるモーダルなエクスペリエンスを提供するのではなく、2つのモジュールを並列にロードしたいと考えています。

同じリソース (Web Apps、VM、Storageアカウントなど) を管理するために使われるため、ARMのコマンドレットの多くがASMのコマンドレットと同じ名前を共有している (たとえば、「Azure/New-AzureVM」と「AzureResourceManager/New-AzureVM」) という事実を隠すために、Switch-AzureModeコマンドレットが作成されました。我々は、ASMのコマンドレット名を好み、ARMでもコマンドレット名を維持したかったのですが、既存のAzure PowerShellスクリプトを壊したくはなかったのです。そのため、両方のモジュールをロードし、PowerShellのロード順に依存するのではなく、同時に1つのモジュールだけがロードされるようにしました。これが、Azure PowerShellのモーダル/ステートフルなエクスペリエンスを生み出しました。

Switch-AzureModeコマンドレットは、コマンドレットの対話型での使用に偏ったパターンを導入します。Switch-AzureModeが呼び出されると、選択されたコマンドレットを含むようにモジュール パスが変更され、以前のモードのコマンドレットがパスから削除されます。このアクティビティはステートフルであり、現行セッション外で動作している他のスクリプトに、この変更による影響を与えます。これは想定外の動作であり、複数のAzure PowerShellセッションを実行する際に、かなり厄介です。

PowerShellは、幅広いオプションでユーザーがモジュールのインポートや削除を行う機能を提供しています。Switch-AzureModeの独断的なパターンは、ユーザーにとって紛らわしく苛立たしいものです。このパターンは、ユーザーを、モジュールのロードに対するこの独断的なアプローチに縛り付けます。GitHubからの次の引用をご覧ください:

Azureの2つの「モード」は、扱うのが苦痛であり紛らわしいものです。たとえば、(各「モード」に1つずつ) 2つの異なる「Get-AzureVM」コマンドレットがあります。各コマンドレットは、それぞれの一連のVMを一覧表示します (「ServiceManagement」コマンドレットは「v1」のVMを一覧表示し、「ResourceManager」コマンドレットは「v2」のVMを一覧表示します)。これはひどい設計です。「Switch-AzureMode」のような紛らわしい操作を実行する必要なしに各モジュールを利用可能にする、PowerShellモジュールを構築してください。Azureモジュールは2つのモードを備えた地球上で唯一のモジュールであり、それには正当な理由があります。これが、明らかに愚かな設計だからです。

#428 / @trondhindenes (英語 / 日本語)

この設計に関してかなりのユーザー フィードバックがあり、我々は改善してSwitch-AzureModeを廃止するという決定を行いました。

Switch-AzureModeのない未来

Switch-AzureModeの廃止とともに、次の変更が提案されています。

  • Switch-AzureModeの削除
    • AzureモジュールとAzureResourceManagerモジュールの分離
    • もはや、Azure PowerShellはモーダルではなくなります
  • モジュールの分解
    • AzureResourceManagerモジュールが、サービス/機能別のコンポーネント モジュールに分割されます (管理 vs データ プレーン)
    • 管理の例: (コンピューティング管理のコマンドレットを含んでいる) AzureRMCompute、(ストレージ管理のコマンドレットを含んでいる) AzureRMStorage
    • データ プレーンの例: (ストレージにアクセスするためのコマンドレットを含んでいる) AzureStorage
  • コマンドレットの改名
    • Azure Resource Managementモジュールのすべてのコマンドレットは、[動詞]-AzureRM[名詞]というフォーマットになるように改名されます
    • 例: 「New-AzureVm」は「New-AzureRMVm」になります
  • 配布の改善
    • Azure PowerShellとそのコンポーネント モジュールのすべてを配布するために、PowerShellギャラリーとWebPIが使われます
    • これによって、Azure SDK for .NETが、1つの巨大なインストーラーではなく個別のNuGetパッケージをリリースできるのと同様に、より迅速で独立したリリースが可能になります
    • また、我々は、モジュールに、そのモジュールがサポートしているAPIのバージョンでタグ付けします
  • ドキュメントの改善と強制
    • ドキュメントの対象範囲が縮小しないようにするために、ビルド時の検証を追加します
    • Azure PowerShellのリリース ビルドに対して、ドキュメントを自動生成し、MSDNにドキュメントをプッシュします

これらの変更は多数のユーザーに影響を与え、現在Azure Resource Managementコマンドレットを使っている多数のスクリプトを壊す可能性があります。我々は、コミュニティからのフィードバックを基にして、これを選択しました。最初の提案では、我々は、ARMコマンドレットではなくASMコマンドレットの名前を変更するという決定を行いました。これは強い批判を受けました。次の引用をご覧ください:

これがどれだけ苛立たしいものか、とても説明を始めることもできません。

悪いエンジニアリングの後に悪いエンジニアリングを行うために、この決定が行われたように見えます。「その名前が好き」なので、異なるパラメーターとメソッドでコマンド名を再利用できるようにするために、Switch-AzureModeが導入されました。少なくとも私にとっては、たとえ「作業」が戻ってモジュール バージョン確認を追加することであっても、開発に6か月の専門サービスを費やしたスクリプトを改訂するのに、9月は非常識なスケジュールです。

私には、正しいアプローチは、Switch-AzureMode上に構築するのではなく、Switch-AzureModeの大失敗から学ぶことのように見えます。「素晴らしい名前」が、顧客を混乱させ、新しいアクティビティに[動詞]-AzureRM[名詞]のような新しい名前を使う十分な理由ではないことを認めてください。

#428 / @MattAllison (英語 / 日本語)

賛成です。ARMコマンドレットを「AzureRM」接頭辞に移行することが、現在のスクリプトに引き起こす混乱を最小にします。ですが、すでにARMコマンドレットを使い始めている顧客もきっといるので、迅速に対応したいと思います。

#428 / @trondhindenes (英語 / 日本語)

この議論 (英語 / 日本語) やコミュニティからのフィードバックを考慮に入れた後、我々はこの実行計画を決定しました。私は、この計画がAzure PowerShellの未来のための確かな基盤を提供し、コミュニティが賛成すると思っています。

@devigned ありがとうございます。前に言ったように、私は、これがいくつかの厄介な選択肢の中で最高だと思います。これが迅速かつスムーズに行われることを楽しみにしています。大規模なコミュニケーションに取り組む必要があります。これは少なくとも既存のスクリプトの一部に影響を与え、その背後にいるITプロは事前の警告を必要としています!

#428 / @doctordns (英語 / 日本語)

Switch-AzureModeのない未来 – Azure Automationサービス

Azureモジュール (ASM) とAzure Resource Managerモジュール (ARM) のSwitch-AzureModeメソッドは、Azure Automationサービスでは動作しませんでした。これによって、AutomationサービスでARMの採用が進みませんでした。前述のAzure PowerShellに提案されている変更と、Azure Automationに提案されている変更によって、Azure AutomationでASMとARMのコマンドレットを並列に使うのが、ずっと簡単になります。Azure Automationへの次の変更が提案されています:

  • Azure Automationは、前述の新しいARM管理やデータ プレーンのモジュール (AzureRMCompute、AzureRMStorage、AzureStorageなど) を既定で有効化します。ARM管理モジュールは新しいコマンドレット名 (例: 「New-AzureRMVm」) を使うので、すでにAutomationサービスで有効化されているAzure (ASM) コマンドレットと衝突しません。

これらの変更のスケジュール

我々は、これらの変更の幅広い影響を考慮に入れて、変更を行う予定の何か月も前から移行についての情報提供を開始する、という決定を行いました。行動すべき時が来ており、スケジュールは次の通りです。

image

  • Azure PowerShellのモジュール化 (8月中旬)
  • Switch-AzureModeの削除 (9/5まで)
  • コマンドレット名のリファクタリング (9月中旬)
  • Azure PowerShell v0.9.9のリリース (9/25まで)
  • Azure Automationのアップデート (9月末)

コミュニティのフィードバックと議論

Azure PowerShellはオープン ソースであり、あなたがこの話題に関して強い感情を抱いており、自分の設計の考えについて聞いて欲しい場合は、GitHub issue #428 (英語 / 日本語) での議論に参加してください。また、Azure Automationチームも、このGitHub issueを監視しています。

関連情報

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中