[PowerShell] 新しいAWS Tools for PowerShellのプレビュー版がリリースされました

2019.08.13

しばたです。
先週AWSより新しいAWS Tools for PowerShellのプレビュー版をリリースしたという記事が公開されました。

本記事ではこちらの内容をベースに新しいAWS Tools for PowerShellの紹介をしていきます。

現在のモジュールの問題点

最初に新しいAWS Tools for PowerShellがリリースされるに至るまでの事情を説明します。

現在のAWS Tools for PowerShellはWindows PowerShell向けのAWSPowerShellモジュールとPowerShell Core向けのAWSPowerShell.NetCoreモジュールの2種類存在しており、各モジュールは1つのモジュールですべてのAWSサービスをサポートするつくりとなっています。

2012年にAWS Tools for PowerShellがリリースされてから2019年8月現在に至るまでにAWSのサービスは増え続け、AWS Tools for PowerShellでサポートされるサービスは175、コマンドレット数は約6000に至るまでに増えています。

# AWSPowerShell.NetCoreのバージョン
C:\> Get-InstalledModule -Name AWSPowerShell.NetCore | Select-Object Version
Version
-------
3.3.553.0

# AWSPowerShell.NetCore がサポートするサービス数
C:\> Get-AWSPowerShellVersion -ListServiceVersionInfo | Select-Object -Skip 1 | Measure-Object | Select-Object Count
Count
-----
  175

# 公開されているコマンドレット数
C:\> Get-AWSCmdletName | Measure-Object | Select-Object Count
Count
-----
 5893

これはPowerShellのモジュールとしてはあまりも巨大であり、

といった問題を抱えている現状があります。

新しいAWS Tools for PowerShell (AWS.Tools.*)

これらの問題に対応するために新しい形のモジュールがプレビューリリースされました。
新しいモジュールはサービス毎でモジュールを分割し、AWS.Tools.[個別のサービス名]という名前で提供されています。
先述のブログによればAWS SDK for .NETと同じアプローチに切り替えたとのことですが、PowerShellに親しんでいる人にとってはAzure PowerShellと同じ方式と言った方がわかりやすいでしょう。

AWS.Tools.Common

個別のサービスとは別にInitialize-AWSDefaultConfigurationといった初期化機能や共通機能についてはAWS.Tools.Commonというモジュールに保存されています。
このモジュールは各サービスの依存モジュールとなっており、サービス毎のモジュールをインストールした際に自動で追加される様になっています。

AWS.Tools.Commonモジュールで提供されるコマンドレットは以下。

C:\> Get-Command -Module AWS.Tools.Common | Select-Object CommandType, Name

CommandType Name
----------- ----
      Alias Clear-AWSCredentials
      Alias Clear-AWSDefaults
      Alias Get-AWSCredentials
      Alias Initialize-AWSDefaults
      Alias New-AWSCredentials
      Alias Set-AWSCredentials
     Cmdlet Add-AWSLoggingListener
     Cmdlet Clear-AWSCredential
     Cmdlet Clear-AWSDefaultConfiguration
     Cmdlet Clear-AWSHistory
     Cmdlet Clear-AWSProxy
     Cmdlet Clear-DefaultAWSRegion
     Cmdlet Disable-AWSMetricsLogging
     Cmdlet Enable-AWSMetricsLogging
     Cmdlet Get-AWSCmdletName
     Cmdlet Get-AWSCredential
     Cmdlet Get-AWSPowerShellVersion
     Cmdlet Get-AWSPublicIpAddressRange
     Cmdlet Get-AWSRegion
     Cmdlet Get-DefaultAWSRegion
     Cmdlet Initialize-AWSDefaultConfiguration
     Cmdlet New-AWSCredential
     Cmdlet Remove-AWSCredentialProfile
     Cmdlet Remove-AWSLoggingListener
     Cmdlet Set-AWSCredential
     Cmdlet Set-AWSHistoryConfiguration
     Cmdlet Set-AWSProxy
     Cmdlet Set-AWSResponseLogging
     Cmdlet Set-AWSSamlEndpoint
     Cmdlet Set-AWSSamlRoleProfile
     Cmdlet Set-DefaultAWSRegion

バージョン付けおよび互換性について

