AWS Lambda
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

PowerShell 中的 AWS Lambda 部署程序包

PowerShell Lambda 部署程序包是一个 ZIP 文件,其中包含您的 PowerShell 脚本、PowerShell 脚本所需的 PowerShell 模块,以及托管 PowerShell Core 所需的程序集。

AWSLambdaPSCore 是一个 PowerShell 模块,您可以从 PowerShell 库安装此模块。您可以使用此模块创建您的 PowerShell Lambda 部署程序包。

您需要使用 PowerShell 脚本中的 #Requires 语句指示您的脚本所依赖的模块。此语句可执行两个重要任务。1) 它可告知其他开发人员该脚本使用的模块,2) 它可标识 AWS PowerShell 工具在部署过程中使用脚本打包所需要的从属模块。有关 #Requires 语句的更多信息,请参阅关于 Requires。有关 PowerShell 部署程序包的更多信息,请参阅 PowerShell 中的 AWS Lambda 部署程序包。

当您的 PowerShell Lambda 函数使用 AWS PowerShell cmdlet 时,请务必设置一个 #Requires 语句,使其引用 AWSPowerShell.NetCore 模块,该模块支持 PowerShell Core — 而不是 AWSPowerShell 模块,该模块仅支持 Windows PowerShell。此外,请确保使用 3.3.270.0 版或更新版本的 AWSPowerShell.NetCore,其优化了 cmdlet 导入过程。如果使用较旧版本,冷启动时间较长。有关更多信息,请参阅适用于 PowerShell 的 AWS 工具

在您开始之前,您必须先设置 PowerShell 开发环境。有关如何执行此操作的说明,请参阅 设置 PowerShell 开发环境

使用 AWSLambdaPSCore 模块

AWSLambdaPSCore 模块具有以下新 cmdlet,可帮助创作和发布 PowerShell Lambda 函数。

Cmdlet 名称 描述
Get‑AWSPowerShellLambdaTemplate 返回入门模板列表。
New‑AWSPowerShellLambda 基于模板创建初始 PowerShell 脚本。
Publish‑AWSPowerShellLambda 将给定 PowerShell 脚本发布到 Lambda。
New‑AWSPowerShellLambdaPackage 创建 Lambda 部署程序包,可以在 CI/CD 系统中用于部署。

为了帮助使用 Lambda 开始编写并调用 PowerShell 脚本,您可以使用 New-AWSPowerShellLambda cmdlet 基于模板创建一个入门脚本。您可以使用 Publish-AWSPowerShellLambda cmdlet 将脚本部署到 AWS Lambda。然后,您可以通过命令行或控制台测试您的脚本。

要创建、上传和测试新的 PowerShell 脚本,请遵循以下步骤:

  1. 查看可用模板。

    运行以下命令,以查看可用模板列表:

    PS C:\> Get-AWSPowerShellLambdaTemplate Template Description -------- ----------- Basic Bare bones script CodeCommitTrigger Script to process AWS CodeCommit Triggers DetectLabels Use Amazon Rekognition service to tag image files in Amazon S3 with detected labels. KinesisStreamProcessor Script to process an Amazon Kinesis stream S3Event Script to process S3 events SNSSubscription Script to be subscribed to an Amazon SNS topic SQSQueueProcessor Script to be subscribed to an Amazon SQS queue

    注意,系统会一直列出新模板,因此该输出只是一个示例。

  2. 创建一个基本脚本。

    运行以下命令,以基于 Basic 模板创建示例脚本:

    New-AWSPowerShellLambda -ScriptName MyFirstPSScript -Template Basic

    当前目录的新子目录中创建一个名为 MyFirstPSScript.ps1 的新文件。目录名称基于 -ScriptName 参数。您可以使用 -Directory 参数来选择其他目录。

    您可以看到新文件包含以下内容:

    # PowerShell script file to be executed as a AWS Lambda function. # # When executing in Lambda the following variables will be predefined. # $LambdaInput - A PSObject that contains the Lambda function input data. # $LambdaContext - An Amazon.Lambda.Core.ILambdaContext object that contains information about the currently running Lambda environment. # # The last item in the PowerShell pipeline will be returned as the result of the Lambda function. # # To include PowerShell modules with your Lambda function, like the AWSPowerShell.NetCore module, add a "#Requires" statement # indicating the module and version. #Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.343.0'} # Uncomment to send the input to CloudWatch Logs # Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5)
  3. 编辑示例脚本。

    要查看日志消息如何从您的 PowerShell 脚本发送到 CloudWatch Logs,请取消示例脚本的 Write-Host 行的注释。

    要演示如何从 Lambda 函数返回数据,请使用 $PSVersionTable 在脚本末尾添加新的一行。这会将 $PSVersionTable 添加到 PowerShell 管道。PowerShell 脚本完成后,PowerShell 管道中的最后一个对象是 Lambda 函数的返回数据。$PSVersionTable 是 PowerShell 全局变量,还提供有关正在运行的环境的信息。

    做出这些更改之后,示例脚本的最后两行如下所示:

    Write-Host (ConvertTo-Json -InputObject $LambdaInput -Compress -Depth 5) $PSVersionTable
  4. 发布到 AWS Lambda。

    编辑 MyFirstPSScript.ps1 文件后,将目录更改为脚本的位置。然后运行以下命令,将脚本发布到 AWS Lambda:

    Publish-AWSPowerShellLambda -ScriptPath .\MyFirstPSScript.ps1 -Name MyFirstPSScript -Region us-east-1

    注意,-Name 参数指定 Lambda 函数名称,该名称将显示在 Lambda 控制台中。您可以使用此函数手动调用脚本。

  5. 测试 Lambda 函数。

    您可以在命令提示符下使用 dotnet CLI 来测试刚发布的 PowerShell Lambda 函数。使用 lambda invoke-function 命令来调用您的函数。

    > dotnet lambda invoke-function MyFirstPSScript

    有关 dotnet CLI 扩展的更多信息,请参阅 .NET Core CLI