

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.

# Verwendung von Amazon OpenSearch Service-Resolvern in AWS AppSync
<a name="tutorial-elasticsearch-resolvers"></a>

**Anmerkung**  
Wir unterstützen jetzt hauptsächlich die APPSYNC\$1JS-Laufzeit und ihre Dokumentation. [Bitte erwägen Sie, die APPSYNC\$1JS-Laufzeit und ihre Anleitungen hier zu verwenden.](https://docs.aws.amazon.com/appsync/latest/devguide/tutorials-js.html)

AWS AppSync unterstützt die Nutzung von Amazon OpenSearch Service von Domains aus, die Sie in Ihrem eigenen AWS Konto bereitgestellt haben, sofern sie nicht in einer VPC existieren. Nachdem Ihre Domänen bereitgestellt wurden, können Sie sich über eine Datenquelle mit ihnen verbinden. Zu diesem Zeitpunkt können Sie auch einen Resolver im Schema konfigurieren, um GraphQL-Operationen, wie z. B. Abfragen, Mutationen und Abonnements, auszuführen. Diese Anleitung führt Sie durch einige häufig auftretende Beispiele.

Weitere Informationen finden Sie in der [Resolver Mapping Template](resolver-mapping-template-reference-elasticsearch.md#aws-appsync-resolver-mapping-template-reference-elasticsearch) Reference für. OpenSearch

## One-Click-Setup
<a name="one-click-setup"></a>

Um automatisch einen GraphQL-Endpunkt AWS AppSync mit konfiguriertem Amazon OpenSearch Service einzurichten, können Sie diese AWS CloudFormation Vorlage verwenden:

[https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/elasticsearch/appsynces.yml](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/elasticsearch/appsynces.yml)

Nach Abschluss der AWS CloudFormation Bereitstellung können Sie direkt mit der [Ausführung von GraphQL-Abfragen und -Mutationen fortfahren](#tutorial-elasticsearch-resolvers-perform-queries-mutations).

## Erstellen Sie eine neue OpenSearch Dienstdomäne
<a name="create-a-new-es-domain"></a>

Um mit diesem Tutorial beginnen zu können, benötigen Sie eine bestehende OpenSearch Dienstdomäne. Wenn Sie noch keine haben, können Sie das folgende Bespiel verwenden. Beachten Sie, dass es bis zu 15 Minuten dauern kann, bis eine OpenSearch Dienstdomäne erstellt ist, bevor Sie mit der Integration in eine AWS AppSync Datenquelle fortfahren können.

```
aws cloudformation create-stack --stack-name AppSyncOpenSearch \
--template-url https://s3.us-west-2.amazonaws.com/awsappsync/resources/elasticsearch/ESResolverCFTemplate.yaml \
--parameters ParameterKey=OSDomainName,ParameterValue=ddtestdomain ParameterKey=Tier,ParameterValue=development \
--capabilities CAPABILITY_NAMED_IAM
```

Sie können den folgenden AWS CloudFormation Stack in der Region USA West 2 (Oregon) in Ihrem AWS Konto starten:

 [https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/elasticsearch/ESResolverCFTemplate.yaml](https://console.aws.amazon.com/cloudformation/home?region=us-west-2#/stacks/new?templateURL=https://s3.us-west-2.amazonaws.com/awsappsync/resources/elasticsearch/ESResolverCFTemplate.yaml)

## Konfigurieren Sie die Datenquelle für den OpenSearch Service
<a name="configure-data-source-for-es"></a>

Nachdem die OpenSearch Service-Domain erstellt wurde, navigieren Sie zu Ihrer AWS AppSync GraphQL-API und wählen Sie die Registerkarte **Datenquellen**. Wählen Sie **Neu** und geben Sie einen benutzerfreundlichen Namen für die Datenquelle ein, z. B. „oss“. Wählen Sie dann ** OpenSearch Amazon-Domain** als **Datenquellentyp**, wählen Sie die entsprechende Region aus, und Ihre OpenSearch Service-Domain sollte aufgeführt sein. Nachdem Sie sie ausgewählt haben, können Sie entweder eine neue Rolle erstellen und ihnen AWS AppSync die entsprechenden Berechtigungen zuweisen, oder Sie können eine bestehende Rolle auswählen, für die die folgende Inline-Richtlinie gilt:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "Stmt1234234",
            "Effect": "Allow",
            "Action": [
                "es:ESHttpDelete",
                "es:ESHttpHead",
                "es:ESHttpGet",
                "es:ESHttpPost",
                "es:ESHttpPut"
            ],
            "Resource": [
                "arn:aws:es:us-east-1:111122223333:domain/democluster/*"
            ]
        }
    ]
}
```

------

Sie müssen außerdem eine Vertrauensbeziehung AWS AppSync für diese Rolle einrichten mit:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service": "appsync.amazonaws.com"
            },
            "Action": "sts:AssumeRole"
        }
    ]
}
```

------

Darüber hinaus hat die OpenSearch Service-Domain ihre eigene **Zugriffsrichtlinie**, die Sie über die Amazon OpenSearch Service-Konsole ändern können. Sie müssen eine Richtlinie hinzufügen, die der folgenden ähnelt und die entsprechenden Aktionen und Ressourcen für die OpenSearch Service-Domain enthält. Beachten Sie, dass der **Principal** die AppSync Datenquellenrolle sein wird. Wenn Sie diese Rolle von der Konsole erstellen lassen, finden Sie diese Rolle in der IAM-Konsole.

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "AWS": "arn:aws:iam::111122223333:role/service-role/APPSYNC_DATASOURCE_ROLE"
            },
            "Action": [
                "es:ESHttpDelete",
                "es:ESHttpHead",
                "es:ESHttpGet",
                "es:ESHttpPost",
                "es:ESHttpPut"
            ],
            "Resource": "arn:aws:es:us-east-1:111122223333:domain/DOMAIN_NAME/*"
        }
    ]
}
```

------

## Verbinden eines Resolvers
<a name="connecting-a-resolver"></a>

Nachdem die Datenquelle nun mit Ihrer OpenSearch Service-Domain verbunden ist, können Sie sie mit einem Resolver mit Ihrem GraphQL-Schema verbinden, wie im folgenden Beispiel gezeigt:

```
 schema {
   query: Query
   mutation: Mutation
 }

 type Query {
   getPost(id: ID!): Post
   allPosts: [Post]
 }

 type Mutation {
   addPost(id: ID!, author: String, title: String, url: String, ups: Int, downs: Int, content: String): AWSJSON
 }

