Amazon Web Services ブログ

新しい AWS Tools for PowerShell のプレビューリリース

2012 年に、Windows PowerShell 用の AWS Tools for PowerShell モジュールの最初のバージョンを発表しました。これには、約 20 のサービスをサポートする約 550 のコマンドレットが含まれています。それ以来、AWS の成長により、モジュールは 160 以上のサービスにまたがるほぼ 6,000 のコマンドレットに拡張され、さらにクロスプラットフォームで実行できる PowerShell 6 以上のユーザー向けの追加 (ただし同一) モジュールが加わりました。

これらすべてのコマンドレットを単一のモジュール (Windows では PowerShell v2 から v5.1 までの AWSPowerShell、Windows、macOS、Linux では PowerShell v6 以上の AWSPowerShell.NetCore) に入れることには欠点があります。まず、モジュールのインポート時間が大幅に増加します。私の第 8 世代 Core i7 ラップトップでは、いずれかのモジュールをインポートする時間が 25 秒を超えています。次に、チームがモジュールマニフェスト内のすべてのコマンドレットのリストに関する問題を発見したため、CmdletsToExport マニフェストプロパティに「*」を指定する必要があります。これにより、モジュールが明示的にインポートされるまでPowerShell はモジュール内のコマンドレットを決定できなくなり、コマンドレット名のタブ完了に影響します。

私のシェルプロファイルでは、Set-AWSCredential および Set-DefaultAWSRegion コマンドレットを使用して、シェルの初期スコープを設定しています。したがって、最初にモジュールを明示的にインポートしてから、シェルが使用可能になるまで待つ必要があります。この遅い読み込み時間は明らかに容認できません。特に、起動時間を速くしたいときに、PowerShell で AWS Lambda 関数を作成する場合はなおさらです。

リファクタリングされた AWS Tools for PowerShell モジュールの発表 (プレビュー)
本日、この問題に対処するために PowerShell ギャラリーに新しいモジュールセットをリリースしました。これらのモジュールはプレビュー中であるため、チームはフィードバック (良いか悪いか) を収集できます。

プレビューリリースでは、それぞれの AWS のサービスに独自の PowerShell モジュールが追加され、すべてが AWS.Tools.Common という共通の共有モジュールをベースとしています (これは、NuGet 上の AWS SDK for .NET で使用するのと同じモジュラーアプローチです)。これには、いくつかの意味があります。

  • すべてのサービスに対して単一の大きなモジュールをダウンロードしてインストールする代わりに、実際に必要なサービスのモジュールだけをインストールできるようになりました。サービス固有のモジュールをインストールすると、共通モジュールが自動的にインストールされます。
  • 各モジュールの CmdletsToExport マニフェストプロパティが適切に指定されるようになったため、使用前にプレビューモジュールを明示的にインポートする必要がなくなりました。
  • 現在、新しいモジュールのバージョン管理戦略は、AWSPowerShell および AWSPowerShell.NetCore モジュールに従っています。この戦略の詳細は、プレビュー用のチームの GitHub リポジトリ通知に詳しく記載されています。フィードバックをお待ちしています。
  • シェルの起動時間が速いです! 前述の同じシステムで、コマンドシェルのロード時間は平均で 1〜2 秒になりました。シェルプロファイルへの唯一の変更は、明示的なモジュールインポートを削除することでした。

新しいモジュールは、AWS.Tools.ServiceName という命名パターンに従います。場合によっては、より一般的な縮約名が使用されます。例:

  • AWS.Tools.EC2
  • AWS.Tools.S3
  • AWS.Tools.DirectoryService
  • AWS.Tools.ElasticLoadBalancingV2
  • AWS.Tools.Polly
  • AWS.Tools.Rekognition
  • など

AWS Lambda 用の PowerShell 関数を作成している場合は、新しいモジュールを使用するように (#Requires ステートメントを使用して) スクリプトの依存関係を更新してください。また、共通モジュール用の #Requires ステートメントを追加する必要もあります。たとえば、Amazon Simple Storage Service (S3) を使用する PowerShell で Lambda 関数を作成している場合、次の 2 つのステートメントを関数のスクリプトファイルに追加する必要があります。

#Requires -Modules @{ModuleName='AWS.Tools.Common';ModuleVersion='3.3.563.0'}
#Requires -Modules @{ModuleName='AWS.Tools.S3';ModuleVersion='3.3.563.0'}

必須パラメータ
またチームは、ユーザーからの別の長年求められていた要求、つまりパラメータを必須としてマークするという要求にも対処しました。必須パラメータは PowerShell の優れた機能であり、API に不慣れなユーザーをガイドするのに役立ちます。現在、それらをサポートできることを非常に嬉しく思っています。必須パラメータのマーキングはサービスモデルのデータに依存するため、何か問題を発見した場合は、この投稿の最後にあるリンクでチームに知らせ、必要に応じて調査およびサービスモデルの修正をしてもらってください。

その他のプレビューの変更
また開発チームは、古くて時代遅れのコマンドレットを削除する機会を得ました。これらの削除されたコマンドレットのいずれかを使用する必要がある場合は、当面は既存のモジュールを引き続き使用する必要がありますが、GitHub で問題を提起して、チームがそれらを新しいバージョンでサポートすることを検討できるようにしてください。

  • CloudHSMV2 (HSM2) を優先して、CloudHSM (HSM) が削除されました
  • ElasticLoadBalancingV2 (ELB2) を優先して、ElasticLoadBalancing (ELB) が削除されました
  • EventBridge (EVB) を優先して、CloudWatchEvents (CWE) が削除されました
  • KinesisAnalyticsV2 (KINA2) を優先して、KinesisAnalytics (KINA) が削除されました

AWSPowerShell および AWSPowerShell.NetCore モジュールはどうなったか?

何も変わりません! これらのモジュールは残り、近い将来にプレビューと同期して更新されます。AWS は下位互換性を非常に重視しており、コミュニティが交換に満足していることがわかるまで、これらのモジュールの使用を妨げたくありません。

2 つの異なるモジュールセットを混在させることはできません。たとえば、AWSPowerShell (または AWSPowerShell.NetCore) モジュールがロードされている場合、プレビューからモジュールをロードしようとするとエラーが発生して失敗します。

お試しください!

新しいプレビューモジュールは、PowerShell ギャラリーで利用できます。リリースの詳細については、GitHub にある Matteo の通知に記載されています。開発チームは、プレビューに関するフィードバックをお待ちしています。新しいモジュラー形式は好きですか (好きではありませんか)? 必須パラメータのマーク付けの新しいサポートで問題がありましたか? 他に下位互換性の問題はありますか? 採用すべきバージョン管理戦略についてご意見はありますか? GitHub の問題リポジトリで、ぜひお知らせください!

— Steve