定義以 PowerShell 編寫的 Lambda 函數處理常式 - AWS Lambda

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

定義以 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 部署套件的詳細資訊,請參閱 使用 .zip 封存檔部署 PowerShell Lambda 函數

但您的 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 全域變數,它也提供有關執行環境的資訊。