type Post {
  id: ID!
  author: String
  title: String
  url: String
  ups: Int
  downs: Int
  content: String
}
...
```

Beachten Sie, dass es einen benutzerdefinierten `Post`-Typ mit einem `id`-Feld gibt. In den folgenden Beispielen gehen wir davon aus, dass es einen Prozess gibt (der automatisiert werden kann), um diesen Typ in Ihre OpenSearch Service-Domain einzufügen, der einem Pfadstamm von zugeordnet würde`/post/_doc`, wo sich der Index `post` befindet. Von diesem Stammpfad aus können Sie einzelne Dokumente, Platzhaltersuchen mit `/id/post*` oder Suchen in mehreren Dokumenten mit dem Pfad von durchführen. `/post/_search` Wenn Sie beispielsweise einen anderen Typ haben`User`, können Sie Dokumente unter einem neuen Index namens `user` indexieren und dann Suchen mit dem **Pfad** von durchführen. `/user/_search` 

Ändern Sie im Schema-Editor in der AWS AppSync Konsole das vorherige `Posts` Schema, sodass es eine `searchPosts` Abfrage enthält:

```
type Query {
  getPost(id: ID!): Post
  allPosts: [Post]
  searchPosts: [Post]
}
```

Speichern Sie das Schema. Wählen Sie auf der rechten Seite unter `searchPosts` die Option **Resolver anfügen (Attach resolver)** aus. Wählen Sie im **Menü Aktion** die Option **Laufzeit aktualisieren** und anschließend **Unit Resolver (nur VTL**) aus. Wählen Sie dann Ihre OpenSearch Service-Datenquelle aus. Wählen Sie im Bereich **Zuweisungsvorlage für Anforderungen (request mapping template)** die Dropdown-Liste für **Abfrageposten (Query posts)** aus, um eine Basisvorlage zu erhalten. Ändern Sie den `path` so ab, dass er `/post/_search` anzeigt. Sie sollte wie folgt aussehen:

```
{
    "version":"2017-02-28",
    "operation":"GET",
    "path":"/post/_search",
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "from":0,
            "size":50
        }
    }
}
```

Dabei wird davon ausgegangen, dass das obige Schema Dokumente enthält, die in OpenSearch Service unter dem `post` Feld indexiert wurden. Wenn Sie Ihre Daten anders strukturieren, müssen Sie eine entsprechende Anpassung durchführen.

Im Abschnitt **Antwortzuordnungsvorlage** müssen Sie den entsprechenden `_source` Filter angeben, wenn Sie die Datenergebnisse einer OpenSearch Serviceabfrage abrufen und in GraphQL übersetzen möchten. Verwenden Sie die folgende Vorlage:

```
[
    #foreach($entry in $context.result.hits.hits)
    #if( $velocityCount > 1 ) , #end
    $utils.toJson($entry.get("_source"))
    #end
]
```

## Ändern Ihrer Suchvorgänge
<a name="modifying-your-searches"></a>

Die vorherige Zuweisungsvorlage für Anforderungen führt eine einfache Abfrage aller Datensätze aus. Angenommen, Sie möchten nach einem bestimmten Autor suchen. Nehmen wir darüber hinaus noch an, Sie möchten, dass dieser Autor in Ihrer GraphQL-Abfrage als Argument definiert ist. Fügen Sie nun im Schema-Editor der AWS AppSync-Konsole eine `allPostsByAuthor`-Abfrage hinzu:

```
type Query {
  getPost(id: ID!): Post
  allPosts: [Post]
  allPostsByAuthor(author: String!): [Post]
  searchPosts: [Post]
}
```

Wählen Sie nun **Attach Resolver** und wählen Sie die OpenSearch Service-Datenquelle aus. Verwenden Sie jedoch das folgende Beispiel in der **Antwortzuordnungsvorlage**:

```
{
    "version":"2017-02-28",
    "operation":"GET",
    "path":"/post/_search",
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "from":0,
            "size":50,
            "query":{
                "match" :{
                    "author": $util.toJson($context.arguments.author)
                }
            }
        }
    }
}
```

Beachten Sie, dass der `body` mit einer Begriffsabfrage für das `author`-Feld ausgefüllt wurde und vom Client als Argument übergeben wurde. Sie könnten optional bereits ausgefüllte Informationen, wie z. B. einen Standardtext, oder sogar andere [Dienstprogramme](resolver-context-reference.md#aws-appsync-resolver-mapping-template-context-reference) verwenden.

Wenn Sie diesen Resolver verwenden möchten, füllen Sie die **Zuweisungsvorlage für Antworten** mit den gleichen Informationen aus, wie im vorherigen Beispiel gezeigt.

## Daten zum OpenSearch Dienst hinzufügen
<a name="adding-data-to-es"></a>

Möglicherweise möchten Sie Ihrer OpenSearch Service-Domain aufgrund einer GraphQL-Mutation Daten hinzufügen. Hierbei handelt es sich um einen äußerst effektiven Mechanismus für Suchvorgänge und andere Zwecke. Da Sie GraphQL-Abonnements verwenden können, um [Ihre Daten in Echtzeit zu erstellen](aws-appsync-real-time-data.md), dient es als Mechanismus, um Clients über Aktualisierungen von Daten in Ihrer OpenSearch Service-Domain zu informieren.

Kehren Sie zur **Schemaseite** in der AWS AppSync Konsole zurück und wählen Sie **Attach Resolver** für die Mutation aus. `addPost()` Wählen Sie erneut die OpenSearch Service-Datenquelle aus und verwenden Sie die folgende **Antwortzuordnungsvorlage** für das `Posts` Schema:

```
{
    "version":"2017-02-28",
    "operation":"PUT",
    "path": $util.toJson("/post/_doc/$context.arguments.id"),
    "params":{
        "headers":{},
        "queryString":{},
        "body":{
            "id": $util.toJson($context.arguments.id),
            "author": $util.toJson($context.arguments.author),
            "ups": $util.toJson($context.arguments.ups),
            "downs": $util.toJson($context.arguments.downs),
            "url": $util.toJson($context.arguments.url),
            "content": $util.toJson($context.arguments.content),
            "title": $util.toJson($context.arguments.title)
        }
    }
}
```

Wie zuvor ist dies nur ein Beispiel dafür, wie Ihre Daten strukturiert sein könnten. Wenn Sie über andere Feldnamen oder Indizes verfügen, müssen Sie den `path` und `body` entsprechend anpassen. Dieses Beispiel zeigt auch, wie Sie `$context.arguments` verwenden, um die Vorlage mit den GraphQL-Mutationsargumenten zu füllen.

Bevor Sie fortfahren, verwenden Sie die folgende Antwortzuordnungsvorlage, die das Ergebnis der Mutationsoperation oder Fehlerinformationen als Ausgabe zurückgibt:

```
#if($context.error)
    $util.toJson($ctx.error)
