定义采用 PowerShell 的 Lambda 函数处理程序
当调用 Lambda 函数时,Lambda 处理程序会调用 PowerShell 脚本。
调用 PowerShell 脚本时,以下变量已预定义:
-
$LambdaInput
– 包含处理程序输入的 PSObject。该输入可以是事件数据(由事件源发布)或您提供的自定义输入(如字符串或任意自定义数据对象)。 -
$LambdaContext
– 一个 Amazon.Lambda.Core.ILambdaContext 对象,用于访问有关当前调用的信息(例如当前函数的名称、内存限制、剩余执行时间和日志记录)。
例如,请考虑以下 PowerShell 示例代码。
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'} Write-Host 'Function Name:' $LambdaContext.FunctionName
此脚本返回从 $LambdaContext 变量获得的 FunctionName 属性。
注意
您需要使用 PowerShell 脚本中的 #Requires
语句指示您的脚本所依赖的模块。此语句可执行两个重要任务。1) 它可告知其他开发人员该脚本使用的模块,2) 它可标识 AWS PowerShell 工具在部署过程中使用脚本打包所需要的从属模块。有关 PowerShell 中的 #Requires
语句的更多信息,请参阅关于 Requires
当您的 PowerShell Lambda 函数使用 AWS PowerShell cmdlet 时,请务必设置一个 #Requires
语句,使其引用 AWSPowerShell.NetCore
模块,该模块支持 PowerShell Core,而不是 AWSPowerShell
模块,该模块仅支持 Windows PowerShell。此外,请确保使用 3.3.270.0 版或更新版本的 AWSPowerShell.NetCore
,其优化了 cmdlet 导入过程。如果使用较旧版本,冷启动时间较长。有关更多信息,请参阅 AWS Tools for PowerShell
返回数据
有些 Lambda 调用旨在为调用方返回数据。例如,如果某个调用是为了响应来自 API Gateway 的 Web 请求,则我们的 Lambda 函数需要返回响应。对于 PowerShell Lambda,添加到 PowerShell 管道的最后一个对象是 Lambda 调用返回的数据。如果对象是字符串,数据将按原样返回。否则,对象将使用 ConvertTo-Json
cmdlet 转换为 JSON。
例如,请考虑以下 PowerShell 语句,该语句在 PowerShell 管道中添加 $PSVersionTable
:
$PSVersionTable
PowerShell 脚本完成后,PowerShell 管道中的最后一个对象是 Lambda 函数的返回数据。$PSVersionTable
是 PowerShell 全局变量,还提供有关正在运行的环境的信息。