

# PowerShell の Lambda 関数ハンドラーの定義
<a name="powershell-handler"></a>

Lambda 関数が呼び出されると、Lambda ハンドラは PowerShell スクリプトを呼び出します。

PowerShell スクリプトが呼び出された場合、以下の変数は事前定義されます。
+  *\$1LambdaInput* － ハンドラへの入力を含む PSObject。この入力は、イベントデータ (イベントソースによって公開される)、あるいは文字列やカスタムデータオブジェクトなど、ユーザーが提供するカスタム入力とすることができます。
+  *\$1LambdaContext* － 現在の呼び出しに関する情報にアクセスするために使用できる、Amazon.Lambda.Core.ILambdaContext オブジェクト。アクセスできる情報には、現在の関数名、メモリ制限、残りの実行時間、ログ記録があります。

例えば、次の PowerShell コードの例を考えてみます。

```
#Requires -Modules @{ModuleName='AWSPowerShell.NetCore';ModuleVersion='3.3.618.0'}
Write-Host 'Function Name:' $LambdaContext.FunctionName
```

このスクリプトは、\$1LambdaContext 変数から取得した FunctionName プロパティを返します。

**注記**  
PowerShell スクリプト内の `#Requires` ステートメントを使用して、スクリプトが依存するモジュールを指定するように求められます。このステートメントは 2 つの重要なタスクを実行します。1) スクリプトが使用するモジュールを他のデベロッパーに伝え、そして 2) デプロイの一部として、スクリプトでパッケージングするために AWS PowerShell ツールが必要とする依存モジュールを識別します。PowerShell の `#Requires` ステートメントに関する詳細については、「[要件について](https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.core/about/about_requires?view=powershell-6)」を参照してください。PowerShell デプロイパッケージについての詳細は、[.zip ファイルアーカイブを使用した PowerShell Lambda 関数のデプロイする](powershell-package.md) を参照してください。  
PowerShell Lambda 関数が AWS PowerShell コマンドレットを使用する場合、`#Requires` ステートメントが、Windows PowerShell のみをサポートする `AWSPowerShell` モジュールではなく、PowerShell Core をサポートする `AWSPowerShell.NetCore` モジュールを参照するように設定されていることを確認します。また、コマンドレットインポートプロセスを最適化する `AWSPowerShell.NetCore` のバージョン 3.3.270.0 以降を使用していることも確認します。古いバージョンを使用している場合、より長いコールドスタートが発生します。詳細については、「[AWS Tools for PowerShell](https://aws.amazon.com/powershell/?track=sdk)」を参照してください。

## データを返す
<a name="powershell-handler-output"></a>

一部の Lambda 呼び出しには、呼び出し元にデータを返す目的があります。例えば、呼び出しが API Gateway から送信されたウェブリクエストへの返答である場合、Lambda 関数はレスポンスを返す必要があります。PowerShell Lambda の場合、PowerShell パイプラインに最後に追加されるオブジェクトは Lambda 呼び出しから返されたデータです。オブジェクトが文字列の場合、返されるデータも文字列です。それ以外の場合、`ConvertTo-Json` コマンドレットを使用して、オブジェクトは JSON に変換されます。

例えば、PowerShell パイプラインに `$PSVersionTable` を追加する次の PowerShell ステートメントを検討します。

```
$PSVersionTable
```

PowerShell スクリプトの終了後の PowerShell パイプラインの最後のオブジェクトは、Lambda 関数に返されたデータです。`$PSVersionTable` は、実行されている環境の情報も提供する PowerShell グローバル変数です。