#else
    $util.toJson($context.result)
#end
```

## Abrufen eines einzelnen Dokuments
<a name="retrieving-a-single-document"></a>

Sofern Sie die `getPost(id:ID)`-Abfrage im Schema verwenden möchten, um ein einzelnes Dokument zurückzugeben, suchen Sie diese Abfrage im Schema-Editor der AWS AppSync-Konsole und wählen Sie **Attach resolver (Resolver anfügen)** aus. Wählen Sie erneut die OpenSearch Service-Datenquelle aus und verwenden Sie die folgende Zuordnungsvorlage:

```
{
    "version":"2017-02-28",
    "operation":"GET",
    "path": $util.toJson("post/_doc/$context.arguments.id"),
    "params":{
        "headers":{},
        "queryString":{},
        "body":{}
    }
}
```

Da der oben genannte `path` das `id`-Argument ohne Text verwendet, wird auf diese Weise ein einzelnes Dokument zurückgegeben. Jedoch müssen Sie die folgende Zuweisungsvorlage für Antworten verwenden, da Sie jetzt ein einzelnes Element und keine Liste zurückgeben:

```
$utils.toJson($context.result.get("_source"))
```

## Ausführen von Abfragen und Mutationen
<a name="tutorial-elasticsearch-resolvers-perform-queries-mutations"></a>

Sie sollten jetzt in der Lage sein, GraphQL-Operationen für Ihre OpenSearch Service-Domain durchzuführen. Navigieren Sie zur Registerkarte **Abfragen** der AWS AppSync Konsole und fügen Sie einen neuen Datensatz hinzu:

```
mutation addPost {
    addPost (
        id:"12345"
        author: "Fred"
        title: "My first book"
        content: "This will be fun to write!"
        url: "publisher website",
        ups: 100,
        downs:20 
       )
}
```

Sie werden das Ergebnis der Mutation auf der rechten Seite sehen. In ähnlicher Weise können Sie jetzt eine `searchPosts` Abfrage für Ihre OpenSearch Service-Domain ausführen:

```
query searchPosts {
    searchPosts {
        id
        title
        author
        content
    }
}
```

## Bewährte Methoden
<a name="best-practices"></a>
+ OpenSearch Der Dienst sollte zum Abfragen von Daten dienen, nicht als primäre Datenbank. Möglicherweise möchten Sie OpenSearch Service in Verbindung mit Amazon DynamoDB verwenden, wie unter [Kombinieren von GraphQL-Resolvern](tutorial-combining-graphql-resolvers.md#aws-appsync-tutorial-combining-graphql-resolvers) beschrieben.
+ Gewähren Sie nur Zugriff auf Ihre Domain, indem Sie der AWS AppSync Servicerolle den Zugriff auf den Cluster gestatten.
+ Sie können mit dieser Entwicklung klein anfangen, indem Sie zunächst nur den preisgünstigsten Cluster verwenden, und später während der Produktion zu einem größeren Cluster überwechseln, der über eine hohe Verfügbarkeit verfügt.