

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# での OpenSearch Ingestion パイプラインの使用 AWS Lambda
<a name="configure-client-lambda"></a>

[AWS Lambda プロセッサ](https://opensearch.org/docs/latest/data-prepper/pipelines/configuration/processors/aws-lambda/)を使用して、カスタムコードを使用して OpenSearch Ingestion でサポートされている任意のソースまたは送信先からのデータを強化します。Lambda プロセッサを使用すると、独自のデータ変換やエンリッチメントを適用し、処理済みイベントをパイプラインに戻してさらに処理できます。このプロセッサにより、カスタマイズされたデータ処理が可能になり、パイプラインを通過する前にデータがどのように操作されるかを完全に制御できます。

**注記**  
Lambda プロセッサによって処理される単一のイベントのペイロードサイズ制限は 5 MB です。さらに、Lambda プロセッサは JSON 配列形式のレスポンスのみをサポートします。

## 前提条件
<a name="configure-clients-lambda-prereqs"></a>

Lambda プロセッサを使用してパイプラインを作成する前に、次のリソースを作成します。
+ ソースデータを強化および変換する AWS Lambda 関数。手順については、「[最初の Lambda 関数を作成する](https://docs.aws.amazon.com/lambda/latest/dg/getting-started.html)」を参照してください。
+ パイプラインシンクとなる OpenSearch Service ドメインまたは OpenSearch Serverless コレクション。詳細については、「[OpenSearch Service ドメインの作成](createupdatedomains.md#createdomains)」および「[コレクションの作成](serverless-create.md)」を参照してください。
+ ドメインまたはコレクションシンクに書き込むアクセス許可を含むパイプラインロール。詳細については、「[パイプラインロール](pipeline-security-overview.md#pipeline-security-sink)」を参照してください。

  パイプラインロールには、パイプライン設定で指定された Lambda 関数を呼び出すことを許可する、アタッチされたアクセス許可ポリシーも必要です。例えば、次のようになります。

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Sid": "allowinvokeFunction",
              "Effect": "Allow",
              "Action": [
                  "lambda:invokeFunction",
                  "lambda:InvokeAsync",
                  "lambda:ListFunctions"
              ],
              "Resource": "arn:aws:lambda:{{us-east-1}}:{{111122223333}}:function:{{function-name}}"
              
          }
      ]
  }
  ```

------

## パイプラインを作成する
<a name="configure-clients-security-lake-pipeline-role"></a>

プロセッサ AWS Lambda として を使用するには、OpenSearch Ingestion パイプラインを設定し、プロセッサ`aws_lambda`として を指定します。**[AWS Lambda カスタムエンリッチメント]** ブループリントを使用してパイプラインを作成することもできます。詳細については、「[ブループリントの使用](pipeline-blueprint.md)」を参照してください。

次のパイプラインの例では、HTTP ソースからデータを受信し、日付プロセッサと AWS Lambda プロセッサを使用してデータを強化し、処理されたデータを OpenSearch ドメインに取り込みます。

```
version: "2"
lambda-processor-pipeline:
  source:
    http:
      path: "/${pipelineName}/logs"
  processor:
      - date:
        destination: "@timestamp"
        from_time_received: true
    - aws_lambda:
        function_name: "my-lambda-function"

        tags_on_failure: ["lambda_failure"]
        batch:
            key_name: "events"
        aws:
          region: {{region}}
  sink:
    - opensearch:
        hosts: [ "https://search-{{mydomain}}.{{us-east-1}}es.amazonaws.com" ]
        index: "table-index"
        aws:
          region: "{{region}}"
          serverless: false
```

次の AWS Lambda 関数の例では、指定されたイベント配列の各要素に新しいキーと値のペア (`"transformed": "true"`) を追加して受信データを変換し、変更されたバージョンを返します。

```
import json

def lambda_handler(event, context):
    input_array = event.get('events', [])
    output = []
    for input in input_array:
        input["transformed"] = "true";
        output.append(input)

    return output
```

## バッチ処理
<a name="configure-clients-lambda-batching"></a>

パイプラインは、バッチ処理されたイベントを Lambda プロセッサに送信し、バッチサイズを動的に調整して 5 MB の制限を下回っないようにします。

以下は、パイプラインバッチの例です。

```
batch:
    key_name: "events"

input_arrary = event.get('events', [])
```

**注記**  
パイプラインを作成するときは、Lambda プロセッサ設定の `key_name` オプションが Lambda ハンドラーのイベントキーと一致していることを確認してください。

## 条件付きフィルタリング
<a name="configure-clients-lambda-conditional-filtering"></a>

条件付きフィルタリングを使用すると、イベントデータの特定の条件に基づいて、 AWS Lambda プロセッサが Lambda 関数を呼び出すタイミングを制御できます。これは、他のイベントを無視しながら特定のタイプのイベントを選択的に処理する場合に特に便利です。

次の設定例では、条件付きフィルタリングを使用しています。

```
processors:
  - aws_lambda:
      function_name: "my-lambda-function"
      aws:
        region: "region"
      lambda_when: "/sourceIp == 10.10.10.10"
```