

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

# So laden Sie Streaming-Daten aus Amazon S3
<a name="integrations-s3-lambda"></a>

Sie können Lambda verwenden, um Daten von Amazon S3 an Ihre OpenSearch Service-Domain zu senden. Neue in einem S3-Bucket eintreffende Daten lösen eine Ereignisbenachrichtigung an Lambda aus, wodurch Ihr benutzerdefinierter Code zum Durchführen der Indizierung ausgeführt wird.

Diese Methode zum Streamen von Daten ist ausgesprochen flexibel. Sie können [Objekt-Metadaten indizieren](https://aws.amazon.com/blogs/database/indexing-metadata-in-amazon-elasticsearch-service-using-aws-lambda-and-python/) oder einige Elemente des Objekttextes analysieren und indizieren, sofern das Objekt Klartext ist. Dieser Abschnitt enthält unkomplizierten Python-Beispielcode für die Verwendung von regulären Ausdrücken zum Analysieren einer Protokolldatei und Indizieren der Übereinstimmungen.

## Voraussetzungen
<a name="integrations-s3-lambda-prereq"></a>

Zum Fortfahren benötigen Sie die folgenden Ressourcen.


****  

| Voraussetzung | Description | 
| --- | --- | 
| Amazon-S3-Bucket | Weitere Informationen finden Sie unter [Erstellen Ihres ersten S3 Buckets](https://docs.aws.amazon.com/AmazonS3/latest/userguide/CreatingABucket.html) im Benutzerhandbuch für Amazon Simple Storage Service. Der Bucket muss sich in derselben Region wie Ihre OpenSearch Service-Domain befinden. | 
| OpenSearch Dienstdomäne | Das Ziel für die Daten, nachdem sie durch Ihre Lambda-Funktion verarbeitet wurden. Weitere Informationen finden Sie unter [OpenSearch Dienstdomänen erstellen](createupdatedomains.md#createdomains). | 

## Erstellen des Lambda-Bereitstellungspakets
<a name="integrations-s3-lambda-deployment-package"></a>

Bereitstellungspakete sind ZIP- oder JAR-Dateien, die Ihren Code und seine Abhängigkeiten enthalten. Dieser Abschnitt enthält Python-Beispielcode. Informationen zu anderen Programmiersprachen finden Sie unter [Lambda-Bereitstellungspakete](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-package.html) im *AWS Lambda -Entwicklerhandbuch*.

1. Erstellen Sie ein Verzeichnis. In diesem Beispiel verwenden wir den Namen `s3-to-opensearch`.

1. Erstellen Sie im Verzeichnis eine Datei mit dem Namen `sample.py`:

   ```
   import boto3
   import re
   import requests
   from requests_aws4auth import AWS4Auth
   
   region = '' # e.g. us-west-1
   service = 'es'
   credentials = boto3.Session().get_credentials()
   awsauth = AWS4Auth(credentials.access_key, credentials.secret_key, region, service, session_token=credentials.token)
   
   host = '' # the OpenSearch Service domain, e.g. https://search-mydomain.us-west-1.es.amazonaws.com
   index = 'lambda-s3-index'
   datatype = '_doc'
   url = host + '/' + index + '/' + datatype
   
   headers = { "Content-Type": "application/json" }
   
   s3 = boto3.client('s3')
   
   # Regular expressions used to parse some simple log lines
   ip_pattern = re.compile('(\d+\.\d+\.\d+\.\d+)')
   time_pattern = re.compile('\[(\d+\/\w\w\w\/\d\d\d\d:\d\d:\d\d:\d\d\s-\d\d\d\d)\]')
   message_pattern = re.compile('\"(.+)\"')
   
   # Lambda execution starts here
   def handler(event, context):
       for record in event['Records']:
   
           # Get the bucket name and key for the new file
           bucket = record['s3']['bucket']['name']
           key = record['s3']['object']['key']
   
           # Get, read, and split the file into lines
           obj = s3.get_object(Bucket=bucket, Key=key)
           body = obj['Body'].read()
           lines = body.splitlines()
   
           # Match the regular expressions to each line and index the JSON
           for line in lines:
               line = line.decode("utf-8")
               ip = ip_pattern.search(line).group(1)
               timestamp = time_pattern.search(line).group(1)
               message = message_pattern.search(line).group(1)
   
               document = { "ip": ip, "timestamp": timestamp, "message": message }
               r = requests.post(url, auth=awsauth, json=document, headers=headers)
   ```

   Bearbeiten Sie die Variablen für `region` und `host`.

1. [Installieren Sie pip](https://pip.pypa.io/en/stable/installation/), falls noch nicht geschehen, und installieren Sie dann die Abhängigkeiten in einem neuen `package`-Verzeichnis:

   ```
   cd s3-to-opensearch
   
   pip install --target ./package requests
   pip install --target ./package requests_aws4auth
   ```

   Da in allen Lambda-Ausführungsumgebungen [Boto3](https://aws.amazon.com/sdk-for-python/) installiert ist, müssen Sie es nicht in Ihr Bereitstellungspaket einschließen.

1. Paket mit Anwendungscode und Abhängigkeiten:

   ```
   cd package
   zip -r ../lambda.zip .
   
   cd ..
   zip -g lambda.zip sample.py
   ```

## So erstellen Sie die Lambda-Funktion:
<a name="integrations-s3-lambda-create"></a>

Nachdem Sie das Bereitstellungspaket erstellt haben, können Sie die Lambda-Funktion erstellen. Wenn Sie eine Funktion erstellen, wählen Sie einen Namen, eine Laufzeit (z. B. Python 3.8) und eine IAM-Rolle aus. Die IAM-Rolle definiert die Berechtigungen der Funktion. Detaillierte Anweisungen finden Sie unter [Erstellen einer einfachen Lambda-Funktion](https://docs.aws.amazon.com/lambda/latest/dg/get-started-create-function.html) im *AWS Lambda -Entwicklerhandbuch*.

In diesem Beispiel wird davon ausgegangen, dass Sie die Konsole verwenden. Wählen Sie Python 3.9 und eine Rolle mit S3-Leseberechtigungen und OpenSearch Service-Schreibberechtigungen, wie im folgenden Screenshot gezeigt:

![\[Beispielkonfiguration für eine Lambda-Funktion\]](http://docs.aws.amazon.com/de_de/opensearch-service/latest/developerguide/images/lambda-function.png)


Nachdem Sie die Funktion erstellt haben, müssen Sie einen Auslöser hinzufügen. In diesem Beispiel soll der Code immer dann ausgeführt werden, wenn im S3-Bucket ein Protokoll eintrifft:

1. Klicken Sie auf **Auslöser hinzufügen** und wählen Sie **S3** aus.

1. Wählen Sie Ihren Bucket aus.

1. Wählen Sie unter **Event type (Ereignistyp)** die Option **PUT** aus.

1. Geben Sie für **Prefix (Präfix)** den Wert `logs/` ein.

1. Geben Sie für **Suffix** `.log` ein.

1. Bestätigen Sie die Warnung für rekursive Aufrufe und wählen Sie **Hinzufügen** aus.

Schließlich können Sie Ihr Bereitstellungs-Paket hochladen:

1. Wählen Sie **Hochladen von** und **.zip-Datei** und befolgen Sie dann die Anweisungen zum Hochladen Ihres Bereitstellungspakets.

1. Nachdem der Upload abgeschlossen ist, bearbeiten Sie die **Laufzeit-Einstellungen** und ändern Sie den **Handler** auf `sample.handler`. Diese Einstellung teilt Lambda die Datei (`sample.py`) und Methode (`handler`) mit, die es nach einem Auslöser ausführen soll.

Zu diesem Zeitpunkt verfügen Sie über einen vollständigen Satz von Ressourcen: einen Bucket für Protokolldateien, eine Funktion, die immer dann ausgeführt wird, wenn dem Bucket eine Protokolldatei hinzugefügt wird, Code, der das Parsen und Indizieren durchführt, und eine OpenSearch Service-Domain für die Suche und Visualisierung.

## Testen der Lambda-Funktion
<a name="integrations-s3-lambda-configure"></a>

Nachdem Sie die Funktion erstellt haben, können Sie sie durch Hochladen einer Datei in den Amazon-S3-Bucket testen. Erstellen Sie anhand der folgenden Beispielprotokollzeilen eine Datei mit dem Namen `sample.log`:

```
12.345.678.90 - [10/Oct/2000:13:55:36 -0700] "PUT /some-file.jpg"
12.345.678.91 - [10/Oct/2000:14:56:14 -0700] "GET /some-file.jpg"
```

Laden Sie die Datei in den Ordner `logs` Ihres S3-Buckets hoch. Anweisungen finden Sie unter [Hochladen eines Objekts in Ihren Bucket](https://docs.aws.amazon.com/AmazonS3/latest/userguide/PuttingAnObjectInABucket.html) im *Benutzerhandbuch für Amazon Simple Storage Service*.

Überprüfen Sie anschließend mithilfe der OpenSearch Servicekonsole oder der OpenSearch Dashboards, ob der `lambda-s3-index` Index zwei Dokumente enthält. Sie können auch eine Standard-Suchabfrage durchführen:

```
GET https://domain-name/lambda-s3-index/_search?pretty
{
  "hits" : {
    "total" : 2,
    "max_score" : 1.0,
    "hits" : [
      {
        "_index" : "lambda-s3-index",
        "_type" : "_doc",
        "_id" : "vTYXaWIBJWV_TTkEuSDg",
        "_score" : 1.0,
        "_source" : {
          "ip" : "12.345.678.91",
          "message" : "GET /some-file.jpg",
          "timestamp" : "10/Oct/2000:14:56:14 -0700"
        }
      },
      {
        "_index" : "lambda-s3-index",
        "_type" : "_doc",
        "_id" : "vjYmaWIBJWV_TTkEuCAB",
        "_score" : 1.0,
        "_source" : {
          "ip" : "12.345.678.90",
          "message" : "PUT /some-file.jpg",
          "timestamp" : "10/Oct/2000:13:55:36 -0700"
        }
      }
    ]
  }
}
```