亚马逊AWS官方博客

新版 AWS Tools for PowerShell 的预览版

2012 年,我们推出了第一版适用于 Windows PowerShell 的 AWS Tools for PowerShell 模块,其中包含支持 20 多项服务的大约 550 个 Cmdlet。随后几年间,随着 AWS 的增长,该模块已扩展到涵盖 160 多项服务的大约 6000 个 Cmdlet,并且还涵盖适用于能够运行跨平台的 PowerShell 6 或更高版本用户的另一个(但相同)的模块。

将所有的 Cmdlet 放置在一个模块上也存在缺点(Windows 上适用于 PowerShell 第 2 版到第 5.1 版的 AWSPowerShell、Windows、macOS 和 Linux 上适用于 PowerShell 第 6 版或更高版本的 AWSPowerShell.NetCore)。首先,模块的导入时间大大增加。在我的第 8 代 Core i7 笔记本电脑上,导入任一模块的时间均已经超过 25 秒。第二,团队发现,在模块中列出所有的 Cmdlet 存在一个问题,因此必须恢复到为 CmdletsToExport 清单属性指定“*”。这可以防止 PowerShell 在显式导入 Cmdlet 前在模块中确定它们,从而影响 Cmdlet 名称的制表符完成。

在我的 shell 配置文件中,我使用 Set-AWSCredentialSet-DefaultAWSRegion Cmdlet 为我的 shell 设置初始范围。因此,我必须先显式导入模块,然后等待 shell 变成可用状态。这种缓慢的加载时间显然是不可持续的,当我们因特别想要加快启动时间而在 PowerShell 中编写 AWS Lambda 函数时更是如此。

推出重构的 AWS Tools for PowerShell 模块(预览版)
今天,团队向 PowerShell Gallery 发布了一组新模块来解决此问题。这些模块处于预览版本,因此团队希望收集您给出的反馈(无论好坏)!

在预览版中,每个 AWS 服务现在都有自己的 PowerShell 模块,具体取决于名为 AWS.Tools.Common 的常见分享模块(这与我们在 NuGet 上使用 适用于 .NET 的 AWS 开发工具包时采用的模块化方法相同)。这包括很多含义:

  • 现在,您可以只为您实际需要的服务安装模块,而不是为所有服务下载并安装一个大型模块。当您安装服务特定的模块时,将会自动安装常见模块。
  • 您不再需要在使用前显式导入任何预览模块,因为每个模块的 CmdletsToExport 清单属性现在都已适当指定。
  • 新模块的版本控制策略目前遵照 AWSPowerShellAWSPowerShell.NetCore 模块。该策略在团队的 GitHub 存储库预览通知中进行了详细说明,欢迎您提出反馈。
  • Shell 的启动时间很快! 在我之前提到的相同系统上,目前,我的 shell 命令平均加载时间介于 1 到 2 秒。对 shell 配置文件的唯一更改是删除显式模块导入。

新模块遵照名称模式 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 函数,我需要在我的函数脚本文件中添加下面两个语句:

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

强制参数
该团队还解决了用户提出的另一个长期且常见的请求,即将参数编辑为强制参数。强制参数是 PowerShell 的一项伟大功能,有助于指导不熟悉 API 的用户,我们很高兴现在能够为他们提供支持。强制参数的标记取决于服务模型中的数据,因此,如果您发现任何问题,请通过本博文末尾的链接告知团队,以便他们可以进行调查,并在需要时纠正服务模型。

其他预览改变
开发团队还利用这个机会删除了一些旧的、过时的 Cmdlet。如果您需要使用这些已删除的 Cmdlet,您暂时需要继续使用现有模块,但务必在 GitHub 上提出问题,以便团队可以考虑在新版本中支持它们:

  • 为了支持 CloudHSMV2 (HSM2),删除了 CloudHSM (HSM)
  • 为了支持 ElasticLoadBalancingV2 (ELB2),删除了 ElasticLoadBalancing (ELB)
  • 为了支持 EventBridge (EVB),删除了 CloudWatchEvents (CWE)
  • 为了支持 KinesisAnalyticsV2 (KINA2),删除了 KinesisAnalytics (KINA)

AWSPowerShell 和 AWSPowerShell.NetCore 模块发生了什么?

什么也没发生! 在可预见的未来,这些模块将保留不变,并将与预览版同步更新。AWS 非常重视反向兼容,我们不想阻止使用这些模块,除非我们知道社区对替换感到满意。

请注意,我们不能将两种不同的模块组混合在一起。例如,如果您加载了 AWSPowerShell(或 AWSPowerShell.NetCore)模块,则尝试从预览版加载模块会失败,并出现错误。

欢迎参与!

新预览版模块现已在 PowerShell Gallery 中推出,有关该版本的更多详细信息,可参阅 Matteo 在 GitHub 上发布的通知。开发团队非常希望听到您对预览版的反馈 – 您喜欢(或不喜欢)新的模块化格式? 您遇到过标记强制参数新支持的任何相关问题吗? 您发现的任何其他后向兼容性问题? 有关应采用的版本控制策略的想法? 一定要将他们的 GitHub 问题存储库告知他们!

— Steve