本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。
定義以 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
陳述式的詳細資訊,請參閱關於需求
但您的 PowerShell Lambda 函數使用 AWS PowerShell cmdlet 時,請務必設定 #Requires
陳述式,它參考支援 PowerShell Core 的 AWSPowerShell.NetCore
模組,而非參考僅支援 Windows PowerShell 的 AWSPowerShell
模組。此外,請務必使用版本 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 陳述式,它將 $PSVersionTable
新增至 PowerShell 管道:
$PSVersionTable
在 PowerShell 指令碼完成之後,PowerShell 管道中的最後一個物件即為 Lambda 函數的傳回資料。$PSVersionTable
是 PowerShell 全域變數,它也提供有關執行環境的資訊。