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 ステートメントを使用して、スクリプトが依存するモジュールを指定するように求められます。このステートメントは 2 つの重要なタスクを実行します。1) スクリプトが使用するモジュールを他のデベロッパーに伝え、そして 2) デプロイの一部として、スクリプトでパッケージングするために AWS PowerShell ツールが必要とする依存モジュールを識別します。PowerShell の #Requires ステートメントに関する詳細については、「要件について」を参照してください。PowerShell デプロイパッケージについての詳細は、.zip ファイルアーカイブを使用した PowerShell Lambda 関数のデプロイする を参照してください。

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 グローバル変数です。