新しいAWS Tools for PowerShellのバージョンについてはこれまでのAWSPowerShellモジュールとAWSPowerShell.NetCoreに倣う形となっており、提供するコマンドレットも変わりありません。
現時点ではモジュール構成のみ変わると考えて問題ないでしょう。

その他変更点

ただし、モジュールを更新するのに合わせて古いAPI向けの機能が削除されます。
先述のブログによると以下の点が変更されるそうです。

  • CloudHSM (HSM)の機能は削除され、CloudHSMV2 (HSM2) に更新
  • ElasticLoadBalancing (ELB) の機能は削除され、ElasticLoadBalancingV2 (ELB2)のみを残す形に
  • CloudWatchEvents (CWE) の機能は削除され、EventBridge (EVB) に更新
  • KinesisAnalytics (KINA) の機能は削除され、KinesisAnalyticsV2 (KINA2) のみを残す形に

モジュール一覧

ちょっと長いですが、現在公開されているモジュールの一覧は以下のコマンドで取得できます。
前項で触れた廃止した機能もあるため165モジュールとなっています。

# Find-Module -Name AWS.Tools.*の結果があまり安定しない...
C:\> $modules = Find-Module -Name AWS.Tools.*
C:\> $modules | Select-Object Name, Version | Sort-Object -Property Name

