しばたテックブログ

気分で書いている技術ブログです。

Azure Cloud Shell内のPowerShellの今後について

元ネタはこちら。

azure.microsoft.com

Azure Cloud Shell内のPowerShell

Azureポータル内で使えるCloud Shellですが、現在は

  • Bash
  • PowerShell (プレビュー)

の二種類選択することができます。
それぞれの実行基盤は

  • Bash : Linux Container (Ubuntu)
  • PowerShell : Windows Server Container (Server Core)

とコンテナになっており、各コンテナにおいてPowerShellは次の様に利用できます。
本エントリでは便宜上これらのコンテナを、Bashコンテナ、PowerShellコンテナと呼称します。(正式な名称ではありませんのでご注意ください)

Bashコンテナ内のPowerShell

コンテナ起動時のシェルはBash(現時点では4.3.48)。
BashからPowerShell Core 6.0(現時点では6.0.2)を呼び出し可能。

PowerShellコンテナ内のPowerShell

コンテナ起動時のシェルはWindows PowerShell 5.1
PowerShellコンソールから新たにPowerShell Core 6.0(現時点では6.0.2)を呼び出し可能。

Azure Cloud Shell内のPowerShellの今後

現状を踏まえた上で、先述のAzure BlogではAzure Cloud Shell内のPowerShellを以下の様に変更するとしています。

  • Faster startup time
  • PowerShell Core 6 as the default experience
  • Running on a Linux container
  • Persistent Tool Settings

この中で重要なのは

  • PowerShell Core 6 as the default experience
  • Running on a Linux container

の2点です。

Linux Container(Bashコンテナ)への統合

一度でもCloud Shellを利用したことがある方はわかると思いますが、ブログ内で

We are well-aware that the startup time of PowerShell in Azure Cloud Shell is well below the user’s expectation.

と触れられている様にPowerShellコンテナの起動速度ははっきり言って遅いです。

For past couple of months, the team has been working hard to make significant improvements in this area

と起動時間の改善をしている様ですが、後述の

To ensure the best command-line tools experience while using Azure Cloud Shell, the PowerShell experience will be switching to a Linux container running PowerShell Core 6.

にある様にBashコンテナに統合することで根本的な解決を図る見込みです。
(文章としては一貫性のあるツールエクスペリエンスのためとされていますが、パフォーマンスの問題が根底にあることは行間を読めば自ずと見えてくるかと思います...)

ただし、明確に「PowerShellコンテナを廃止する」とは言っていないので、今後どの様にCloud Shellが変わっていくのかは注視していきたいです。

この統合に対して、Clould Shellでの操作はAzureの管理が基本であり、PowerShell上であればOSの違いは意識する必要が無くコンテナ統合による影響は軽微かと思います。

ちなみに、Cloud Shell内のユーザーデータの保存先であるCloud Driveは両方のコンテナで共用なので、仮にPowerShellコンテナが廃止されてもユーザーデータがロストすることは無いと明記されています。

PowerShell 6.0をデフォルトに

前項のコンテナ統合もあり、クロスプラットフォームであるPowerShell Core 6.0がデフォルトになるのは自明であり、そして真っ当でしょう。
PowerShell Coreは半期リリースで随時更新されますのでCloud Shellの様なプラットフォームには最適です。

ただ、現状AzureRM.Netcoreモジュールはプレビューバージョンです。
いつGAするかに関してはまるで情報が無く今後を見守るしかない感じです。

最後に

とりあえずこんな感じです。
多くはいないと思いますが、現時点でPowerShellコンテナを使ってAzureを管理している方はPoweShell Coreへの移行を視野に入れておくと良いでしょう。