

# 例: RDS for PostgreSQL DB インスタンスから Lambda 関数を呼びだす
<a name="PostgreSQL-Lambda-examples"></a>

以下に、[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 関数の呼び出し例をいくつか示します。ほとんどの例では、関数の詳細を簡単に渡せるように、[ステップ 4: RDS for PostgreSQL DB インスタンスで Lambda のヘルパー関数を使用する (オプション)](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) で作成した複合構造 `aws_lambda_arn_1` を使用しています。非同期呼び出しの例については、「[例: Lambda 関数の (Event による) 非同期呼び出し](#PostgreSQL-Lambda-Event)」を参照してください。ここに示されたその他の例はすべて、同期呼び出しを使用します。

Lambda 呼び出しタイプの詳細については、「*AWS Lambdaデベロッパーガイド*」の「[Lambda 関数を呼び出す](https://docs.aws.amazon.com/lambda/latest/dg/lambda-invocation.html)」を参照してください。`aws_lambda_arn_1`の詳細については、「[aws\$1commons.create\$1lambda\$1function\$1arn](PostgreSQL-Lambda-functions.md#aws_commons.create_lambda_function_arn)」を参照してください。

**Topics**
+ [例: Lambda 関数の (RequestResponse による) 同期呼び出し](#PostgreSQL-Lambda-RequestResponse)
+ [例: Lambda 関数の (Event による) 非同期呼び出し](#PostgreSQL-Lambda-Event)
+ [例: 関数レスポンスからの Lambda 実行ログのキャプチャリング](#PostgreSQL-Lambda-log-response)
+ [例: Lambda 関数にクライアントコンテキストを含める](#PostgreSQL-Lambda-client-context)
+ [例: Lambda 関数の特定のバージョンの呼び出し](#PostgreSQL-Lambda-function-version)

## 例: Lambda 関数の (RequestResponse による) 同期呼び出し
<a name="PostgreSQL-Lambda-RequestResponse"></a>

以下に、Lambda 関数の同期呼び出しの例を 2 つ示します。これらの `aws_lambda.invoke` 関数呼び出しの結果は同じです。

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json);
```

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse');
```

パラメータの説明は次のとおりです。
+ `:'aws_lambda_arn_1'` – このパラメータは、ヘルパー関数 `aws_commons.create_lambda_function_arn` を使用して、[ステップ 4: RDS for PostgreSQL DB インスタンスで Lambda のヘルパー関数を使用する (オプション)](PostgreSQL-Lambda.md#PostgreSQL-Lambda-specify-function) で作成される複合構造を識別します。この構造は、次のように `aws_lambda.invoke` 呼び出しの中で、インラインで作成することもできます。

  ```
  SELECT * FROM aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function', 'aws-region'),
  '{"body": "Hello from Postgres!"}'::json
  );
  ```
+ `'{"body": "Hello from PostgreSQL!"}'::json` - Lambda関数に渡す JSON ペイロード。
+ `'RequestResponse'`-Lambda 呼び出しタイプ。

## 例: Lambda 関数の (Event による) 非同期呼び出し
<a name="PostgreSQL-Lambda-Event"></a>

以下は、Lambda 関数の非同期呼び出しの例です。`Event` 呼び出しタイプは、指定された入力ペイロードを使用して Lambda 関数の呼び出しをスケジュールし、すぐに返します。Lambda 関数の結果に依存しない特定のワークフローでは、`Event` 呼び出しタイプを使用します。

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'Event');
```

## 例: 関数レスポンスからの Lambda 実行ログのキャプチャリング
<a name="PostgreSQL-Lambda-log-response"></a>

関数レスポンスに実行ログの最後の 4 KB を含めるには、`log_type` パラメーターを使用しながら `aws_lambda.invoke` 関数を呼び出します。デフォルトでは、このパラメータには `None` が設定されています。レスポンス内の Lambda 実行ログの結果をキャプチャする場合は、以下のように `Tail` を指定します。

```
SELECT *, select convert_from(decode(log_result, 'base64'), 'utf-8') as log FROM aws_lambda.invoke(:'aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'Tail');
```

[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 関数の `log_type` パラメータを `Tail` に設定して、実行ログをレスポンスに含めます。この `log_type` パラメータのデフォルト値は `None` です。

返された `log_result` は、`base64` エンコードされた文字列です。このコンテンツは、`decode` と `convert_from` PostgreSQL 関数の組み合わせを使用してデコードできます。

`log_type` の詳細については、「[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke)」を参照してください。

## 例: Lambda 関数にクライアントコンテキストを含める
<a name="PostgreSQL-Lambda-client-context"></a>

`aws_lambda.invoke` 関数では、次に示すとおり `context` パラメータを使用して、ペイロードとは別の情報を渡すことができます。

```
SELECT *, convert_from(decode(log_result, 'base64'), 'utf-8') as log FROM aws_lambda.invoke(:'aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'Tail');
```

クライアントコンテキストを含めるときは、[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke) 関数の `context` パラメータに JSON オブジェクトを使用します。

`context` パラメータの詳細については、「[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke)」でリファレンスを参照してください。

## 例: Lambda 関数の特定のバージョンの呼び出し
<a name="PostgreSQL-Lambda-function-version"></a>

`aws_lambda.invoke` 呼び出しに `qualifier` パラメータを含めることで、Lambda 関数の特定のバージョンを指定することが可能です。以下は、`'custom_version'` をバージョンのエイリアスに使用してこれを行う場合の例です。

```
SELECT * FROM aws_lambda.invoke('aws_lambda_arn_1', '{"body": "Hello from Postgres!"}'::json, 'RequestResponse', 'None', NULL, 'custom_version');
```

代わりに、Lambda 関数名の詳細により、次のように関数の修飾子を指定することもできます。

```
SELECT * FROM aws_lambda.invoke(aws_commons.create_lambda_function_arn('my-function:custom_version', 'us-west-2'),
'{"body": "Hello from Postgres!"}'::json);
```

`qualifier` および他のパラメータの詳細については、「[aws\$1lambda.invoke](PostgreSQL-Lambda-functions.md#aws_lambda.invoke)」でリファレンスを参照してください。