Name                                      Version
----                                      -------
AWS.Tools.ACMPCA                          3.3.563.1
AWS.Tools.AlexaForBusiness                3.3.563.1
AWS.Tools.Amplify                         3.3.563.1
AWS.Tools.APIGateway                      3.3.563.1
AWS.Tools.ApiGatewayV2                    3.3.563.1
AWS.Tools.ApplicationAutoScaling          3.3.563.1
AWS.Tools.ApplicationDiscoveryService     3.3.563.1
AWS.Tools.ApplicationInsights             3.3.563.1
AWS.Tools.AppMesh                         3.3.563.1
AWS.Tools.AppSync                         3.3.563.1
AWS.Tools.Athena                          3.3.563.1
AWS.Tools.AutoScaling                     3.3.563.1
AWS.Tools.AWSHealth                       3.3.563.1
AWS.Tools.AWSMarketplaceCommerceAnalytics 3.3.563.1
AWS.Tools.AWSMarketplaceMetering          3.3.563.1
AWS.Tools.AWSSupport                      3.3.563.1
AWS.Tools.Backup                          3.3.563.1
AWS.Tools.Batch                           3.3.563.1
AWS.Tools.Budgets                         3.3.563.1
AWS.Tools.CertificateManager              3.3.563.1
AWS.Tools.Chime                           3.3.563.1
AWS.Tools.Cloud9                          3.3.563.1
AWS.Tools.CloudDirectory                  3.3.563.1
AWS.Tools.CloudFormation                  3.3.563.1
AWS.Tools.CloudFront                      3.3.563.1
AWS.Tools.CloudHSMV2                      3.3.563.1
AWS.Tools.CloudSearch                     3.3.563.1
AWS.Tools.CloudSearchDomain               3.3.563.1
AWS.Tools.CloudTrail                      3.3.563.1
AWS.Tools.CloudWatchLogs                  3.3.563.1
AWS.Tools.CodeBuild                       3.3.563.1
AWS.Tools.CodeCommit                      3.3.563.1
AWS.Tools.CodeDeploy                      3.3.563.1
AWS.Tools.CodePipeline                    3.3.563.1
AWS.Tools.CodeStar                        3.3.563.1
AWS.Tools.CognitoIdentity                 3.3.563.1
AWS.Tools.CognitoIdentityProvider         3.3.563.1
AWS.Tools.CognitoSync                     3.3.563.1
AWS.Tools.Common                          3.3.563.1
AWS.Tools.Comprehend                      3.3.563.1
AWS.Tools.ComprehendMedical               3.3.563.1
AWS.Tools.ConfigService                   3.3.563.1
AWS.Tools.Connect                         3.3.563.1
AWS.Tools.CostAndUsageReport              3.3.563.1
AWS.Tools.CostExplorer                    3.3.563.1
AWS.Tools.DatabaseMigrationService        3.3.563.1
AWS.Tools.DataPipeline                    3.3.563.1
AWS.Tools.DataSync                        3.3.563.1
AWS.Tools.DAX                             3.3.563.1
AWS.Tools.DeviceFarm                      3.3.563.1
AWS.Tools.DirectConnect                   3.3.563.1
AWS.Tools.DirectoryService                3.3.563.1
AWS.Tools.DLM                             3.3.563.1
AWS.Tools.DocDB                           3.3.563.1
AWS.Tools.DynamoDBv2                      3.3.563.1
AWS.Tools.EC2                             3.3.563.1
AWS.Tools.ECR                             3.3.563.1
AWS.Tools.ECS                             3.3.563.1
AWS.Tools.EKS                             3.3.563.1
AWS.Tools.ElastiCache                     3.3.563.1
AWS.Tools.ElasticBeanstalk                3.3.563.1
AWS.Tools.ElasticFileSystem               3.3.563.1
AWS.Tools.ElasticLoadBalancingV2          3.3.563.1
AWS.Tools.ElasticMapReduce                3.3.563.1
AWS.Tools.Elasticsearch                   3.3.563.1
AWS.Tools.ElasticTranscoder               3.3.563.1
AWS.Tools.EventBridge                     3.3.563.1
AWS.Tools.FMS                             3.3.563.1
AWS.Tools.FSx                             3.3.563.1
AWS.Tools.GameLift                        3.3.563.1
AWS.Tools.Glacier                         3.3.563.1
AWS.Tools.GlobalAccelerator               3.3.563.1
AWS.Tools.Glue                            3.3.563.1
AWS.Tools.Greengrass                      3.3.563.1
AWS.Tools.GroundStation                   3.3.563.1
AWS.Tools.GuardDuty                       3.3.563.1
AWS.Tools.IdentityManagement              3.3.563.1
AWS.Tools.ImportExport                    3.3.563.1
AWS.Tools.Inspector                       3.3.563.1
AWS.Tools.IoT                             3.3.563.1
AWS.Tools.IoTEvents                       3.3.563.1
AWS.Tools.IoTEventsData                   3.3.563.1
AWS.Tools.IoTJobsDataPlane                3.3.563.1
AWS.Tools.IoTThingsGraph                  3.3.563.1
AWS.Tools.Kafka                           3.3.563.1
AWS.Tools.KeyManagementService            3.3.563.1
AWS.Tools.Kinesis                         3.3.563.1
AWS.Tools.KinesisFirehose                 3.3.563.1
AWS.Tools.KinesisVideo                    3.3.563.1
AWS.Tools.KinesisVideoMedia               3.3.563.1
AWS.Tools.Lambda                          3.3.563.1
AWS.Tools.Lex                             3.3.563.1
AWS.Tools.LexModelBuildingService         3.3.563.1
AWS.Tools.LicenseManager                  3.3.563.1
AWS.Tools.Lightsail                       3.3.563.1
AWS.Tools.MachineLearning                 3.3.563.1
AWS.Tools.Macie                           3.3.563.1
AWS.Tools.ManagedBlockchain               3.3.563.1
AWS.Tools.MarketplaceEntitlementService   3.3.563.1
AWS.Tools.MediaConnect                    3.3.563.1
AWS.Tools.MediaLive                       3.3.563.1
AWS.Tools.MediaPackage                    3.3.563.1
AWS.Tools.MediaPackageVod                 3.3.563.1
AWS.Tools.MediaStore                      3.3.563.1
AWS.Tools.MediaStoreData                  3.3.563.1
AWS.Tools.MediaTailor                     3.3.563.1
AWS.Tools.MigrationHub                    3.3.563.1
AWS.Tools.Mobile                          3.3.563.1
AWS.Tools.MQ                              3.3.563.1
AWS.Tools.MTurk                           3.3.563.1
AWS.Tools.Neptune                         3.3.563.1
AWS.Tools.OpsWorks                        3.3.563.1
AWS.Tools.OpsWorksCM                      3.3.563.1
AWS.Tools.Organizations                   3.3.563.1
AWS.Tools.Personalize                     3.3.563.1
AWS.Tools.PersonalizeEvents               3.3.563.1
AWS.Tools.PersonalizeRuntime              3.3.563.1
AWS.Tools.PI                              3.3.563.1
AWS.Tools.Pinpoint                        3.3.563.1
AWS.Tools.PinpointEmail                   3.3.563.1
AWS.Tools.Polly                           3.3.563.1
AWS.Tools.Pricing                         3.3.563.1
AWS.Tools.QuickSight                      3.3.563.1
AWS.Tools.RAM                             3.3.563.1
AWS.Tools.RDS                             3.3.563.1
AWS.Tools.RDSDataService                  3.3.563.1
AWS.Tools.Redshift                        3.3.563.1
AWS.Tools.Rekognition                     3.3.563.1
AWS.Tools.ResourceGroups                  3.3.563.1
AWS.Tools.ResourceGroupsTaggingAPI        3.3.563.1
AWS.Tools.RoboMaker                       3.3.563.1
AWS.Tools.Route53                         3.3.563.1
AWS.Tools.Route53Domains                  3.3.563.1
AWS.Tools.Route53Resolver                 3.3.563.1
AWS.Tools.S3                              3.3.563.1
AWS.Tools.S3Control                       3.3.563.1
AWS.Tools.SageMaker                       3.3.563.1
AWS.Tools.SageMakerRuntime                3.3.563.1
AWS.Tools.SecretsManager                  3.3.563.1
AWS.Tools.SecurityHub                     3.3.563.1
AWS.Tools.SecurityToken                   3.3.563.1
AWS.Tools.ServerlessApplicationRepository 3.3.563.1
AWS.Tools.ServerMigrationService          3.3.563.1
AWS.Tools.ServiceCatalog                  3.3.563.1
AWS.Tools.ServiceDiscovery                3.3.563.1
AWS.Tools.ServiceQuotas                   3.3.563.1
AWS.Tools.SimpleEmail                     3.3.563.1
AWS.Tools.SimpleNotificationService       3.3.563.1
AWS.Tools.SimpleSystemsManagement         3.3.563.1
AWS.Tools.SimpleWorkflow                  3.3.563.1
AWS.Tools.Snowball                        3.3.563.1
AWS.Tools.SQS                             3.3.563.1
AWS.Tools.StepFunctions                   3.3.563.1
AWS.Tools.StorageGateway                  3.3.563.1
AWS.Tools.Textract                        3.3.563.1
AWS.Tools.TranscribeService               3.3.563.1
AWS.Tools.Transfer                        3.3.563.1
AWS.Tools.Translate                       3.3.563.1
AWS.Tools.WAF                             3.3.563.1
AWS.Tools.WAFRegional                     3.3.563.1
AWS.Tools.WorkDocs                        3.3.563.1
AWS.Tools.WorkLink                        3.3.563.1
AWS.Tools.WorkMail                        3.3.563.1
AWS.Tools.WorkSpaces                      3.3.563.1
AWS.Tools.XRay                            3.3.563.1

