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
ステートメントを使用して、スクリプトが依存するモジュールを指定するように求められます。このステートメントは 2 つの重要なタスクを実行します。1) スクリプトが使用するモジュールを他のデベロッパーに伝え、そして 2) デプロイの一部として、スクリプトでパッケージングするために AWS PowerShell ツールが必要とする依存モジュールを識別します。PowerShell の #Requires
ステートメントに関する詳細については、「要件について
PowerShell Lambda 関数が AWS PowerShell コマンドレットを使用する場合、#Requires
ステートメントが、Windows PowerShell のみをサポートする AWSPowerShell
モジュールではなく、PowerShell Core をサポートする AWSPowerShell.NetCore
モジュールを参照するように設定されていることを確認します。また、コマンドレットインポートプロセスを最適化する AWSPowerShell.NetCore
のバージョン 3.3.270.0 以降を使用していることも確認します。古いバージョンを使用している場合、より長いコールドスタートが発生します。詳細については、「AWS Tools for PowerShell
データを返す
一部の Lambda 呼び出しには、呼び出し元にデータを返す目的があります。例えば、呼び出しが API Gateway から送信されたウェブリクエストへの返答である場合、Lambda 関数はレスポンスを返す必要があります。PowerShell Lambda の場合、PowerShell パイプラインに最後に追加されるオブジェクトは Lambda 呼び出しから返されたデータです。オブジェクトが文字列の場合、返されるデータも文字列です。それ以外の場合、ConvertTo-Json
コマンドレットを使用して、オブジェクトは JSON に変換されます。
例えば、PowerShell パイプラインに $PSVersionTable
を追加する次の PowerShell ステートメントを検討します。
$PSVersionTable
PowerShell スクリプトの終了後の PowerShell パイプラインの最後のオブジェクトは、Lambda 関数に返されたデータです。$PSVersionTable
は、実行されている環境の情報も提供する PowerShell グローバル変数です。