

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.

# Erstellen einer Lambda-Funktion für Amazon Rekognition
<a name="stored-video-lambda"></a>

In diesem Tutorial wird gezeigt, wie Sie die Ergebnisse einer Videoanalyse-Operation für eine Label-Erkennung mit einer Java-Lambda-Funktion abrufen. 

**Anmerkung**  
Dieses Tutorial verwendet das AWS SDK for Java 1.x. Ein Tutorial zur Verwendung von Rekognition und dem AWS SDK for Java Version 2 finden Sie im [AWS Documentation SDK Examples GitHub ](https://github.com/awsdocs/aws-doc-sdk-examples/tree/master/javav2/usecases/video_analyzer_application) Repository.

Sie können Lambda-Funktionen mit Amazon-Rekognition-Video-Operationen verwenden. Das folgende Diagramm zeigt z. B. eine Website, die eine Lambda-Funktion verwendet, um automatisch die Analyse eines Videos zu starten, wenn es in einen Amazon-S3-Bucket hochgeladen wird. Wenn die Lambda-Funktion ausgelöst wird, ruft sie auf, [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html)um mit der Erkennung von Labels im hochgeladenen Video zu beginnen. Informationen zur Verwendung von Lambda für die Verarbeitung von Ereignisbenachrichtigungen aus einem Amazon-S3-Bucket finden Sie unter [Verwenden von AWS Lambda mit Amazon-S3-Ereignissen](https://docs.aws.amazon.com/lambda/latest/dg/with-s3.html).

Eine zweite Lambda-Funktion wird ausgelöst, wenn der Abschlussstatus für die Analyse an das registrierte Amazon-SNS-Thema gesendet wird. Die zweite Lambda-Funktion ruft [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html)auf, um die Analyseergebnisse abzurufen. Die Ergebnisse werden in einer Datenbank gespeichert, um ihre Anzeige auf einer Webseite vorzubereiten. Diese zweite Lambda-Funktion bildet den Schwerpunkt dieses Tutorials.

![Diagramm, das einen Videoverarbeitungs-Workflow für Amazon Rekognition Video zeigt, vom Hochladen eines Videos bis zum Speichern der Ergebnisse in Amazon DynamoDB zur Anzeige auf einer Website.](http://docs.aws.amazon.com/de_de/rekognition/latest/dg/images/VideoRekognitionLambda.png)


In diesem Tutorial wird die Lambda-Funktion ausgelöst, wenn Amazon Rekognition Video den Abschlussstatus für die Videoanalyse an das registrierte Amazon-SNS-Thema sendet. Die Videoanalyseergebnisse werden danach durch Aufrufen von [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html) gesammelt. Zu Demonstrationszwecken schreibt dieses Tutorial die Ergebnisse der Etikettenerkennung in ein Protokoll. CloudWatch In der Lambda-Funktion in Ihrer Anwendung sollten Sie die Analyseergebnisse zur späteren Verwendung speichern. Dazu können Sie beispielsweise Amazon DynamoDB verwenden. Weitere Informationen finden Sie im Thema zum [Arbeiten mit DynamoDB](url-ddb-dev;WorkingWithDynamo.html). 

In den nachstehenden Verfahren wird Folgendes veranschaulicht:
+ Erstellen eines Amazon-SNS-Themas und Einrichten von Berechtigungen
+ Erstellen Sie die Lambda-Funktion mithilfe von AWS-Managementkonsole und abonnieren Sie sie für das Amazon SNS SNS-Thema.
+ Konfigurieren der Lambda-Funktion mithilfe der AWS-Managementkonsole.
+ Fügen Sie Beispielcode zu einem AWS Toolkit for Eclipse Projekt hinzu und laden Sie ihn in die Lambda-Funktion hoch.
+ Testen der Lambda-Funktion mithilfe der AWS CLI.

**Anmerkung**  
Verwenden Sie während des gesamten Tutorials dieselbe AWS Region.

## Voraussetzungen
<a name="lambda-stored-video-prerequisites"></a>

In diesem Tutorial wird vorausgesetzt, dass Sie mit AWS Toolkit for Eclipse vertraut sind. Weitere Informationen finden Sie unter [ AWS Toolkit for Eclipse](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/welcome.html).

## Erstellen eines SNS-Themas
<a name="lambda-create-sns-topic"></a>

Der Abschlussstatus einer Amazon-Rekognition-Video-Videoanalyse-Operation wird an ein Amazon-SNS-Thema gesendet. In diesem Verfahren erstellen Sie das Amazon-SNS-Thema und die IAM-Servicerolle, durch die Amazon-Rekognition-Video Zugriff auf Ihre Amazon-SNS-Themen erhält. Weitere Informationen finden Sie unter [Amazon-Rekognition-Video-Operationen aufrufen](api-video.md).

**Erstellen eines Amazon SNS-Themas**

1. Wenn Sie es noch nicht getan haben, erstellen Sie eine IAM-Servicerolle, um Amazon-Rekognition-Video Zugriff auf Ihre Amazon-SNS-Themen zu geben. Notieren Sie den Amazon-Ressourcennamen (ARN). Weitere Informationen finden Sie unter [Den Zugriff auf mehrfache Amazon-SNS-Themen ermöglichen](api-video-roles.md#api-video-roles-all-topics).

1. [Erstellen Sie ein Amazon-SNS-Thema](https://docs.aws.amazon.com/sns/latest/dg/CreateTopic.html) über die [Amazon-SNS-Konsole](https://console.aws.amazon.com/sns/v2/home), wobei Sie nur den Namen des Themas angeben müssen. Stellen Sie dem Themennamen ein. *AmazonRekognition* Notieren Sie den ARN des Themas. 

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

Sie erstellen die Lambda-Funktion mithilfe der AWS-Managementkonsole. Sie verwenden anschließend ein AWS Toolkit for Eclipse -Projekt, um das Lambda-Funktionspaket auf AWS Lambda hochzuladen. Sie können die Lambda-Funktion auch mit dem AWS Toolkit for Eclipse erstellen. Weitere Informationen finden Sie unter [ Tutorial: Erstellen, Hochladen und Aufrufen einer AWS Lambda-Funktion](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html).

**So erstellen Sie die Lambda-Funktion:**

1. Melden Sie sich bei der AWS-Managementkonsole an und öffnen Sie die AWS Lambda-Konsole unter [https://console.aws.amazon.com/lambda/](https://console.aws.amazon.com/lambda/).

1. Wählen Sie **Funktion erstellen**.

1. Wählen Sie **Von Grund auf neu schreiben** aus.

1. Geben Sie in **Funktionsname** einen Namen für Ihre Funktion ein. 

1. Wählen Sie in **Laufzeit** die Option **Java 8** aus. 

1. Wählen Sie **Ausführungsrolle auswählen oder erstellen** aus.

1. Wählen Sie in **Ausführungsrolle** die Option **Neue Rolle mit Lambda-Basisberechtigungen erstellen** aus. 

1. Notieren Sie den Namen der neuen Rolle, der unten im Abschnitt **Basisinformationen** angezeigt wird.

1. Wählen Sie **Funktion erstellen**.

## Konfigurieren der Lambda-Funktion
<a name="lambda-configure-function"></a>

Nachdem Sie die Lambda-Funktion erstellt haben, konfigurieren Sie ihre Auslösung durch das Amazon-SNS-Thema, das Sie im Abschnitt [Erstellen eines SNS-Themas](#lambda-create-sns-topic) fertiggestellt haben. Sie passen außerdem die Speicheranforderungen und den Timeout-Zeitraum für die Lambda-Funktion an.

**Konfigurieren der Lambda-Funktion**

1. Geben Sie in **Funktionscode** folgenden Text für den `com.amazonaws.lambda.demo.JobCompletionHandler`Handler** ein: **

1. Wählen Sie in **Basiseinstellungen** die Option **Bearbeiten** aus. Anschließend wird das Dialogfeld **Basiseinstellungen bearbeiten** angezeigt.

   1. Wählen Sie **1024** für **Speicher**.

   1. Wählen Sie für **Timeout** **10** Sekunden.

   1. Wählen Sie **Speichern**.

1. Wählen Sie in **Designer** die Option **\+ Auslöser hinzufügen** aus. Anschließend wird das Dialogfeld „Auslöser hinzufügen“ angezeigt.

1. Wählen Sie in **Auslöserkonfiguration** die Option **SNS** aus.

   Wählen Sie in **SNS-Thema** das Amazon-SNS-Thema aus, das Sie in [Erstellen eines SNS-Themas](#lambda-create-sns-topic) erstellt haben.

1. Klicken Sie auf **Auslöser aktivieren**.

1. Wählen Sie **Hinzufügen** aus, um den Auslöser hinzuzufügen.

1. Wählen Sie **Speichern**, um die Lambda-Funktion zu speichern.

## Konfigurieren der IAM-Lambda-Rolle
<a name="configure-lambda-role"></a>

Um Amazon Rekognition Video Operations aufzurufen, fügen Sie die von *AmazonRekognitionFullAccess*AWS verwaltete Richtlinie zur IAM-Lambda-Rolle hinzu. Startvorgänge erfordern beispielsweise auch [StartLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_StartLabelDetection.html)Pass-Rollen-Berechtigungen für die IAM-Servicerolle, die Amazon Rekognition Video für den Zugriff auf das Amazon SNS SNS-Thema verwendet.

**Konfigurieren Sie die Rolle wie folgt:**

1. Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die IAM-Konsole unter. [https://console.aws.amazon.com/iam/](https://console.aws.amazon.com/iam/)

1. Wählen Sie im Navigationsbereich **Rollen**. 

1. Wählen Sie in der Liste den Namen der Ausführungsrolle aus, die Sie in [So erstellen Sie die Lambda-Funktion:](#lambda-create-function) erstellt haben.

1. Wählen Sie die Registerkarte **Berechtigungen**.

1. Wählen Sie **Richtlinien anfügen**.

1. Wählen Sie *AmazonRekognitionFullAccess*aus der Liste der Richtlinien aus.

1. Wählen Sie **Richtlinie anfügen** aus.

1. Wählen Sie die Ausführungsrolle erneut aus. 

1. Wählen Sie **Inline-Richtlinie hinzufügen**.

1. Wählen Sie den Tab **JSON**.

1. Ersetzen Sie die vorhandene Richtlinie durch die unten stehende. Tauschen Sie `servicerole` durch die IAM-Servicerolle aus, die Sie im Abschnitt [Erstellen eines SNS-Themas](#lambda-create-sns-topic) erstellt haben.

1. Wählen Sie **Richtlinie prüfen**.

1. Geben Sie in **Name\*** einen Namen für die Richtlinie ein.

1. Wählen Sie **Richtlinie erstellen** aus.

## Erstellen Sie das AWS Toolkit for Eclipse Lambda-Projekt
<a name="lambda-create-code"></a>

Wenn die Lambda-Funktion ausgelöst wird, ruft der folgende Code den Abschlussstatus aus dem Amazon SNS SNS-Thema ab und ruft [GetLabelDetection](https://docs.aws.amazon.com/rekognition/latest/APIReference/API_GetLabelDetection.html)auf, um die Analyseergebnisse abzurufen. Die Anzahl der erkannten Labels und eine Liste der erkannten Labels werden in ein CloudWatch Protokoll geschrieben. Die Lambda-Funktion speichert die Ergebnisse der Videoanalyse zur späteren Verwendung.

**Um das AWS Toolkit for Eclipse Lambda-Projekt zu erstellen**

1. [Erstellen Sie ein AWS Toolkit for EclipseAWS Lambda-Projekt](https://docs.aws.amazon.com/toolkit-for-eclipse/v1/user-guide/lambda-tutorial.html#lambda-tutorial-create-handler-class). 
   + Geben Sie in **Projektname:** einen Namen Ihrer Wahl ein.
   + Geben *JobCompletionHandler*Sie als **Klassenname:** ein.
   + Wählen Sie unter **Eingabetyp:** die Option ** SNS-Ereignis** aus.
   + Lassen Sie die anderen Felder unverändert. 

1. Öffnen Sie im **Eclipse-Projektexplorer** die generierte Lambda-Handler-Methode (JobCompletionHandler.java) und ersetzen Sie den Inhalt durch Folgendes:

   ```
   //Copyright 2018 Amazon.com, Inc. or its affiliates. All Rights Reserved.
   //PDX-License-Identifier: MIT-0 (For details, see https://github.com/awsdocs/amazon-rekognition-developer-guide/blob/master/LICENSE-SAMPLECODE.)
   
   package com.amazonaws.lambda.demo;
   
   import com.amazonaws.services.lambda.runtime.Context;
   import com.amazonaws.services.lambda.runtime.LambdaLogger;
   import com.amazonaws.services.lambda.runtime.RequestHandler;
   import com.amazonaws.services.lambda.runtime.events.SNSEvent;
   import java.util.List;
   import com.amazonaws.regions.Regions;
   import com.amazonaws.services.rekognition.AmazonRekognition;
   import com.amazonaws.services.rekognition.AmazonRekognitionClientBuilder;
   import com.amazonaws.services.rekognition.model.GetLabelDetectionRequest;
   import com.amazonaws.services.rekognition.model.GetLabelDetectionResult;
   import com.amazonaws.services.rekognition.model.LabelDetection;
   import com.amazonaws.services.rekognition.model.LabelDetectionSortBy;
   import com.amazonaws.services.rekognition.model.VideoMetadata;
   import com.fasterxml.jackson.databind.JsonNode;
   import com.fasterxml.jackson.databind.ObjectMapper;
   
   
   
   public class JobCompletionHandler implements RequestHandler<SNSEvent, String> {
   
      @Override
      public String handleRequest(SNSEvent event, Context context) {
   
         String message = event.getRecords().get(0).getSNS().getMessage();
         LambdaLogger logger = context.getLogger(); 
   
         // Parse SNS event for analysis results. Log results
         try {
            ObjectMapper operationResultMapper = new ObjectMapper();
            JsonNode jsonResultTree = operationResultMapper.readTree(message);
            logger.log("Rekognition Video Operation:=========================");
            logger.log("Job id: " + jsonResultTree.get("JobId"));
            logger.log("Status : " + jsonResultTree.get("Status"));
            logger.log("Job tag : " + jsonResultTree.get("JobTag"));
            logger.log("Operation : " + jsonResultTree.get("API"));
   
            if (jsonResultTree.get("API").asText().equals("StartLabelDetection")) {
   
               if (jsonResultTree.get("Status").asText().equals("SUCCEEDED")){
                  GetResultsLabels(jsonResultTree.get("JobId").asText(), context);
               }
               else{
                  String errorMessage = "Video analysis failed for job " 
                        + jsonResultTree.get("JobId") 
                        + "State " + jsonResultTree.get("Status");
                  throw new Exception(errorMessage); 
               }
   
            } else
               logger.log("Operation not StartLabelDetection");
   
         } catch (Exception e) {
            logger.log("Error: " + e.getMessage());
            throw new RuntimeException (e);
   
   
         }
   
         return message;
      }
   
      void GetResultsLabels(String startJobId, Context context) throws Exception {
   
         LambdaLogger logger = context.getLogger();
   
         AmazonRekognition rek = AmazonRekognitionClientBuilder.standard().withRegion(Regions.US_EAST_1).build();
   
         int maxResults = 1000;
         String paginationToken = null;
         GetLabelDetectionResult labelDetectionResult = null;
         String labels = "";
         Integer labelsCount = 0;
         String label = "";
         String currentLabel = "";
        
         //Get label detection results and log them. 
         do {
   
            GetLabelDetectionRequest labelDetectionRequest = new GetLabelDetectionRequest().withJobId(startJobId)
                  .withSortBy(LabelDetectionSortBy.NAME).withMaxResults(maxResults).withNextToken(paginationToken);
   
            labelDetectionResult = rek.getLabelDetection(labelDetectionRequest);
            
            paginationToken = labelDetectionResult.getNextToken();
            VideoMetadata videoMetaData = labelDetectionResult.getVideoMetadata();
   
            // Add labels to log
            List<LabelDetection> detectedLabels = labelDetectionResult.getLabels();
            
            for (LabelDetection detectedLabel : detectedLabels) {
               label = detectedLabel.getLabel().getName();
               if (label.equals(currentLabel)) {
                  continue;
               }
               labels = labels + label + " / ";
               currentLabel = label;
               labelsCount++;
   
            }
         } while (labelDetectionResult != null && labelDetectionResult.getNextToken() != null);
   
         logger.log("Total number of labels : " + labelsCount);
         logger.log("labels : " + labels);
   
      }
   
   
   }
   ```

1. Die Rekognition-Namespaces werden nicht aufgelöst. Korrigieren Sie dies wie folgt:
   + Platzieren Sie den Mauszeiger über dem unterstrichenen Teil der Zeile `import com.amazonaws.services.rekognition.AmazonRekognition;`. 
   + Wählen Sie **Projekteinrichtung korrigieren...** aus.
   + Wählen Sie die neueste Version des Amazon-Rekognition-Archivs aus.
   + Klicken Sie auf **OK**, um dem Projekt das Archiv hinzuzufügen.

1. Speichern Sie die Datei.

1. Klicken Sie mit der rechten Maustaste in Ihr Eclipse-Code-Fenster und wählen **AWS Lambda** und dann **Upload function to AWS Lambda** aus. 

1. Wählen Sie auf der Seite **Ziel-Lambda-Funktion auswählen** die zu verwendende AWS-Region aus. 

1. Wählen Sie **Vorhandene Lambda-Funktion auswählen** aus und klicken Sie auf die Lambda-Funktion, die Sie im Abschnitt [So erstellen Sie die Lambda-Funktion:](#lambda-create-function) fertiggestellt haben. 

1. Wählen Sie **Weiter**. Das Dialogfeld **Funktionskonfiguration** wird angezeigt. 

1. Wählen Sie in **IAM-Rolle** die IAM-Rolle aus, die Sie in [So erstellen Sie die Lambda-Funktion:](#lambda-create-function) erstellt haben.

1. Klicken Sie auf **Beenden**. Die Lambda-Funktion wird in AWS hochgeladen.

## Lambda-Funktion testen
<a name="lambda-test-function"></a>

Verwenden Sie den folgenden AWS CLI Befehl, um die Lambda-Funktion zu testen, indem Sie die Labelerkennungsanalyse eines Videos starten. Nach Abschluss der Analyse wird die Lambda-Funktion ausgelöst. Vergewissern Sie sich, dass die Analyse erfolgreich war, indem Sie die CloudWatch Log-Logs überprüfen.

**Lambda-Funktion testen**

1. Laden Sie eine Videodatei im MOV- oder MPEG-4-Format in Ihren S3-Bucket hoch. Laden Sie zu Testzwecken ein Video hoch, das nicht länger als 30 Sekunden ist.

   Weitere Anleitungen finden Sie unter [Upload eines Objekts in Amazon S3](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UploadingObjectsintoAmazonS3.html) im *Benutzerhandbuch für Amazon Simple Storage Service*.

1. Führen Sie den folgenden AWS CLI Befehl aus, um mit der Erkennung von Labels in einem Video zu beginnen.

   ```
   aws rekognition start-label-detection --video "S3Object={Bucket="{{bucketname}}",Name="{{videofile}}"}" \
   --notification-channel "SNSTopicArn={{TopicARN}},RoleArn={{RoleARN}}" \
   --region {{Region}}
   ```

   Aktualisieren Sie die folgenden Werte:
   + Ändern Sie `bucketname` und `videofile` in den Amazon-S3-Bucket-Namen und Dateinamen des Videos, in dem Sie Label erkennen möchten.
   + Ändern Sie `TopicARN` in den ARN des Amazon-SNS-Themas, das Sie im Abschnitt [Erstellen eines SNS-Themas](#lambda-create-sns-topic) fertiggestellt haben.
   + Ändern Sie `RoleARN` in den ARN der IAM-Rolle, die Sie im Abschnitt [Erstellen eines SNS-Themas](#lambda-create-sns-topic) angelegt haben.
   + Wechseln Sie `Region` zu der AWS Region, die Sie verwenden. ``

1. Notieren Sie den `JobId`-Wert in der Antwort. Die Antwort sollte dem folgenden JSON-Beispiel ähnlich sein.

   ```
   {
       "JobId": "547089ce5b9a8a0e7831afa655f42e5d7b5c838553f1a584bf350ennnnnnnnnn"
   }
   ```

1. Öffnen Sie die [https://console.aws.amazon.com/cloudwatch/-Konsole](https://console.aws.amazon.com/cloudwatch/). 

1. Wenn die Analyse abgeschlossen ist, wird ein Protokolleintrag für die Lambda-Funktion in der **Protokollgruppe** angezeigt.

1. Wählen Sie die Lambda-Funktion aus, um die Protokollstreams anzuzeigen.

1. Wählen Sie den neuesten Protokollstream aus, um die Protokolleinträge der Lambda-Funktion anzusehen. Wenn der Vorgang erfolgreich war, ähnelt er der folgenden Ausgabe, in der die Details des Videoerkennungsvorgangs angezeigt werden, einschließlich der Auftrags-ID, des Vorgangstyps "StartLabelDetection„und einer Liste der erkannten Etikettenkategorien wie Flasche, Kleidung, Menschenmenge und Lebensmittel:  
![Protokollausgabe mit Details eines Videoerkennungsvorgangs.](http://docs.aws.amazon.com/de_de/rekognition/latest/dg/images/log.png)

   Der Wert für **Aufgaben-ID** sollte mit dem Wert für `JobId` übereinstimmen, den Sie in Schritt 3 notiert haben.