インストール方法

新しいモジュールはPowerShell Galleryからインストール可能で、以下に示す様にInstall-Moduleを使いインストールします。

# 個々のモジュール名を指定してインストール
# (AWS.Tools.Commonは全サービス依存なので自動インストールされる)
Install-Module AWS.Tools.EC2 -Scope CurrentUser

ちなみに、Find-Moduleを使うとモジュールをまとめてインストールできますがこれは非推奨です。
必要に応じて必要なサービスのモジュールだけをインストールして利用するのが推奨されています。

# ※非推奨※
# すべてのモジュールをまとめてインストール
# インストールに時間がかかるうえ、ロード時間も従来のモジュールより遅くなってしまう
# ※非推奨※
Find-Module -Name AWS.Tools.* | Install-Module -Scope CurrentUser

# 一括アンインストール
Get-InstalledModule -Name AWS.Tools.* | Uninstall-Module -Force

Lambdaで使用する場合は#Requires文で個々のモジュールを指定します。

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

コマンドレットの使い方

公開されているコマンドレットはこれまでと変わりませんのでモジュールをインストールした後の使い方については今まで通り変わりありません。

最後に

ざっと説明しましたがこんな感じです。
開発チームはGitHubでのフィードバックを募っていますので気になる点があればガンガンフィードバックするのがよいでしょう。