

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.

# Verarbeitung von Daten in einem benutzerdefinierten Etikettierungs-Workflow mit AWS Lambda
<a name="sms-custom-templates-step3"></a>

In diesem Thema erfahren Sie, wie Sie optionale [AWS Lambda](https://aws.amazon.com/lambda/)-Funktionen bereitstellen, wenn Sie einen benutzerdefinierten Kennzeichnungs-Workflow erstellen. Sie können zwei Arten von Lambda-Funktionen angeben, die Sie in Ihrem benutzerdefinierten Kennzeichnungs-Workflow verwenden möchten.
+ *Lambda zur Vorverarbeitung*: Diese Funktion initiiert verarbeitet jedes Datenobjekt vor, das an Ihren Kennzeichnungsauftrag gesendet wird, bevor es an Worker gesendet wird.
+ *Lambda zur Nachbearbeitung*: Diese Funktion verarbeitet die Ergebnisse, sobald Worker eine Aufgabe einreichen. Wenn Sie mehrere Worker pro Datenobjekt angeben, kann diese Funktion Logik zur Konsolidierung von Anmerkungen enthalten.

Wenn Sie ein neuer Benutzer von Lambda und Ground Truth sind, empfehlen wir Ihnen, die Seiten in diesem Abschnitt wie folgt zu verwenden:

1. Sehen Sie sich sich zunächst [Verwenden der Lambda-Funktionen zur Vorverarbeitung und zur NachbearbeitungVerwenden der Lambda-Funktionen](sms-custom-templates-step3-lambda-requirements.md) an.

1. Nutzen Sie dann die Seite [Fügen Sie die erforderlichen Berechtigungen für die Verwendung AWS Lambda mit Ground Truth hinzu](sms-custom-templates-step3-lambda-permissions.md), um mehr über die Sicherheits- und Berechtigungsanforderungen für die Verwendung Ihrer Lambda-Funktionen zur Vorverarbeitung und Nachbearbeitung in einem benutzerdefinierten Ground-Truth-Kennzeichnungsauftrag zu erfahren.

1. Als Nächstes müssen Sie die Lambda-Konsole aufrufen oder Lambdas verwenden, um Ihre APIs Funktionen zu erstellen. Im Abschnitt [Erstellen von Lambda-Funktionen mithilfe von Ground-Truth-Vorlagen](sms-custom-templates-step3-lambda-create.md) erfahren Sie, wie Sie Lambda-Funktionen erstellen.

1. Unter [Testen der Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung](sms-custom-templates-step3-lambda-test.md) erfahren Sie, wie Sie Ihre Lambda-Funktionen aktualisieren können.

1. Nachdem Sie Lambda-Funktionen zur Vorverarbeitung und zu Nachbearbeitung erstellt haben, wählen Sie sie im Abschnitt **Lambda-Funktionen** aus, der sich hinter dem Code-Editor für Ihren benutzerdefinierten HTML-Code in der Ground-Truth-Konsole befindet. Informationen zur Verwendung dieser Funktionen in einer `CreateLabelingJob`-API-Anfrage finden Sie unter [Erstellen eines Kennzeichnungsauftrags (API)](sms-create-labeling-job-api.md).

Ein Tutorial zum benutzerdefinierten Kennzeichnungs-Workflow, das Beispiele für Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung enthält, finden Sie unter [Demo-Vorlage: Kommentieren von Bildern mit `crowd-bounding-box`](sms-custom-templates-step2-demo1.md).

**Topics**
+ [Verwenden der Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung](sms-custom-templates-step3-lambda-requirements.md)
+ [Fügen Sie die erforderlichen Berechtigungen für die Verwendung AWS Lambda mit Ground Truth hinzu](sms-custom-templates-step3-lambda-permissions.md)
+ [Erstellen von Lambda-Funktionen mithilfe von Ground-Truth-Vorlagen](sms-custom-templates-step3-lambda-create.md)
+ [Testen der Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung](sms-custom-templates-step3-lambda-test.md)

# Verwenden der Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung
<a name="sms-custom-templates-step3-lambda-requirements"></a>

In diesen Themen erfahren Sie mehr über die Syntax der Anforderungen, die an Lambda-Funktionen vor und nach der Anmerkung gesendet werden, sowie über die erforderliche Antwortsyntax, die Ground Truth in benutzerdefinierten Labeling-Workflows verwendet.

**Topics**
+ [Lambda zur Vorverarbeitung](#sms-custom-templates-step3-prelambda)
+ [Lambda zur Nachbearbeitung](#sms-custom-templates-step3-postlambda)

## Lambda zur Vorverarbeitung
<a name="sms-custom-templates-step3-prelambda"></a>

Bevor eine Labeling-Aufgabe an den Worker gesendet wird, kann eine optionale Lambda-Funktion zur Vorverarbeitung aufgerufen werden.

Ground Truth sendet Ihrer Lambda-Funktion eine Anforderung im JSON-Format, um Details zum Kennzeichnungsauftrag und zum Datenobjekt bereitzustellen.

Es folgen zwei JSON-formatierte Beispielanforderungen.

------
#### [ Data object identified with "source-ref" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": <labelingJobArn>
    "dataObject" : {
        "source-ref": <s3Uri>
    }
}
```

------
#### [ Data object identified with "source" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": <labelingJobArn>
    "dataObject" : {
        "source": <string>
    }
}
```

------

 Die folgende Liste enthält die Anforderungsschemas zur Vorverarbeitung. Nachfolgend ist jeder Parameter beschrieben.
+ `version`(Zeichenfolge): Dies ist eine Versionsnummer, die von Ground Truth intern verwendet wird.
+ `labelingJobArn`(Zeichenfolge): Dies ist der Amazon-Ressourcenname oder ARN Ihres Kennzeichnungsauftrags. Dieser ARN kann verwendet werden, um auf den Kennzeichnungsauftrag zu verweisen, wenn Ground-Truth-API-Operationen wie `DescribeLabelingJob` verwendet werden.
+ Das `dataObject` (JSON-Objekt): Der Schlüssel enthält eine einzelne JSON-Line, entweder aus Ihrer Eingabemanifestdatei oder von Amazon SNS gesendet. Die JSON-Line-Objekte in Ihrem Manifest können bis zu 100 KB groß sein und eine Vielzahl von Daten enthalten. Bei einem sehr einfachen Bildanmerkungsauftrag kann das `dataObject` JSON nur einen `source-ref`-Schlüssel enthalten, der das Bild identifiziert, das mit Anmerkungen versehen werden soll. Wenn das Datenobjekt (z. B. eine Textzeile) direkt in der Eingabemanifestdatei enthalten ist, wird das Datenobjekt mit `source` identifiziert. Wenn Sie einen Überprüfungs- oder Anpassungsauftrag erstellen, kann diese Zeile Kennzeichnungsdaten und Metadaten aus dem vorherigen Kennzeichnungsauftrag enthalten.

Die folgenden Registerkarten zeigen Beispiele für eine Anforderung zur Vorverarbeitung. Jeder Parameter in diesen Beispielanforderungen wird unter der Tabelle mit Registern erklärt.

------
#### [ Data object identified with "source-ref" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/<labeling_job_name>"
    "dataObject" : {
        "source-ref": "s3://input-data-bucket/data-object-file-name"
    }
}
```

------
#### [ Data object identified with "source" ]

```
{
    "version": "2018-10-16",
    "labelingJobArn": "arn:aws:sagemaker:<aws_region>:111122223333:labeling-job/<labeling_job_name>"
    "dataObject" : {
        "source": "Sue purchased 10 shares of the stock on April 10th, 2020"
    }
}
```

------

Im Gegenzug benötigt Ground Truth eine Antwort, die wie folgt formatiert ist:

**Example von erwarteten Rückgabedaten**  

```
{
    "taskInput": <json object>,
    "isHumanAnnotationRequired": <boolean> # Optional
}
```

Im vorherigen Beispiel musste `<json object>` *alle* Daten enthalten, die Ihre benutzerdefinierte Worker-Aufgabenvorlage benötigt. Wenn Sie eine Begrenzungsrahmenaufgabe ausführen, in der die Anweisungen stets beibehalten werden, mag es sich lediglich um die HTTP(S) oder Amazon-S3-Ressource für Ihre Bilddatei handeln. Wenn es eine Stimmungsanalyseaufgabe ist und verschiedene Objekte möglicherweise unterschiedliche Auswahlmöglichkeiten bieten, ist es die Objektreferenz als Zeichenfolge und die Auswahl als ein Array von Zeichenfolgen.

**Auswirkungen von `isHumanAnnotationRequired`**  
Dieser Wert ist optional, da er standardmäßig auf `true` eingestellt ist. Der primäre Anwendungsfall für die explizite Einstellung ist, wenn Sie dieses Datenobjekt von der Kennzeichnung durch Auftragnehmer ausschließen möchten. 

Wenn Sie über eine Mischung von Objekten in Ihrem Manifest verfügen, von denen manche menschliche Anmerkungen erfordern und andere nicht, können Sie jedem Datenobjekt einen `isHumanAnnotationRequired`-Wert hinzufügen. Sie können Ihrem Lambda zu Vorverarbeitung Logik hinzufügen, um dynamisch zu bestimmen, ob ein Objekt eine Anmerkung benötigt, und diesen booleschen Wert entsprechend festlegen.

### Beispiele für Lambda-Funktionen zur Vorverarbeitung
<a name="sms-custom-templates-step3-prelambda-example"></a>

Die folgende grundlegende Lambda-Funktion zur Vorverarbeitung greift von der ersten Anforderung aus auf das JSON-Objekt in `dataObject` zu und gibt es im Parameter `taskInput` zurück.

```
import json

def lambda_handler(event, context):
    return {
        "taskInput":  event['dataObject']
    }
```

Vorausgesetzt, die Eingabemanifestdatei verwendet `"source-ref"` zur Identifizierung von Datenobjekten, muss die Worker-Aufgabenvorlage, die in demselben Kennzeichnungsauftrag wie dieses Lambda zur Vorverarbeitung verwendet wird, ein Liquid-Element wie das folgende enthalten, um `dataObject` aufnehmen zu können:

```
{{ task.input.source-ref | grant_read_access }}
```

Wenn die Eingabemanifestdatei `source` zur Identifizierung des Datenobjekts verwendet hat, kann die Worker-Aufgabenvorlage `dataObject` aufnehmen mit Folgendem aufnehmen:

```
{{ task.input.source }}
```

Das folgende Lambda-Beispiel zur Vorverarbeitung enthält Logik zur Identifizierung des in `dataObject` verwendeten Schlüssels und zum Verweisen auf dieses Datenobjekt, das `taskObject` in der Rückgabenweisung von Lambda verwendet.

```
import json

def lambda_handler(event, context):

    # Event received
    print("Received event: " + json.dumps(event, indent=2))

    # Get source if specified
    source = event['dataObject']['source'] if "source" in event['dataObject'] else None

    # Get source-ref if specified
    source_ref = event['dataObject']['source-ref'] if "source-ref" in event['dataObject'] else None

    # if source field present, take that otherwise take source-ref
    task_object = source if source is not None else source_ref

    # Build response object
    output = {
        "taskInput": {
            "taskObject": task_object
        },
        "humanAnnotationRequired": "true"
    }

    print(output)
    # If neither source nor source-ref specified, mark the annotation failed
    if task_object is None:
        print(" Failed to pre-process {} !".format(event["labelingJobArn"]))
        output["humanAnnotationRequired"] = "false"

    return output
```

## Lambda zur Nachbearbeitung
<a name="sms-custom-templates-step3-postlambda"></a>

Sobald alle Worker das Datenobjekt mit Anmerkungen versehen haben oder wenn [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HumanLoopConfig.html#SageMaker-Type-HumanLoopConfig-TaskAvailabilityLifetimeInSeconds](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_HumanLoopConfig.html#SageMaker-Type-HumanLoopConfig-TaskAvailabilityLifetimeInSeconds) erreicht wurde, je nachdem, welcher Fall zuerst eintritt, sendet Ground Truth diese Anmerkungen an Ihr Lambda zur Nachbearbeitung. Dieses Lambda wird normalerweise für [Anmerkungskonsolidierung](sms-annotation-consolidation.md) verwendet.

**Anmerkung**  
Ein Beispiel für eine Lambda-Funktion nach der Konsolidierung finden Sie unter [annotation\$1consolidation\$1lambda.py im Repository aws-sagemaker-ground-truth](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe/blob/master/aws_sagemaker_ground_truth_sample_lambda/annotation_consolidation_lambda.py) [ GitHub -recipe](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe).

Der folgende Codeblock enthält das Anforderungsschema zur Nachbearbeitung. Jeder Parameter ist in der folgenden Aufzählungsliste beschrieben.

```
{
    "version": "2018-10-16",
    "labelingJobArn": <string>,
    "labelCategories": [<string>],
    "labelAttributeName": <string>,
    "roleArn" : <string>,
    "payload": {
        "s3Uri": <string>
    }
 }
```
+ `version`(Zeichenfolge): Eine Versionsnummer, die von Ground Truth intern verwendet wird.
+ `labelingJobArn`(Zeichenfolge): Der Amazon-Ressourcenname oder ARN Ihres Kennzeichnungsauftrags. Dieser ARN kann verwendet werden, um auf den Kennzeichnungsauftrag zu verweisen, wenn Ground-Truth-API-Operationen wie `DescribeLabelingJob` verwendet werden.
+ `labelCategories`(Liste der Zeichenfolgen): Umfasst die Kennzeichnungskategorien und andere Attribute, die Sie entweder in der Konsole angegeben haben oder die Sie in die Konfigurationsdatei für die Kennzeichnungskategorien aufgenommen haben.
+ `labelAttributeName`(Zeichenfolge): Entweder der Name Ihres Kennzeichnungsauftrags oder Kennzeichnungsattributname, den Sie bei der Erstellung des Kennzeichnungsauftrags angeben.
+ `roleArn`(Zeichenfolge): Der Amazon-Ressourcenname (ARN) der IAM-Ausführungsrolle, die Sie beim Erstellen des Kennzeichnungsauftrags angeben. 
+ `payload`(JSON-Objekt): Ein JSON, das einen `s3Uri`-Schlüssel enthält, der den Speicherort der Annotationsdaten für dieses Datenobjekt in Amazon S3 identifiziert. Der zweite Codeblock unten zeigt ein Beispiel für diese Annotationsdatei.

Der folgende Codeblock enthält ein Beispiel für eine Anforderung zur Nachbearbeitung. Jeder Parameter in dieser Beispielanforderung wird unter dem Codeblock erklärt.

**Example einer Lambda-Anforderung zur Nachbearbeitung**  

```
{
    "version": "2018-10-16",
    "labelingJobArn": "arn:aws:sagemaker:us-west-2:111122223333:labeling-job/labeling-job-name",
    "labelCategories": ["Ex Category1","Ex Category2", "Ex Category3"],
    "labelAttributeName": "labeling-job-attribute-name",
    "roleArn" : "arn:aws:iam::111122223333:role/role-name",
    "payload": {
        "s3Uri": "s3://amzn-s3-demo-bucket/annotations.json"
    }
 }
```

**Anmerkung**  
Wenn kein Worker an dem Datenobjekt arbeitet und `TaskAvailabilityLifetimeInSeconds` erreicht wurde, wird das Datenobjekt als fehlgeschlagen markiert und nicht als Teil des Lambda-Aufrufs zur Nachbearbeitung aufgenommen.

Der folgende Codeblock enthält das Nutzlastschema. Dies ist die Datei, die durch den `s3Uri`-Parameter im `payload`-JSON-Objekt der Lambda-Anforderung zur Nachbearbeitung angegeben ist. Wenn der vorherige Codeblock beispielsweise die Lambda-Anforderung zur Nachbearbeitung ist, befindet sich die folgende Annotationsdatei unter `s3://amzn-s3-demo-bucket/annotations.json`.

Jeder Parameter ist in der folgenden Aufzählungsliste beschrieben.

**Example einer Annotationsdatei**  

```
[
    {
        "datasetObjectId": <string>,
        "dataObject": {
            "s3Uri": <string>,
            "content": <string>
        },
        "annotations": [{
            "workerId": <string>,
            "annotationData": {
                "content": <string>,
                "s3Uri": <string>
            }
       }]
    }
]
```
+ `datasetObjectId`(Zeichenfolge): Identifiziert eine eindeutige ID, die Ground Truth jedem Datenobjekt zuweist, das Sie an den Kennzeichnungsauftrag senden.
+ `dataObject`(JSON-Objekt): Das Datenobjekt, das beschriftet wurde. Wenn das Datenobjekt in der Eingabemanifestdatei enthalten ist und mithilfe des `source`-Schlüssels (z .B. einer Zeichenfolge) identifiziert wird, enthält `dataObject` einen `content`-Schlüssel, der das Datenobjekt identifiziert. Andernfalls wird der Speicherort des Datenobjekts (z. B. ein Link oder ein S3-URI) mit `s3Uri` identifiziert.
+ `annotations` (Liste der JSON-Objekte): Diese Liste enthält ein einzelnes JSON-Objekt für jede Anmerkung, die von Workern für dieses `dataObject` eingereicht wurde. Ein einzelnes JSON-Objekt enthält eine eindeutige `workerId`, die zur Identifizierung des Workers verwendet werden kann, der diese Anmerkung eingereicht hat. Der `annotationData`-Schlüssel enthält eines der folgenden Elemente:
  + `content`(Zeichenfolge): Enthält die Annotationsdaten. 
  + `s3Uri`(Zeichenfolge): Enthält einen S3-URI, der den Speicherort der Annotationsdaten identifiziert.

Die folgende Tabelle enthält Beispiele für den Inhalt, den Sie in der Nutzlast für verschiedene Arten von Anmerkungen finden können.

------
#### [ Named Entity Recognition Payload ]

```
[
    {
      "datasetObjectId": "1",
      "dataObject": {
        "content": "Sift 3 cups of flour into the bowl."
      },
      "annotations": [
        {
          "workerId": "private.us-west-2.ef7294f850a3d9d1",
          "annotationData": {
            "content": "{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}"
          }
        }
      ]
    }
]
```

------
#### [ Semantic Segmentation Payload ]

```
[
    {
      "datasetObjectId": "2",
      "dataObject": {
        "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird3.jpg"
      },
      "annotations": [
        {
          "workerId": "private.us-west-2.ab1234c5678a919d0",
          "annotationData": {
            "content": "{\"crowd-semantic-segmentation\":{\"inputImageProperties\":{\"height\":2000,\"width\":3020},\"labelMappings\":{\"Bird\":{\"color\":\"#2ca02c\"}},\"labeledImage\":{\"pngImageData\":\"iVBOR...\"}}}"
          }
        }
      ]
    }
  ]
```

------
#### [ Bounding Box Payload ]

```
[
    {
      "datasetObjectId": "0",
      "dataObject": {
        "s3Uri": "s3://amzn-s3-demo-bucket/gt-input-data/images/bird1.jpg"
      },
      "annotations": [
        {
          "workerId": "private.us-west-2.ab1234c5678a919d0",
          "annotationData": {
            "content": "{\"boundingBox\":{\"boundingBoxes\":[{\"height\":2052,\"label\":\"Bird\",\"left\":583,\"top\":302,\"width\":1375}],\"inputImageProperties\":{\"height\":2497,\"width\":3745}}}"
          }
        }
      ]
    }
 ]
```

------

Ihre Lambda-Funktion zur Nachbereitung kann eine Logik ähnlich der folgenden enthalten, um alle in der Anforderung enthaltenen Anmerkungen zu durchlaufen und darauf zuzugreifen. [Ein vollständiges Beispiel finden Sie unter [annotation\$1consolidation\$1lambda.py im Repository](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe/blob/master/aws_sagemaker_ground_truth_sample_lambda/annotation_consolidation_lambda.py) -recipe. aws-sagemaker-ground-truth](https://github.com/aws-samples/aws-sagemaker-ground-truth-recipe) GitHub In diesem GitHub Beispiel müssen Sie Ihre eigene Logik zur Konsolidierung von Anmerkungen hinzufügen. 

```
for i in range(len(annotations)):
    worker_id = annotations[i]["workerId"]
    annotation_content = annotations[i]['annotationData'].get('content')
    annotation_s3_uri = annotations[i]['annotationData'].get('s3uri')
    annotation = annotation_content if annotation_s3_uri is None else s3_client.get_object_from_s3(
        annotation_s3_uri)
    annotation_from_single_worker = json.loads(annotation)

    print("{} Received Annotations from worker [{}] is [{}]"
            .format(log_prefix, worker_id, annotation_from_single_worker))
```

**Tipp**  
Wenn Sie Konsolidierungsalgorithmen für die Daten ausführen, können Sie einen AWS -Datenbankservice verwenden, um Ergebnisse zu speichern, oder Sie können die verarbeiteten Ergebnisse an Ground Truth zurückgeben. Die Daten, die Sie an Ground Truth zurückgeben, werden in konsolidierten Annotationsmanifesten im S3-Bucket gespeichert, der während der Konfiguration des Kennzeichnungsauftrags für die Ausgabe angegeben wurde.

Im Gegenzug benötigt Ground Truth eine Antwort, die wie folgt formatiert ist:

**Example von erwarteten Rückgabedaten**  

```
[
   {        
        "datasetObjectId": <string>,
        "consolidatedAnnotation": {
            "content": {
                "<labelattributename>": {
                    # ... label content
                }
            }
        }
    },
   {        
        "datasetObjectId": <string>,
        "consolidatedAnnotation": {
            "content": {
                "<labelattributename>": {
                    # ... label content
                }
            }
        }
    }
    .
    .
    .
]
```
An diesem Punkt befinden sich alle Daten, die Sie an Ihren S3-Bucket senden, außer der `datasetObjectId`, im `content`-Objekt.

Wenn Sie Anmerkungen in `content` zurückgeben, führt dies zu einem Eintrag im Ausgabemanifest Ihres Auftrags, der wie folgt aussieht:

**Example eines Kennzeichnungsformats im Ausgabemanifest**  

```
{  "source-ref"/"source" : "<s3uri or content>", 
   "<labelAttributeName>": {
        # ... label content from you
    },   
   "<labelAttributeName>-metadata": { # This will be added by Ground Truth
        "job_name": <labelingJobName>,
        "type": "groundTruth/custom",
        "human-annotated": "yes", 
        "creation_date": <date> # Timestamp of when received from Post-labeling Lambda
    }
}
```

Aufgrund der potenziell komplexen Natur einer benutzerdefinierten Vorlage und der Daten, die sie sammelt, bietet Ground Truth keine weitere Verarbeitung der Daten oder Einblicke in diese.

# Fügen Sie die erforderlichen Berechtigungen für die Verwendung AWS Lambda mit Ground Truth hinzu
<a name="sms-custom-templates-step3-lambda-permissions"></a>

Möglicherweise müssen Sie einige oder alle der folgenden Optionen konfigurieren, um AWS Lambda mit Ground Truth zu erstellen und zu verwenden. 
+ Sie müssen einer IAM-Rolle oder einem IAM-Benutzer (zusammen eine IAM-Entität) die Erlaubnis erteilen, die Lambda-Funktionen vor und nach der Anmerkung zu erstellen und sie bei der Erstellung des Labeling-Jobs auszuwählen. AWS Lambda
+ Die bei der Konfiguration des Kennzeichnungsauftrags angegebene IAM-Ausführungsrolle benötigt die Erlaubnis, die Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung aufzurufen. 
+ Die Lambda-Funktionen zur Nachbearbeitung benötigen möglicherweise eine Zugriffsberechtigung für Amazon S3.

In den folgenden Abschnitten erfahren Sie, wie Sie die IAM-Entitäten erstellen und die oben beschriebenen Berechtigungen erteilen.

**Topics**
+ [Erteilen Sie die Berechtigung zum Erstellen und Auswählen einer Funktion AWS Lambda](#sms-custom-templates-step3-postlambda-create-perms)
+ [Erteilen Sie der IAM-Ausführungsrolle die Berechtigung zum Aufrufen von Funktionen AWS Lambda](#sms-custom-templates-step3-postlambda-execution-role-perms)
+ [Erteilen von Lambda-Berechtigungen zur Nachbearbeitung für den Zugriff auf Anmerkungen](#sms-custom-templates-step3-postlambda-perms)

## Erteilen Sie die Berechtigung zum Erstellen und Auswählen einer Funktion AWS Lambda
<a name="sms-custom-templates-step3-postlambda-create-perms"></a>

Wenn Sie keine detaillierten Berechtigungen für die Entwicklung von Lambda-Funktionen vor und nach der Annotation benötigen, können Sie die AWS verwaltete Richtlinie `AWSLambda_FullAccess` an einen Benutzer oder eine Rolle anhängen. Diese Richtlinie gewährt umfassende Berechtigungen zur Nutzung aller Lambda-Funktionen sowie zur Durchführung von Aktionen in anderen AWS Diensten, mit denen Lambda interagiert.

Informationen zur Erstellung einer detaillierteren Richtlinie für sicherheitsrelevante Anwendungsfälle finden Sie in der Dokumentation [Identity-based IAM policies for Lambda im to AWS Lambda Developer Guide, um zu erfahren, wie Sie eine IAM-Richtlinie](https://docs.aws.amazon.com/lambda/latest/dg/access-control-identity-based.html) erstellen, die zu Ihrem Anwendungsfall passt. 

**Richtlinien für die Verwendung der Lambda-Konsole**

Wenn Sie einer IAM-Entität die Berechtigung zur Verwendung der Lambda-Konsole erteilen möchten, finden Sie weitere Informationen unter [Verwenden der Lambda-Konsole im AWS Lambda Entwicklerhandbuch](https://docs.aws.amazon.com/lambda/latest/dg/security_iam_id-based-policy-examples.html#security_iam_id-based-policy-examples-console).

Wenn Sie möchten, dass der Benutzer über die AWS Serverless Application Repository in der Lambda-Konsole auf die Starterfunktionen vor und nach der Anmerkung von Ground Truth zugreifen und diese bereitstellen kann, müssen Sie außerdem angeben, *`<aws-region>`* wo Sie die Funktionen bereitstellen möchten (dies sollte dieselbe AWS Region sein, in der der Labeling-Job erstellt wurde), und der IAM-Rolle die folgende Richtlinie hinzufügen.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "serverlessrepo:ListApplicationVersions",
                "serverlessrepo:GetApplication",
                "serverlessrepo:CreateCloudFormationTemplate"
            ],
            "Resource": "arn:aws:serverlessrepo:us-east-1:838997950401:applications/aws-sagemaker-ground-truth-recipe"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": "serverlessrepo:SearchApplications",
            "Resource": "*"
        }
    ]
}
```

------

**Richtlinien zur Anzeige von Lambda-Funktionen in der Ground-Truth-Konsole**

Um einer IAM-Entität die Erlaubnis zu erteilen, Lambda-Funktionen in der Ground-Truth-Konsole anzuzeigen, wenn der Benutzer einen benutzerdefinierten Kennzeichnungsauftrag erstellt, muss die Entität über die unter [Erteilen Sie IAM-Berechtigungen zur Nutzung der Amazon SageMaker Ground Truth Console](sms-security-permission-console-access.md) beschriebenen Berechtigungen verfügen, einschließlich der im Abschnitt [Workflow-Berechtigungen für benutzerdefinierte Kennzeichnungsaufträge](sms-security-permission-console-access.md#sms-security-permissions-custom-workflow) beschriebenen Berechtigungen.

## Erteilen Sie der IAM-Ausführungsrolle die Berechtigung zum Aufrufen von Funktionen AWS Lambda
<a name="sms-custom-templates-step3-postlambda-execution-role-perms"></a>

Wenn Sie die von IAM verwaltete Richtlinie [AmazonSageMakerGroundTruthExecution](https://console.aws.amazon.com/iam/home?#/policies/arn:aws:iam::aws:policy/AmazonSageMakerGroundTruthExecution)zur IAM-Ausführungsrolle hinzufügen, die zur Erstellung des Labeling-Jobs verwendet wurde, ist diese Rolle berechtigt, Lambda-Funktionen mit einer der folgenden Zeichenfolgen im Funktionsnamen aufzulisten und aufzurufen:`GtRecipe`,,`SageMaker`, `Sagemaker` oder. `sagemaker` `LabelingFunction` 

Wenn die Namen der Lambda-Funktionen zur Vorverarbeitung oder zur Nachbearbeitung keinen der Begriffe aus dem vorherigen Absatz enthalten oder wenn Sie präzisere Berechtigungen benötigen als die in der von `AmazonSageMakerGroundTruthExecution` verwalteten Richtlinie, können Sie eine Richtlinie hinzufügen, die der folgenden ähnelt, um der Ausführungsrolle die Berechtigung zu erteilen, Funktionen zur Vorverarbeitung und zur Nachbearbeitung aufzurufen.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "lambda:InvokeFunction",
            "Resource": [
                "arn:aws:lambda:us-east-1:111122223333:function:<pre-annotation-lambda-name>",
                "arn:aws:lambda:us-east-1:111122223333:function:<post-annotation-lambda-name>"
            ]
        }
    ]
}
```

------

## Erteilen von Lambda-Berechtigungen zur Nachbearbeitung für den Zugriff auf Anmerkungen
<a name="sms-custom-templates-step3-postlambda-perms"></a>

Wie unter [Lambda zur Nachbearbeitung](sms-custom-templates-step3-lambda-requirements.md#sms-custom-templates-step3-postlambda) beschrieben, enthält die Lambda-Anforderung zur Nachbearbeitung den Speicherort der Annotationsdaten in Amazon S3. Dieser Ort wird durch die `s3Uri`-Zeichenfolge im Objekt`payload` identifiziert. Um die Anmerkungen bei Eingang zu verarbeiten, selbst für eine einfache Pass-Through-Funktion, müssen Sie die notwendigen Berechtigungen für die [Lambda-Ausführungsrolle](https://docs.aws.amazon.com/lambda/latest/dg/lambda-intro-execution-role.html) zur Nachbearbeitung zuweisen, um Dateien aus Ihrem S3-Bucket zu lesen.

Es gibt viele Möglichkeiten, Ihr Lambda für den Zugriff auf Annotationsdaten in Amazon S3 zu konfigurieren. Zwei gängige Methoden sind:
+ Erlauben Sie der Lambda-Ausführungsrolle, die SageMaker KI-Ausführungsrolle anzunehmen, die `roleArn` in der Lambda-Anfrage nach der Anmerkung identifiziert wurde. Diese SageMaker KI-Ausführungsrolle wird zur Erstellung des Labeling-Jobs verwendet und hat Zugriff auf den Amazon S3 S3-Ausgabe-Bucket, in dem die Annotationsdaten gespeichert sind.
+ Erteilen Sie der Lambda-Ausführungsrolle die Berechtigung für den direkten Zugriff auf den Amazon-S3-Ausgabe-Bucket.

In den folgenden Abschnitten erfahren Sie, wie Sie diese Optionen konfigurieren. 

**Lambda die Erlaubnis erteilen, die SageMaker AI-Ausführungsrolle zu übernehmen**

Damit eine Lambda-Funktion eine SageMaker KI-Ausführungsrolle übernehmen kann, müssen Sie der Ausführungsrolle der Lambda-Funktion eine Richtlinie zuordnen und die Vertrauensstellung der SageMaker KI-Ausführungsrolle so ändern, dass Lambda sie übernehmen kann.

1. [Fügen Sie der Ausführungsrolle Ihrer Lambda-Funktion die folgende IAM-Richtlinie](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html) hinzu, um die in identifizierte SageMaker KI-Ausführungsrolle anzunehmen. `Resource` Ersetzen Sie `222222222222` durch eine [AWS -Konto-ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). Ersetzen Sie `sm-execution-role` durch den Namen der übernommenen Rolle.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": {
           "Effect": "Allow",
           "Action": "sts:AssumeRole",
           "Resource": "arn:aws:iam::222222222222:role/sm-execution-role"
       }
   }
   ```

------

1. [Ändern Sie die Vertrauensrichtlinie](https://docs.aws.amazon.com/IAM/latest/UserGuide/roles-managingrole-editing-console.html#roles-managingrole_edit-trust-policy) der SageMaker KI-Ausführungsrolle so, dass sie Folgendes umfasst. `Statement` Ersetzen Sie `222222222222` durch eine [AWS -Konto-ID](https://docs.aws.amazon.com/general/latest/gr/acct-identifiers.html). Ersetzen Sie `my-lambda-execution-role` durch den Namen der übernommenen Rolle.

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

****  

   ```
   {
       "Version":"2012-10-17",		 	 	 
       "Statement": [
           {
               "Effect": "Allow",
               "Principal": {
                   "AWS": "arn:aws:iam::222222222222:role/my-lambda-execution-role"
               },
               "Action": "sts:AssumeRole"
           }
       ]
   }
   ```

------

**Gewähren der Lambda-Ausführungsrolle die Berechtigung für den Zugriff auf S3**

Sie können der Lambda-Funktionsausführungsrolle zur Nachbearbeitung eine Richtlinie hinzufügen, die der folgenden ähnelt, um ihr S3-Leseberechtigungen zu erteilen. *amzn-s3-demo-bucket*Ersetzen Sie es durch den Namen des Ausgabe-Buckets, den Sie beim Erstellen eines Labeling-Jobs angeben.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": "arn:aws:s3:::amzn-s3-demo-bucket/*"
        }
    ]
}
```

------

Gehen Sie wie folgt vor, um einer Lambda-Ausführungsrolle in der Lambda-Konsole S3-Leseberechtigungen hinzuzufügen. 

**Fügen Sie Lambda zur Nachbearbeitung S3-Leseberechtigungen hinzu:**

1. Öffnen Sie die Seite [https://console.aws.amazon.com/lambda/home#/functions](https://console.aws.amazon.com/lambda/home#/functions) in der Lambda-Konsole.

1. Klicken Sie auf den Namen der Funktion zur Nachbearbeitung.

1. Wählen Sie **Konfiguration** und anschließend **Berechtigungen** aus.

1. Wählen Sie den **Rollennamen** aus. Die Übersichtsseite für diese Rolle wird in der IAM-Konsole auf einer neuen Registerkarte geöffnet. 

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

1. Führen Sie eine der folgenden Aktionen aus:
   + Suchen Sie und wählen Sie **`AmazonS3ReadOnlyAccess`** aus, um der Funktion die Berechtigung zum Lesen aller Buckets und Objekte im Konto zu erteilen. 
   + Wenn Sie präzisere Berechtigungen benötigen, wählen Sie **Richtlinie erstellen** aus und verwenden Sie das Richtlinienbeispiel aus dem vorherigen Abschnitt, um eine Richtlinie zu erstellen. Beachten Sie, dass Sie nach dem Erstellen der Richtlinie zur Seite mit der Zusammenfassung der Ausführungsrolle zurückkehren müssen.

1. Wenn Sie die `AmazonS3ReadOnlyAccess`-verwaltete Richtlinie verwendet haben, wählen Sie **Richtlinie anfügen** aus. 

   Wenn Sie eine neue Richtlinie erstellt haben, kehren Sie zur Seite mit der Zusammenfassung der Lambda-Ausführungsrolle zurück und fügen Sie die soeben erstellte Richtlinie an.

# Erstellen von Lambda-Funktionen mithilfe von Ground-Truth-Vorlagen
<a name="sms-custom-templates-step3-lambda-create"></a>

Sie können eine Lambda-Funktion mit der Lambda-Konsole AWS CLI, dem oder einem AWS SDK in einer unterstützten Programmiersprache Ihrer Wahl erstellen. Weitere Informationen zu den einzelnen Optionen finden Sie im AWS Lambda Entwicklerhandbuch:
+ Informationen zum Erstellen einer Lambda-Funktion mithilfe der Konsole finden Sie unter [Erstellen einer Lambda-Funktion mit der Konsole](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html).
+ Informationen zum Erstellen einer Lambda-Funktion mit dem AWS CLI finden Sie unter [Verwenden von AWS Lambda mit der AWS Befehlszeilenschnittstelle](https://docs.aws.amazon.com/lambda/latest/dg/gettingstarted-awscli.html).
+ Wählen Sie den entsprechenden Abschnitt im Inhaltsverzeichnis aus, um mehr über die Arbeit mit Lambda in der Sprache Ihrer Wahl zu erfahren. Wählen Sie beispielsweise [Verwenden von Python](https://docs.aws.amazon.com/lambda/latest/dg/lambda-python.html) aus, um mehr über die Verwendung von Lambda mit AWS SDK für Python (Boto3) zu erfahren.

*Ground Truth stellt Vorlagen für die Vor- und Nachkommentierung nach einem AWS Serverless Application Repository (SAR-) Rezept zur Verfügung.* Gehen Sie wie folgt vor, um das Ground-Truth-Rezept in der Lambda-Konsole auszuwählen.

**Verwenden Sie das Ground-Truth-SAR-Rezept, um Lambda-Funktionen zur Vorverarbeitung und Nachbearbeitung zu erstellen:**

1. Öffnen Sie die Seite [https://console.aws.amazon.com/lambda/home#/functions](https://console.aws.amazon.com/lambda/home#/functions) der Lambda-Konsole.

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

1. Wählen Sie **Serverloses App-Repository durchsuchen** aus.

1. Geben Sie in das Suchtextfeld **aws-sagemaker-ground-truth-recipe** ein und wählen Sie die App aus.

1. Wählen Sie **Bereitstellen** aus. Die Bereitstellung der App kann einige Minuten dauern. 

   Sobald die App bereitgestellt ist, werden zwei Funktionen im Bereich **Funktionen** der Lambda-Konsole angezeigt: `serverlessrepo-aws-sagema-GtRecipePreHumanTaskFunc-<id>` und `serverlessrepo-aws-sagema-GtRecipeAnnotationConsol-<id>`. 

1. Wählen Sie eine dieser Funktionen aus und fügen Sie Ihre benutzerdefinierte Logik im Abschnitt **Code** hinzu.

1. Wenn Sie alle Änderungen vorgenommen haben, wählen Sie **Bereitstellen** aus, um sie bereitzustellen.

# Testen der Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung
<a name="sms-custom-templates-step3-lambda-test"></a>

Sie können Ihre Lambda-Funktionen zur Vorverarbeitung und zur Nachbearbeitung in der Lambda-Konsole testen. Wenn Sie ein neuer Benutzer von Lambda sind, können Sie mithilfe des Tutorials [Erstellen einer Lambda-Funktion](https://docs.aws.amazon.com/lambda/latest/dg/getting-started-create-function.html#gettingstarted-zip-function) im AWS Lambda -Entwicklerhandbuch lernen, wie Sie Ihre Lambda-Funktionen in der Konsole testen oder *aufrufen*. In den Abschnitten auf dieser Seite erfahren Sie, wie Sie die über eine AWS Serverless Application Repository (SAR) bereitgestellten Ground Truth-Vorlagen vor und nach der Anmerkung testen können. 

**Topics**
+ [Voraussetzungen](#sms-custom-templates-step3-lambda-test-pre)
+ [Testen der Lambda-Funktion zur Vorverarbeitung](#sms-custom-templates-step3-lambda-test-pre-annotation)
+ [Testen der Lambda-Funktion zur Nachbearbeitung](#sms-custom-templates-step3-lambda-test-post-annotation)

## Voraussetzungen
<a name="sms-custom-templates-step3-lambda-test-pre"></a>

Um die auf dieser Seite beschriebenen Tests verwenden zu können, müssen Sie wie folgt vorgehen.
+ Sie benötigen Zugriff auf die Lambda-Konsole und Berechtigungen, Lambda-Funktionen zu erstellen und aufzurufen. Informationen zum Einrichten dieser Berechtigungen finden Sie unter [Erteilen Sie die Berechtigung zum Erstellen und Auswählen einer Funktion AWS Lambda](sms-custom-templates-step3-lambda-permissions.md#sms-custom-templates-step3-postlambda-create-perms).
+ Wenn Sie das Ground-Truth-SAR-Rezept nicht bereitgestellt haben, verwenden Sie dazu das Verfahren in [Erstellen von Lambda-Funktionen mithilfe von Ground-Truth-Vorlagen](sms-custom-templates-step3-lambda-create.md).
+ Um die Lambda-Funktion zur Nachbearbeitung zu testen, benötigen Sie in Amazon S3 eine Datendatei mit Beispiel-Annotationsdaten. Für einen einfachen Test können Sie den folgenden Code kopieren und in eine Datei einfügen, ihn unter `sample-annotations.json` speichern und [diese Datei auf Amazon S3 hochladen](https://docs.aws.amazon.com/AmazonS3/latest/userguide/upload-objects.html). Notieren Sie sich den S3-URI dieser Datei – Sie benötigen diese Informationen, um den Lambda-Test nach der Annotation zu konfigurieren.

  ```
  [{"datasetObjectId":"0","dataObject":{"content":"To train a machine learning model, you need a large, high-quality, labeled dataset. Ground Truth helps you build high-quality training datasets for your machine learning models."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":8,\"label\":\"verb\",\"startOffset\":3},{\"endOffset\":27,\"label\":\"adjective\",\"startOffset\":11},{\"endOffset\":33,\"label\":\"object\",\"startOffset\":28},{\"endOffset\":51,\"label\":\"adjective\",\"startOffset\":46},{\"endOffset\":65,\"label\":\"adjective\",\"startOffset\":53},{\"endOffset\":74,\"label\":\"adjective\",\"startOffset\":67},{\"endOffset\":82,\"label\":\"adjective\",\"startOffset\":75},{\"endOffset\":102,\"label\":\"verb\",\"startOffset\":97},{\"endOffset\":112,\"label\":\"verb\",\"startOffset\":107},{\"endOffset\":125,\"label\":\"adjective\",\"startOffset\":113},{\"endOffset\":134,\"label\":\"adjective\",\"startOffset\":126},{\"endOffset\":143,\"label\":\"object\",\"startOffset\":135},{\"endOffset\":169,\"label\":\"adjective\",\"startOffset\":153},{\"endOffset\":176,\"label\":\"object\",\"startOffset\":170}]}}"}}]},{"datasetObjectId":"1","dataObject":{"content":"Sift 3 cups of flour into the bowl."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":4,\"label\":\"verb\",\"startOffset\":0},{\"endOffset\":6,\"label\":\"number\",\"startOffset\":5},{\"endOffset\":20,\"label\":\"object\",\"startOffset\":15},{\"endOffset\":34,\"label\":\"object\",\"startOffset\":30}]}}"}}]},{"datasetObjectId":"2","dataObject":{"content":"Jen purchased 10 shares of the stock on Janurary 1st, 2020."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":3,\"label\":\"person\",\"startOffset\":0},{\"endOffset\":13,\"label\":\"verb\",\"startOffset\":4},{\"endOffset\":16,\"label\":\"number\",\"startOffset\":14},{\"endOffset\":58,\"label\":\"date\",\"startOffset\":40}]}}"}}]},{"datasetObjectId":"3","dataObject":{"content":"The narrative was interesting, however the character development was weak."},"annotations":[{"workerId":"private.us-west-2.0123456789","annotationData":{"content":"{\"crowd-entity-annotation\":{\"entities\":[{\"endOffset\":29,\"label\":\"adjective\",\"startOffset\":18},{\"endOffset\":73,\"label\":\"adjective\",\"startOffset\":69}]}}"}}]}]
  ```
+ Sie müssen die Anweisungen unter verwenden[Erteilen von Lambda-Berechtigungen zur Nachbearbeitung für den Zugriff auf Anmerkungen](sms-custom-templates-step3-lambda-permissions.md#sms-custom-templates-step3-postlambda-perms), um der Ausführungsrolle Ihrer Lambda-Funktion nach der Annotation die Berechtigung zu erteilen, die SageMaker KI-Ausführungsrolle anzunehmen, die Sie zum Erstellen des Labeling-Jobs verwenden. Die Lambda-Funktion nach der Annotation verwendet die SageMaker AI-Ausführungsrolle, um auf die Annotationsdatendatei in `sample-annotations.json` S3 zuzugreifen.



## Testen der Lambda-Funktion zur Vorverarbeitung
<a name="sms-custom-templates-step3-lambda-test-pre-annotation"></a>

Verwenden Sie das folgende Verfahren, um die Lambda-Funktion vor der Annotation zu testen, die bei der Bereitstellung des Ground Truth AWS Serverless Application Repository (SAR) -Rezepts erstellt wurde. 

**Testen der Lambda-Funktion zur Vorverarbeitung des Ground-Truth-SAR-Rezepts**

1. Öffnen Sie die Seite [https://console.aws.amazon.com/lambda/home#/functions](https://console.aws.amazon.com/lambda/home#/functions) in der Lambda-Konsole.

1. Wählen Sie die Funktion zur Vorverarbeitung, die aus dem Ground-Truth-SAR-Rezept bereitgestellt wurde. Der Name dieser Funktion ist `serverlessrepo-aws-sagema-GtRecipePreHumanTaskFunc-<id>` ähnlich.

1. Wählen Sie im Abschnitt **Codequelle** den Pfeil neben **Test** aus.

1. Wählen Sie **Testereignis konfigurieren**.

1. Lassen Sie die Option **Neues Testereignis erstellen** ausgewählt.

1. Wählen Sie unter **Eventvorlage** die Option **SageMakerGround Truth** aus PreHumanTask. 

1. Geben Sie Ihrem Test einen **Ereignisnamen.**

1. Wählen Sie **Erstellen** aus.

1. Klicken Sie erneut auf den Pfeil neben **Test**. Sie sollten nun sehen, dass der von Ihnen erstellte Test ausgewählt ist, was durch einen Punkt neben dem Namen des Ereignisses gekennzeichnet ist. Wenn er nicht ausgewählt ist, wählen Sie ihn aus. 

1. Wählen Sie **Test** aus, um den Test auszuführen. 

Nachdem Sie den Test ausgeführt haben, können Sie die **Ausführungsergebnisse** sehen. Unter **Funktionsprotokolle** sollten Sie eine Antwort ähnlich der folgenden sehen:

```
START RequestId: cd117d38-8365-4e1a-bffb-0dcd631a878f Version: $LATEST
Received event: {
  "version": "2018-10-16",
  "labelingJobArn": "arn:aws:sagemaker:us-east-2:123456789012:labeling-job/example-job",
  "dataObject": {
    "source-ref": "s3://sagemakerexample/object_to_annotate.jpg"
  }
}
{'taskInput': {'taskObject': 's3://sagemakerexample/object_to_annotate.jpg'}, 'isHumanAnnotationRequired': 'true'}
END RequestId: cd117d38-8365-4e1a-bffb-0dcd631a878f
REPORT RequestId: cd117d38-8365-4e1a-bffb-0dcd631a878f	Duration: 0.42 ms	Billed Duration: 1 ms	Memory Size: 128 MB	Max Memory Used: 43 MB
```

In dieser Antwort können wir sehen, dass die Ausgabe der Lambda-Funktion der erforderlichen Antwortsyntax zur Vorverarbeitung entspricht:

```
{'taskInput': {'taskObject': 's3://sagemakerexample/object_to_annotate.jpg'}, 'isHumanAnnotationRequired': 'true'}
```

## Testen der Lambda-Funktion zur Nachbearbeitung
<a name="sms-custom-templates-step3-lambda-test-post-annotation"></a>

Verwenden Sie das folgende Verfahren, um die Lambda-Funktion nach der Annotation zu testen, die bei der Bereitstellung des Ground Truth AWS Serverless Application Repository (SAR) -Rezepts erstellt wurde. 

**Testen der Lambda-Funktion zur Nachbearbeitung des Ground-Truth-SAR-Rezepts**

1. Öffnen Sie die Seite [https://console.aws.amazon.com/lambda/home#/functions](https://console.aws.amazon.com/lambda/home#/functions) in der Lambda-Konsole.

1. Wählen Sie die Funktion zur Nachbearbeitung, die aus dem Ground-Truth-SAR-Rezept bereitgestellt wurde. Der Name dieser Funktion ist `serverlessrepo-aws-sagema-GtRecipeAnnotationConsol-<id>` ähnlich.

1. Wählen Sie im Abschnitt **Codequelle** den Pfeil neben **Test** aus.

1. Wählen Sie **Testereignis konfigurieren**.

1. Lassen Sie die Option **Neues Testereignis erstellen** ausgewählt.

1. Wählen Sie unter **Eventvorlage** die Option **SageMakerGround Truth** aus AnnotationConsolidation.

1. Geben Sie Ihrem Test einen **Ereignisnamen.**

1. Ändern Sie den bereitgestellten Vorlagencode folgendermaßen:
   + Ersetzen Sie den Amazon-Ressourcennamen (ARN) durch den ARN der SageMaker KI-Ausführungsrolle, `roleArn` mit der Sie den Labeling-Job erstellt haben.
   + Ersetzen Sie den S3-URI in `s3Uri` durch den URI der Datei `sample-annotations.json`, die Sie Amazon S3 hinzugefügt haben.

   Nachdem Sie diese Änderungen vorgenommen haben, sollte Ihr Test wie folgt aussehen:

   ```
   {
     "version": "2018-10-16",
     "labelingJobArn": "arn:aws:sagemaker:us-east-2:123456789012:labeling-job/example-job",
     "labelAttributeName": "example-attribute",
     "roleArn": "arn:aws:iam::222222222222:role/sm-execution-role",
     "payload": {
       "s3Uri": "s3://your-bucket/sample-annotations.json"
     }
   }
   ```

1. Wählen Sie **Erstellen** aus.

1. Klicken Sie erneut auf den Pfeil neben **Test**. Sie sollten nun sehen, dass der von Ihnen erstellte Test ausgewählt ist, was durch einen Punkt neben dem Namen des Ereignisses gekennzeichnet ist. Wenn er nicht ausgewählt ist, wählen Sie ihn aus. 

1. Wählen Sie den **Test** aus, um den Test auszuführen. 

Nachdem Sie den Test ausgeführt haben, sollten Sie einen Abschnitt `-- Consolidated Output --` in den **Funktionsprotokollen** sehen, der eine Liste aller enthaltenen `sample-annotations.json`-Anmerkungen enthält.