

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.

# Zusammenführen APIs AWS AppSync
<a name="merged-api"></a>

Wenn der Einsatz von GraphQL innerhalb eines Unternehmens zunimmt, können Kompromisse zwischen API ease-of-use - und API-Entwicklungsgeschwindigkeit entstehen. Einerseits setzen AWS AppSync Unternehmen GraphQL ein, um die Anwendungsentwicklung zu vereinfachen. Dies bietet Entwicklern eine flexible API, mit der sie mit einem einzigen Netzwerkaufruf sicher auf Daten aus einer oder mehreren Datendomänen zugreifen, diese bearbeiten und kombinieren können. Andererseits möchten Teams innerhalb einer Organisation, die für die verschiedenen Datendomänen verantwortlich sind, die zu einem einzigen GraphQL-API-Endpunkt zusammengefasst sind, möglicherweise die Möglichkeit haben, API-Updates unabhängig voneinander zu erstellen, zu verwalten und bereitzustellen. Dies erhöht ihre Entwicklungsgeschwindigkeit. 

Um dieses Problem zu lösen, ermöglicht die AWS AppSync APIs Merged-Funktion es Teams aus verschiedenen Datendomänen, unabhängig voneinander zu erstellen und bereitzustellen AWS AppSync APIs (z. B. GraphQL-Schemas, Resolver, Datenquellen und Funktionen), die dann zu einer einzigen, zusammengeführten API kombiniert werden können. Dies gibt Unternehmen die Möglichkeit, eine einfach zu verwendende, domänenübergreifende API zu verwalten, und bietet den verschiedenen Teams, die an dieser API beteiligt sind, die Möglichkeit, API-Updates schnell und unabhängig voneinander vorzunehmen.

Das folgende Diagramm zeigt den zusammengeführten API-Workflow:

![\[Das Diagramm zeigt den zusammengeführten API-Workflow, bei dem mehrere Quellen APIs zu einem einzigen zusammengeführten API-Endpunkt kombiniert wurden\]](http://docs.aws.amazon.com/de_de/appsync/latest/devguide/images/merged-api-workflow.png)


Mithilfe von APIs Merged können Unternehmen die Ressourcen mehrerer, unabhängiger Quellen AWS AppSync APIs in einen einzigen AWS AppSync zusammengeführten API-Endpunkt importieren. Zu diesem Zweck AWS AppSync können Sie eine Quellenliste erstellen und anschließend alle mit der Quelle verknüpften Metadaten AWS AppSync APIs, APIs einschließlich Schema, Typen, Datenquellen, Resolver und Funktionen, zu einer neuen AWS AppSync zusammengeführten API zusammenführen.

Bei Zusammenführungen besteht die Möglichkeit, dass aufgrund von Inkonsistenzen im Inhalt der Quell-API-Daten, wie z. B. Typbenennungskonflikte beim Kombinieren mehrerer Schemas, ein Zusammenführungskonflikt auftritt. Für einfache Anwendungsfälle, in denen keine Definitionen in der Quelle in APIs Konflikt stehen, müssen die Quell-API-Schemas nicht geändert werden. Die daraus resultierende Merged API importiert einfach alle Typen, Resolver, Datenquellen und Funktionen aus der Originalquelle. AWS AppSync APIs In komplexen Anwendungsfällen, in denen Konflikte auftreten, users/teams müssen sie die Konflikte auf verschiedene Weise lösen. AWS AppSync stellt Benutzern mehrere Tools und Beispiele zur Verfügung, mit denen Zusammenführungskonflikte reduziert werden können. 

Nachfolgende Zusammenführungen, die in AWS AppSync konfiguriert sind, übertragen die in der Quelle vorgenommenen Änderungen APIs an die zugehörige zusammengeführte API.

## Zusammengeführt APIs und Verbund
<a name="merged-api-federation"></a>

In der GraphQL-Community gibt es viele Lösungen und Muster, um GraphQL-Schemas zu kombinieren und die Teamzusammenarbeit über einen gemeinsamen Graphen zu ermöglichen. AWS AppSync Merged APIs verwendet bei der Schemakomposition einen *Build-Time-Ansatz*, bei dem die Quelldateien in einer separaten, zusammengeführten API zusammengefasst APIs werden. Ein alternativer Ansatz besteht darin, einen *Runtime-Router* über mehrere Quell APIs - oder Untergraphen zu verteilen. Bei diesem Ansatz empfängt der Router eine Anfrage, verweist auf ein kombiniertes Schema, das er als Metadaten verwaltet, erstellt einen Anforderungsplan und verteilt dann die Anforderungselemente auf die zugrunde liegenden Untergraphen/Server. In der folgenden Tabelle wird der Build-Time-Ansatz der AWS AppSync zusammengeführten API mit routerbasierten Laufzeitansätzen für die GraphQL-Schemakomposition verglichen:


|  |  |  | 
| --- |--- |--- |
| Feature | AppSync Zusammengeführte API | Router-basierte Lösungen | 
| Unterdiagramme werden unabhängig voneinander verwaltet | Ja | Ja | 
| Untergraphen können unabhängig voneinander adressiert werden | Ja | Ja | 
| Automatisierte Schemazusammenstellung | Ja | Ja | 
| Automatisierte Konflikterkennung | Ja | Ja | 
| Konfliktlösung über Schemadirektiven | Ja | Ja | 
| Unterstützte Subgraph-Server | AWS AppSync\$1 | Variiert | 
| Komplexität des Netzwerks | Eine einzige, zusammengeführte API bedeutet keine zusätzlichen Netzwerk-Hops. | Eine mehrschichtige Architektur erfordert die Planung und Delegierung von Abfragen, das Parsen und Serialisieren/Deserialisieren von Unterabfragen sowie Referenz-Resolver in Untergraphen, um Verknüpfungen durchzuführen. | 
| Unterstützung der Beobachtbarkeit | Integrierte Überwachung, Protokollierung und Rückverfolgung. Ein einziger, zusammengeführter API-Server bedeutet vereinfachtes Debugging. | Build-your-own Beobachtbarkeit über den Router und alle zugehörigen Subgraph-Server hinweg. Komplexes Debugging auf verteilten Systemen. | 
| Unterstützung bei der Autorisierung | Integrierte Unterstützung für mehrere Autorisierungsmodi. | Build-your-own Autorisierungsregeln. | 
| Kontenübergreifende Sicherheit | Integrierte Unterstützung für AWS cloudübergreifende Kontozuordnungen. | Build-your-own Sicherheitsmodell. | 
| Unterstützung für Abonnements | Ja | Nein | 

\$1 AWS AppSync Zusammengeführt APIs kann nur mit der AWS AppSync Quelle verknüpft werden APIs. Wenn Sie Unterstützung für die Schemakomposition zwischen AWS AppSync und ohne AWS AppSync Unterdiagramme benötigen, können Sie ein oder mehrere AWS AppSync GraphQL Merged APIs zu einer and/or routerbasierten Lösung verbinden. Im Referenz-Blog finden Sie beispielsweise Informationen zum Hinzufügen AWS AppSync APIs als Untergraph mithilfe einer routerbasierten Architektur mit Apollo Federation v2: [Apollo GraphQL](https://aws.amazon.com/blogs/mobile/federation-appsync-subgraph/) Federation with. AWS AppSync

**Topics**
+ [Zusammengeführt APIs und Verbund](#merged-api-federation)
+ [Konfliktlösung zusammengeführter APIs](#merged-api-conflict-resolution)
+ [Schemas konfigurieren](#configuring-schemas-merged-api)
+ [Autorisierungsmodi konfigurieren](#configuring-authorization-merged-api)
+ [Konfiguration von Ausführungsrollen](#execution-roles-merged-api)
+ [Konfiguration von Cross-Account-Zusammengeführt mit APIs AWS RAM](#cross-account-merged-api)
+ [Zusammenführen](#merges)
+ [Zusätzliche Unterstützung für Merged APIs](#merge-api-additional-support)
+ [Einschränkungen bei der zusammengeführten API](#merged-api-limits)
+ [Überlegungen zur zusammengeführten API](#merged-api-considerations)
+ [Zusammengeführt erstellen APIs](#creating-merged-api)

## Konfliktlösung zusammengeführter APIs
<a name="merged-api-conflict-resolution"></a>

 AWS AppSync Stellt Benutzern im Falle eines Zusammenführungskonflikts verschiedene Tools und Beispiele zur Verfügung, um die Probleme zu beheben.

### Richtlinien für zusammengeführte API-Schemas
<a name="merged-api-schema-directive"></a>

 AWS AppSync hat mehrere GraphQL-Direktiven eingeführt, die verwendet werden können, um Konflikte zwischen den Quellen APIs zu reduzieren oder zu lösen:
+ *@canonical*: Diese Direktive legt den Vorrang von Typen/Feldern mit ähnlichen Namen und Daten fest. Wenn zwei oder mehr Quellen denselben GraphQL-Typ oder dasselbe GraphQL-Feld APIs haben, APIs kann eine von ihnen ihren Typ oder ihr Feld als *kanonisch* annotieren, was bei der Zusammenführung priorisiert wird. Konflikte types/fields , die in anderen Quellen nicht mit dieser Direktive annotiert sind, werden beim Zusammenführen ignoriert. APIs 
+ *@hidden*: Diese Direktive kapselt bestimmte, um sie aus types/fields dem Zusammenführungsprozess zu entfernen. Teams möchten möglicherweise bestimmte Typen oder Operationen in der Quell-API entfernen oder verbergen, sodass nur interne Kunden auf bestimmte typisierte Daten zugreifen können. Wenn diese Direktive angehängt ist, werden Typen oder Felder nicht in der zusammengeführten API zusammengeführt. 
+ *@renamed*: Diese Direktive ändert die Namen von types/fields , um Namenskonflikte zu reduzieren. Es gibt Situationen, in denen verschiedene denselben Typ oder denselben Feldnamen APIs haben. Sie müssen jedoch alle im zusammengeführten Schema verfügbar sein. Eine einfache Möglichkeit, sie alle in die zusammengeführte API aufzunehmen, besteht darin, das Feld in etwas Ähnliches, aber anderes umzubenennen. 

Sehen Sie sich das folgende Beispiel an, um zu zeigen, was die Utility-Schema-Direktiven bieten:

Gehen wir in diesem Beispiel davon aus, dass wir zwei Quellen zusammenführen möchten APIs. Wir erhalten zwei Schemas, mit denen Beiträge erstellt und abgerufen werden können (z. B. Kommentarbereich oder Beiträge in sozialen Netzwerken). Unter der Annahme, dass sich die Typen und Felder sehr ähnlich sind, besteht bei einer Zusammenführung ein hohes Konfliktpotenzial. Die folgenden Ausschnitte zeigen die Typen und Felder der einzelnen Schemas.

Die erste Datei mit dem Namen *Source1.graphQL ist ein GraphQL-Schema*, das es einem Benutzer ermöglicht, mithilfe der Mutation zu erstellen`Posts`. `putPost` Jede `Post` enthält einen Titel und eine ID. Die ID wird verwendet`User`, um auf die Informationen des Posters (E-Mail und Adresse) und auf die `Message` Payload (Inhalt) zu verweisen. Der `User` Typ ist mit dem *@canonical* -Tag annotiert.

```
# This snippet represents a file called Source1.graphql

type Mutation {
    putPost(id: ID!, title: String!): Post
}

type Post {
    id: ID!
    title: String!
}

type Message {
   id: ID!
   content: String
}

type User @canonical {
   id: ID!
   email: String!
   address: String!
}

type Query {
    singlePost(id: ID!): Post
    getMessage(id: ID!): Message
}
```

*Die zweite Datei namens *Source2.graphQL ist ein GraphQL-Schema*, das sehr ähnliche Dinge tut wie Source1.graphql.* Beachten Sie jedoch, dass die Felder der einzelnen Typen unterschiedlich sind. Beim Zusammenführen dieser beiden Schemas kommt es aufgrund dieser Unterschiede zu Zusammenführungskonflikten. 

Beachten Sie auch, dass *Source2.graphql* auch mehrere Direktiven enthält, um diese Konflikte zu reduzieren. Der `Post` Typ ist mit einem *@hidden -Tag versehen, um sich während des Zusammenführungsvorgangs* selbst zu verschleiern. Der `Message` Typ ist mit dem *@renamed* -Tag versehen, in den der Typname geändert werden kann, falls es zu `ChatMessage` einem Namenskonflikt mit einem anderen Typ kommt. `Message`

```
# This snippet represents a file called Source2.graphql

type Post @hidden  {
    id: ID!
    title: String!
    internalSecret: String!
}

type Message @renamed(to: "ChatMessage") {
   id: ID!
   chatId: ID!
   from: User!
   to: User!
}

# Stub user so that we can link the canonical definition from Source1
type User {
   id: ID!
}

type Query {
    getPost(id: ID!): Post
    getMessage(id: ID!): Message @renamed(to: "getChatMessage")
}
```

Wenn die Zusammenführung erfolgt, ergibt das Ergebnis die folgende `MergedSchema.graphql` Datei:

```
# This snippet represents a file called MergedSchema.graphql

type Mutation {
    putPost(id: ID!, title: String!): Post
}

# Post from Source2 was hidden so only uses the Source1 definition. 
type Post {
    id: ID!
    title: String!
}

# Renamed from Message to resolve the conflict
type ChatMessage {
   id: ID!
   chatId: ID!
   from: User!
   to: User!
}

type Message {
   id: ID!
   content: String
}

# Canonical definition from Source1
type User {
   id: ID!
   email: String!
   address: String!
}

type Query {
    singlePost(id: ID!): Post
    getMessage(id: ID!): Message
    
    # Renamed from getMessage
    getChatMessage(id: ID!): ChatMessage
}
```

Bei der Zusammenführung sind mehrere Dinge passiert:
+ *Der `User` Typ aus *Source1.graphql hatte aufgrund* der @canonical -Annotation Vorrang vor dem `User` von *Source2.graphql*.*
+ *Der `Message` Typ aus Source1.graphql wurde in die Zusammenführung aufgenommen.* Bei dem `Message` von *Source2.graphql* gab es jedoch einen Namenskonflikt. Aufgrund seiner *@renamed* -Annotation wurde es ebenfalls in die Zusammenführung aufgenommen, jedoch mit dem alternativen Namen. `ChatMessage`
+ Der `Post` Typ aus *Source1.graphql* war enthalten, der `Post` Typ aus *Source2.graphql* jedoch nicht. Normalerweise würde es bei diesem Typ einen Konflikt geben, aber da der `Post` Typ aus *Source2.graphql* eine *@hidden* -Annotation hatte, wurden seine Daten verschleiert und nicht in die Zusammenführung aufgenommen. Dies führte zu keinen Konflikten.
+ Der `Query` Typ wurde aktualisiert, sodass er den Inhalt beider Dateien enthält. Eine `GetMessage` Abfrage wurde jedoch `GetChatMessage` aufgrund der Direktive in umbenannt. Dadurch wurde der Namenskonflikt zwischen den beiden Abfragen mit demselben Namen behoben.

Es kommt auch vor, dass einem widersprüchlichen Typ keine Direktiven hinzugefügt wurden. Hier beinhaltet der zusammengeführte Typ die Vereinigung aller Felder aus allen Quelldefinitionen dieses Typs. Sehen Sie sich dazu das folgende Beispiel an:

Dieses Schema, *Source1.graphQL* genannt, ermöglicht das Erstellen und Abrufen. `Posts` Die Konfiguration ähnelt dem vorherigen Beispiel, enthält jedoch weniger Informationen.

```
# This snippet represents a file called Source1.graphql

type Mutation {
    putPost(id: ID!, title: String!): Post
}

type Post  {
    id: ID!
    title: String!
}

type Query {
    getPost(id: ID!): Post
}
```

Dieses Schema mit dem Namen *Source2.graphql* ermöglicht das Erstellen und Abrufen `Reviews` (z. B. Filmbewertungen oder Restaurantkritiken). `Reviews`sind mit demselben ID-Wert `Post` verknüpft. Zusammen enthalten sie den Titel, die Beitrags-ID und die Nutzdatennachricht des vollständigen Bewertungsbeitrags.

Beim Zusammenführen wird es zu einem Konflikt zwischen den beiden `Post` Typen kommen. Da es keine Anmerkungen zur Lösung dieses Problems gibt, besteht das Standardverhalten darin, eine Vereinigung der widersprüchlichen Typen durchzuführen.

```
# This snippet represents a file called Source2.graphql

type Mutation {
    putReview(id: ID!, postId: ID!, comment: String!): Review
}

type Post  {
    id: ID!
    reviews: [Review]
}

type Review {
   id: ID!
   postId: ID!
   comment: String!
}

type Query {
    getReview(id: ID!): Review
}
```

Wenn die Zusammenführung erfolgt, ergibt das Ergebnis die folgende Datei: `MergedSchema.graphql`

```
# This snippet represents a file called MergedSchema.graphql

type Mutation {
    putReview(id: ID!, postId: ID!, comment: String!): Review
    putPost(id: ID!, title: String!): Post
}

type Post  {
    id: ID!
    title: String!
    reviews: [Review]
}

type Review {
   id: ID!
   postId: ID!
   comment: String!
}

type Query {
    getPost(id: ID!): Post
    getReview(id: ID!): Review
}
```

Bei der Zusammenführung sind mehrere Dinge passiert:
+ Der `Mutation` Typ hatte keine Konflikte und wurde zusammengeführt.
+ Die `Post` Typfelder wurden im Rahmen einer Union-Operation kombiniert. Beachten Sie, wie durch die Vereinigung der beiden Elemente ein Single `id``title`, ein und ein Single entstanden sind`reviews`.
+ Für den `Review` Typ gab es keine Konflikte und er wurde zusammengeführt.
+ Der `Query` Typ hatte keine Konflikte und wurde zusammengeführt.

### Verwaltung von Resolvern auf gemeinsam genutzten Typen
<a name="resolvers-shared-types-merged-api"></a>

Stellen Sie sich im obigen Beispiel den Fall vor, dass *Source1.graphql* einen Unit-Resolver konfiguriert hat`Query.getPost`, der eine DynamoDB-Datenquelle mit dem Namen verwendet. `PostDatasource` Dieser Resolver gibt das und eines Typs zurück. `id` `title` `Post` Stellen Sie sich nun vor, dass *Source2.graphql* einen Pipeline-Resolver konfiguriert hat`Post.reviews`, auf dem zwei Funktionen ausgeführt werden. `Function1`hat eine `None` Datenquelle angehängt, um benutzerdefinierte Autorisierungsprüfungen durchzuführen. `Function2`hat eine DynamoDB-Datenquelle angehängt, um die `reviews` Tabelle abzufragen.

```
query GetPostQuery {
    getPost(id: "1") {
        id,
        title,
        reviews
    }
}
```

Wenn die obige Abfrage von einem Client für den Merged API-Endpunkt ausgeführt wird, führt der AWS AppSync Dienst zunächst den Unit-Resolver für `Query.getPost` from aus`Source1`, der DynamoDB aufruft `PostDatasource` und die Daten von DynamoDB zurückgibt. Anschließend führt er den `Post.reviews` Pipeline-Resolver aus, der `Function1` eine benutzerdefinierte Autorisierungslogik ausführt und die Bewertungen `Function2` zurückgibt, die in gefunden wurden. `id` `$context.source` Der Dienst verarbeitet die Anfrage als einen einzigen GraphQL-Lauf, und für diese einfache Anfrage ist nur ein einziges Anforderungstoken erforderlich.

### Verwaltung von Resolverkonflikten bei gemeinsam genutzten Typen
<a name="resolver-conflict-shared-type-merged-api"></a>

Stellen Sie sich den folgenden Fall vor, `Query.getPost` in dem wir auch einen Resolver auf implementieren, um mehrere Felder gleichzeitig bereitzustellen, die über den Feld-Resolver in hinausgehen. `Source2` *Source1.graphql könnte* so aussehen:

```
# This snippet represents a file called Source1.graphql

type Post  {
    id: ID!
    title: String!
    date: AWSDateTime!
}

type Query {
    getPost(id: ID!): Post
}
```

*Source2.graphql könnte* so aussehen:

```
# This snippet represents a file called Source2.graphql

type Post  {
  id: ID!
  content: String!
  contentHash: String! 
  author: String! 
}

type Query {
    getPost(id: ID!): Post
}
```

Der Versuch, diese beiden Schemas zusammenzuführen, führt zu einem Zusammenführungsfehler, da AWS AppSync Merged APIs nicht zulässt, dass mehrere Quell-Resolver an dasselbe Feld angehängt werden. Um diesen Konflikt zu lösen, können Sie ein Feldauflösungsmuster implementieren, bei dem *Source2.graphql* einen separaten Typ hinzufügen müsste, der die Felder, die es besitzt, vom Typ definiert. `Post` *Im folgenden Beispiel fügen wir einen Typ namens hinzu, der die Inhalts- und Autorenfelder enthält`PostInfo`, die von Source2.graphql aufgelöst werden.* *Source1.graphql* implementiert den an angehängten Resolver`Query.getPost`, wohingegen *Source2.graphql* nun einen Resolver anhängt, um sicherzustellen, dass alle Daten erfolgreich abgerufen werden können: `Post.postInfo`

```
type Post  {
  id: ID!
  postInfo: PostInfo
}

type PostInfo {
   content: String!
   contentHash: String!
   author: String!
}

type Query {
    getPost(id: ID!): Post
}
```

Die Lösung eines solchen Konflikts erfordert zwar, dass die Quell-API-Schemas neu geschrieben werden und die Clients möglicherweise ihre Abfragen ändern müssen. Der Vorteil dieses Ansatzes besteht jedoch darin, dass die Eigentümer der zusammengeführten Resolver für alle Quellteams weiterhin klar sind.

## Schemas konfigurieren
<a name="configuring-schemas-merged-api"></a>

Zwei Parteien sind für die Konfiguration der Schemas verantwortlich, um eine zusammengeführte API zu erstellen:
+ **Besitzer zusammengeführter** APIs — Besitzer zusammengeführter APIs müssen die Autorisierungslogik der zusammengeführten API und erweiterte Einstellungen wie Protokollierung, Tracing, Caching und WAF-Unterstützung konfigurieren.
+ Eigentümer der **assoziierten Quell-API — Besitzer** assoziierter APIs müssen die Schemas, Resolver und Datenquellen konfigurieren, aus denen die zusammengeführte API besteht.

**Da das Schema Ihrer zusammengeführten API aus den Schemas Ihrer verknüpften Quelle erstellt wird APIs, ist es schreibgeschützt.** Das bedeutet, dass Änderungen am Schema in Ihrer Quelle APIs initiiert werden müssen. **In der AWS AppSync Konsole können Sie mithilfe der Dropdownliste über dem Schemafenster zwischen Ihrem zusammengeführten Schema und den einzelnen Schemas der Quelle, die in Ihrer zusammengeführten API APIs enthalten ist, wechseln.**

## Autorisierungsmodi konfigurieren
<a name="configuring-authorization-merged-api"></a>

Zum Schutz Ihrer zusammengeführten API stehen mehrere Autorisierungsmodi zur Verfügung. Weitere Informationen zu den Autorisierungsmodi finden Sie unter [Autorisierung und Authentifizierung](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html). AWS AppSync

Die folgenden Autorisierungsmodi stehen für Merged zur Verfügung APIs:
+  **API-Schlüssel**: Die einfachste Autorisierungsstrategie. Alle Anfragen müssen einen API-Schlüssel unter dem `x-api-key` Anforderungsheader enthalten. Abgelaufene API-Schlüssel werden 60 Tage nach dem Ablaufdatum aufbewahrt. 
+  **AWS Identity and Access Management (IAM): Die AWS IAM-Autorisierungsstrategie** **autorisiert alle Anfragen, die mit Sigv4 signiert sind.** 
+  **Amazon Cognito Cognito-Benutzerpools**: Autorisieren Sie Ihre Benutzer über Amazon Cognito Cognito-Benutzerpools, um eine genauere Kontrolle zu erhalten. 
+  **AWS Lambda Authorizers**: Eine serverlose Funktion, mit der Sie den Zugriff auf Ihre API mithilfe benutzerdefinierter Logik authentifizieren und autorisieren können. AWS AppSync 
+ **OpenID Connect**: Dieser Autorisierungstyp erzwingt OpenID Connect-Token (OIDC), die von einem OIDC-kompatiblen Dienst bereitgestellt werden. Ihre Anwendung kann Benutzer und Berechtigungen nutzen, die von Ihrem OIDC-Anbieter zur Kontrolle des Zugriffs definiert wurden.

Die Autorisierungsmodi einer zusammengeführten API werden vom Eigentümer der zusammengeführten API konfiguriert. Zum Zeitpunkt eines Zusammenführungsvorgangs muss die zusammengeführte API den auf einer Quell-API konfigurierten primären Autorisierungsmodus entweder als eigenen primären Autorisierungsmodus oder als sekundären Autorisierungsmodus enthalten. Andernfalls ist sie inkompatibel und der Zusammenführungsvorgang schlägt mit einem Konflikt fehl. Wenn Multi-Auth-Direktiven in der Quelle verwendet werden APIs, kann der Zusammenführungsprozess diese Direktiven automatisch mit dem vereinheitlichten Endpunkt zusammenführen. Falls der primäre Autorisierungsmodus der Quell-API nicht mit dem primären Autorisierungsmodus der zusammengeführten API übereinstimmt, werden diese Authentifizierungsdirektiven automatisch hinzugefügt, um sicherzustellen, dass der Autorisierungsmodus für die Typen in der Quell-API konsistent ist.

## Konfiguration von Ausführungsrollen
<a name="execution-roles-merged-api"></a>

Wenn Sie eine zusammengeführte API erstellen, müssen Sie eine Servicerolle definieren. Eine AWS Servicerolle ist eine AWS Identity and Access Management (IAM) -Rolle, die von AWS Diensten verwendet wird, um Aufgaben in Ihrem Namen auszuführen.

In diesem Zusammenhang ist es erforderlich, dass Ihre zusammengeführte API Resolver ausführt, die auf Daten aus den in Ihrer Quelle konfigurierten Datenquellen zugreifen. APIs Die dafür erforderliche Servicerolle ist die`mergedApiExecutionRole`, und sie muss über die `appsync:SourceGraphQL` IAM-Berechtigung expliziten Zugriff haben, um Anfragen auf der Quelle auszuführen, die in Ihrer zusammengeführten API APIs enthalten ist. Während der Ausführung einer GraphQL-Anfrage übernimmt der AWS AppSync Dienst diese Dienstrolle und autorisiert die Rolle, die Aktion auszuführen. `appsync:SourceGraphQL`

AWS AppSync unterstützt das Zulassen oder Verweigern dieser Berechtigung für bestimmte Felder der obersten Ebene innerhalb der Anfrage, z. B. wie der IAM-Autorisierungsmodus für IAM funktioniert. APIs Für non-top-level Felder AWS AppSync müssen Sie die Berechtigung für den Quell-API-ARN selbst definieren. Um den Zugriff auf bestimmte non-top-level Felder in der Merged-API einzuschränken, empfehlen wir, eine benutzerdefinierte Logik in Ihrem Lambda zu implementieren oder die Quell-API-Felder mithilfe der *@hidden* -Direktive vor der Merged-API auszublenden. Wenn Sie der Rolle erlauben möchten, alle Datenoperationen innerhalb einer Quell-API auszuführen, können Sie die folgende Richtlinie hinzufügen. Beachten Sie, dass der erste Ressourceneintrag den Zugriff auf alle Felder der obersten Ebene ermöglicht und der zweite Eintrag untergeordnete Resolver behandelt, die für die Quell-API-Ressource selbst autorisieren: 

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow", 
        "Action": [ "appsync:SourceGraphQL"], 
        "Resource": [ 
            "arn:aws:appsync:us-west-2:123456789012:apis/YourSourceGraphQLApiId/*", 
            "arn:aws:appsync:us-west-2:123456789012:apis/YourSourceGraphQLApiId"] 
    }] 
}
```

------

Wenn Sie den Zugriff nur auf ein bestimmtes Feld der obersten Ebene beschränken möchten, können Sie eine Richtlinie wie die folgende verwenden:

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

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [{
        "Effect": "Allow", 
        "Action": [ "appsync:SourceGraphQL"], 
        "Resource": [ 
            "arn:aws:appsync:us-west-2:123456789012:apis/YourSourceGraphQLApiId/types/Query/fields/<Field-1>",
            "arn:aws:appsync:us-west-2:123456789012:apis/YourSourceGraphQLApiId"] 
    }] 
}
```

------

Sie können auch den AWS AppSync Konsolen-API-Erstellungsassistenten verwenden, um eine Servicerolle zu generieren, damit Ihre zusammengeführte API auf Ressourcen zugreifen kann APIs , die in der Quelle konfiguriert sind und sich in demselben Konto wie Ihre zusammengeführte API befinden. Falls sich Ihre Quelle APIs nicht in demselben Konto wie Ihre zusammengeführte API befindet, müssen Sie zunächst Ihre Ressourcen mithilfe von AWS Resource Access Manager (AWS RAM) gemeinsam nutzen. 

## Konfiguration von Cross-Account-Zusammengeführt mit APIs AWS RAM
<a name="cross-account-merged-api"></a>

Wenn Sie eine zusammengeführte API erstellen, können Sie optional Quellen APIs von anderen Konten zuordnen, die über AWS Resource Access Manager (AWS RAM) gemeinsam genutzt wurden. AWS RAM hilft Ihnen dabei, Ihre Ressourcen sicher zwischen AWS Konten, innerhalb Ihrer Organisation oder Organisationseinheiten (OUs) und mit IAM-Rollen und -Benutzern gemeinsam zu nutzen.

AWS AppSync integriert sich AWS RAM in, um die Konfiguration und den Zugriff auf Quellen APIs über mehrere Konten hinweg über eine einzige zusammengeführte API zu unterstützen. AWS RAM ermöglicht es Ihnen, eine gemeinsame Ressourcennutzung oder einen Container mit Ressourcen und den Berechtigungssätzen zu erstellen, die für jede Ressource gemeinsam genutzt werden. Sie können AWS AppSync APIs zu einer Ressourcenfreigabe hinzufügen in AWS RAM. AWS AppSync Stellt innerhalb einer Ressourcenfreigabe drei verschiedene Berechtigungssätze bereit, die einer AWS AppSync API im RAM zugeordnet werden können:

1. `AWSRAMPermissionAppSyncSourceApiOperationAccess`: Der Standard-Berechtigungssatz, der hinzugefügt wird, wenn eine AWS AppSync API gemeinsam genutzt wird, AWS RAM sofern keine andere Berechtigung angegeben ist. Dieser Berechtigungssatz wird für die gemeinsame Nutzung einer AWS AppSync Quell-API mit einem Besitzer einer zusammengeführten API verwendet. Dieser Berechtigungssatz umfasst die Berechtigung für `appsync:AssociateMergedGraphqlApi` die Quell-API sowie die für den Zugriff auf die Quell-API-Ressourcen zur Laufzeit erforderlichen `appsync:SourceGraphQL` Berechtigungen.

1. `AWSRAMPermissionAppSyncMergedApiOperationAccess`: Dieser Berechtigungssatz sollte konfiguriert werden, wenn eine zusammengeführte API mit einem Eigentümer der Quell-API geteilt wird. Dieser Berechtigungssatz gibt der Quell-API die Möglichkeit, die zusammengeführte API zu konfigurieren, einschließlich der Möglichkeit, jede Quelle, die dem Zielprinzipal APIs gehört, der zusammengeführten API zuzuordnen und die Quell-API-Verknüpfungen der zusammengeführten API zu lesen und zu aktualisieren.

1. `AWSRAMPermissionAppSyncAllowSourceGraphQLAccess`: Dieser Berechtigungssatz ermöglicht die Verwendung der `appsync:SourceGraphQL` Berechtigung mit einer AWS AppSync API. Es ist für die gemeinsame Nutzung einer Quell-API mit einem Eigentümer einer zusammengeführten API vorgesehen. Im Gegensatz zum Standardberechtigungssatz für den Zugriff auf Quell-API-Operationen umfasst dieser Berechtigungssatz nur die Laufzeitberechtigung`appsync:SourceGraphQL`. Wenn sich ein Benutzer dafür entscheidet, den Zugriff auf den Vorgang der zusammengeführten API mit einem Eigentümer der Quell-API zu teilen, muss er diese Berechtigung auch von der Quell-API an den Eigentümer der zusammengeführten API weitergeben, um über den Endpunkt der zusammengeführten API Laufzeitzugriff zu erhalten.

AWS AppSync unterstützt auch vom Kunden verwaltete Berechtigungen. Wenn eine der bereitgestellten AWS verwalteten Berechtigungen nicht funktioniert, können Sie Ihre eigene vom Kunden verwaltete Berechtigung erstellen. Kundenverwaltete Berechtigungen sind verwaltete Berechtigungen, die Sie erstellen und verwalten, indem Sie genau angeben, welche Aktionen unter welchen Bedingungen mit gemeinsam genutzten Ressourcen ausgeführt werden können. AWS RAM AWS AppSync ermöglicht es Ihnen, bei der Erstellung Ihrer eigenen Berechtigungen aus den folgenden Aktionen zu wählen:

1. `appsync:AssociateSourceGraphqlApi`

1. `appsync:AssociateMergedGraphqlApi`

1. `appsync:GetSourceApiAssociation`

1. `appsync:UpdateSourceApiAssociation`

1. `appsync:StartSchemaMerge`

1. `appsync:ListTypesByAssociation`

1. `appsync:SourceGraphQL`

Sobald Sie eine Quell-API oder eine zusammengeführte API ordnungsgemäß freigegeben haben AWS RAM und, falls erforderlich, die Einladung zur gemeinsamen Nutzung von Ressourcen akzeptiert wurde, wird sie in der AWS AppSync Konsole angezeigt, wenn Sie die Quell-API-Verknüpfungen auf Ihrer zusammengeführten API erstellen oder aktualisieren. Sie können auch unabhängig von der eingestellten Berechtigung alle AWS AppSync APIs Dateien auflisten, die AWS RAM mit Ihrem Konto geteilt wurden, indem Sie den von bereitgestellten `ListGraphqlApis` Vorgang aufrufen AWS AppSync und den `OTHER_ACCOUNTS` Besitzerfilter verwenden. 

**Anmerkung**  
Für das Teilen über AWS RAM muss der Anrufer AWS RAM die Erlaubnis haben, die `appsync:PutResourcePolicy` Aktion auf jeder API auszuführen, die gemeinsam genutzt wird. 

## Zusammenführen
<a name="merges"></a>

### Zusammenführungen verwalten
<a name="managing-merges"></a>

Zusammengeführt APIs sollen die Teamzusammenarbeit auf einem einheitlichen AWS AppSync Endpunkt unterstützen. Teams können unabhängig voneinander ihre eigene isolierte GraphQL-Quelle APIs im Backend weiterentwickeln, während der AWS AppSync Service die Integration der Ressourcen in den einzigen zusammengeführten API-Endpunkt verwaltet, um Reibungsverluste bei der Zusammenarbeit zu reduzieren und die Entwicklungsvorlaufzeiten zu verkürzen.

### Automatische Zusammenführungen
<a name="auto-merge"></a>

Die mit Ihrer AWS AppSync zusammengeführten API APIs verknüpfte Quelle kann so konfiguriert werden, dass sie automatisch mit der zusammengeführten API zusammengeführt (Auto-Merge) wird, nachdem Änderungen an der Quell-API vorgenommen wurden. Dadurch wird sichergestellt, dass die Änderungen aus der Quell-API immer im Hintergrund an den Endpunkt der zusammengeführten API weitergegeben werden. Jede Änderung am Quell-API-Schema wird in der zusammengeführten API aktualisiert, sofern dadurch kein Mergekonflikt mit einer vorhandenen Definition in der zusammengeführten API entsteht. Wenn das Update in der Quell-API einen Resolver, eine Datenquelle oder eine Funktion aktualisiert, wird auch die importierte Ressource aktualisiert. Wenn ein neuer Konflikt eingeführt wird, der nicht automatisch gelöst werden kann (automatisch gelöst), wird die Aktualisierung des Schemas der zusammengeführten API aufgrund eines nicht unterstützten Konflikts während des Zusammenführungsvorgangs abgelehnt. Die Fehlermeldung ist in der Konsole für jede Quell-API-Zuordnung verfügbar, die den Status hat. `MERGE_FAILED` Sie können die Fehlermeldung auch überprüfen, indem Sie den `GetSourceApiAssociation` Vorgang für eine bestimmte Quell-API-Zuordnung mit dem AWS SDK oder der AWS CLI wie folgt aufrufen:

```
aws appsync get-source-api-association --merged-api-identifier <Merged API ARN> --association-id <SourceApiAssociation id>
```

Dies führt zu einem Ergebnis im folgenden Format:

```
{
    "sourceApiAssociation": {
        "associationId": "<association id>",
        "associationArn": "<association arn>",
        "sourceApiId": "<source api id>",
        "sourceApiArn": "<source api arn>",
        "mergedApiArn": "<merged api arn>",
        "mergedApiId": "<merged api id>",
        "sourceApiAssociationConfig": {
            "mergeType": "MANUAL_MERGE"
        },
        "sourceApiAssociationStatus": "MERGE_FAILED",
        "sourceApiAssociationStatusDetail": "Unable to resolve conflict on object with name title: Merging is not supported for fields with different types."
    }
}
```

### Manuelle Zusammenführungen
<a name="manual-merges"></a>

Die Standardeinstellung für eine Quell-API ist eine manuelle Zusammenführung. Um alle Änderungen zusammenzuführen, die APIs seit der letzten Aktualisierung der zusammengeführten API an der Quelle vorgenommen wurden, kann der Eigentümer der Quell-API eine manuelle Zusammenführung von der AWS AppSync Konsole aus oder über den im AWS SDK und der AWS CLI verfügbaren `StartSchemaMerge` Vorgang aufrufen.

## Zusätzliche Unterstützung für Merged APIs
<a name="merge-api-additional-support"></a>

### Abonnements konfigurieren
<a name="config-subscription"></a>

Im Gegensatz zu routerbasierten Ansätzen zur GraphQL-Schemakomposition bietet Merged AWS AppSync integrierte APIs Unterstützung für GraphQL-Abonnements. Alle Abonnementvorgänge, die in Ihrer zugehörigen Quelle definiert sind, APIs werden automatisch zusammengeführt und funktionieren in Ihrer zusammengeführten API ohne Änderung. Weitere Informationen darüber, wie Abonnements über serverlose WebSockets Verbindungen AWS AppSync unterstützt werden, finden Sie unter [Echtzeitdaten](https://docs.aws.amazon.com/appsync/latest/devguide/aws-appsync-real-time-data.html).

### Beobachtbarkeit konfigurieren
<a name="config-observability"></a>

AWS AppSync APIs Merged bietet integrierte Protokollierung, Überwachung und Metriken über [Amazon CloudWatch](https://docs.aws.amazon.com/appsync/latest/devguide/monitoring.html). AWS AppSync bietet auch integrierte Unterstützung für die Rückverfolgung über [AWS X-Ray](https://docs.aws.amazon.com/appsync/latest/devguide/x-ray-tracing.html). 

### Konfiguration benutzerdefinierter Domänen
<a name="config-custom-domain"></a>

AWS AppSync APIs Merged bietet integrierte Unterstützung für die Verwendung benutzerdefinierter Domains mit den [GraphQL- und Echtzeit-Endpunkten](https://docs.aws.amazon.com/appsync/latest/devguide/custom-domain-name.html) Ihrer zusammengeführten API. 

### Caching konfigurieren
<a name="config-caching"></a>

AWS AppSync APIs Merged bietet integrierte Unterstützung für das optionale Zwischenspeichern von Antworten auf Anfrage- und/oder Resolverebene sowie für die Antwortkomprimierung. [Weitere Informationen finden Sie unter Zwischenspeichern und Komprimierung.](https://docs.aws.amazon.com/appsync/latest/devguide/enabling-caching.html) 

### Private Konfiguration APIs
<a name="config-private-api"></a>

AWS AppSync APIs Merged bietet integrierte Unterstützung für Private APIs , die den Zugriff auf die GraphQL- und Echtzeit-Endpunkte Ihrer zusammengeführten API auf Datenverkehr beschränkt, der von [VPC-Endpunkten stammt, die](https://docs.aws.amazon.com/appsync/latest/devguide/using-private-apis.html) Sie konfigurieren können. 

### Konfiguration von Firewall-Regeln
<a name="config-firewall"></a>

AWS AppSync APIs Merged bietet integrierte Unterstützung für AWS WAF, sodass Sie Ihre Daten schützen können, APIs indem Sie [Firewall-Regeln für Webanwendungen](https://docs.aws.amazon.com/appsync/latest/devguide/WAF-Integration.html) definieren. 

### Konfiguration von Audit-Logs
<a name="config-audit"></a>

AWS AppSync APIs Merged bietet integrierte Unterstützung für AWS CloudTrail, mit der Sie [Auditprotokolle konfigurieren und verwalten können](https://docs.aws.amazon.com/appsync/latest/devguide/cloudtrail-logging.html). 

## Einschränkungen bei der zusammengeführten API
<a name="merged-api-limits"></a>

Beachten Sie bei der APIs Entwicklung von Merged die folgenden Regeln:

1. Eine zusammengeführte API kann keine Quell-API für eine andere zusammengeführte API sein.

1. Eine Quell-API kann nicht mehr als einer zusammengeführten API zugeordnet werden.

1. Die Standardgrößenbeschränkung für ein zusammengeführtes API-Schemadokument beträgt 10 MB.

1. Die Standardanzahl von Quellen APIs , die einer zusammengeführten API zugeordnet werden können, ist 10. Sie können jedoch eine Erhöhung des Limits beantragen, wenn Sie mehr als 10 Quellen APIs in Ihrer zusammengeführten API benötigen.

## Überlegungen zur zusammengeführten API
<a name="merged-api-considerations"></a>

Beachten Sie beim Entwerfen und APIs Implementieren von Merged Folgendes:

Das Zusammenführen mehrerer Quellen APIs zu einem einzigen Endpunkt kann die Größe und Komplexität Ihres GraphQL-Schemas und Ihrer Abfragen erhöhen. Wenn Ihr zusammengeführtes Schema wächst, müssen Abfragen möglicherweise mehrere Resolver durchlaufen, um eine einzelne Anfrage zu erfüllen, was die Latenz Ihrer gesamten Anforderungszeit erhöhen kann. Beispielsweise kann es bei einer Abfrage, die auf Felder aus mehreren Quellen zugreift, erforderlich APIs sein AWS AppSync , die Resolver von jeder Quell-API nacheinander auszuführen, wobei jeder Resolver die Gesamtantwortzeit erhöht.

Wir empfehlen Ihnen dringend, Merged während der Entwicklung und unter realistischen Lastbedingungen APIs gründlich zu testen, um sicherzustellen, dass es Ihren Geschäftsanforderungen entspricht. Achten Sie besonders auf:
+ Die Tiefe und Komplexität Ihres zusammengeführten Schemas, insbesondere Abfragen, die auf Felder aus mehreren Quellen zugreifen APIs.
+ Die Anzahl der Resolver, die ausgeführt werden müssen, um gängige Abfragemuster zu erfüllen.
+ Die Leistungsmerkmale Ihrer Datenquellen und Resolver bei erwarteter Last.
+ Die Auswirkungen der Netzwerklatenz beim Zugriff auf Ressourcen aus mehreren Quellen APIs.

Erwägen Sie die Implementierung von Leistungsoptimierungen wie Caching, Batchverarbeitung von Datenquellenanfragen und das Entwerfen Ihrer Quell-API-Schemas, um die Anzahl der Resolver-Ausführungen zu minimieren, die für allgemeine Operationen erforderlich sind.

## Zusammengeführt erstellen APIs
<a name="creating-merged-api"></a>

**Um eine zusammengeführte API in der Konsole zu erstellen**

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

   1. Wählen Sie im **Dashboard** **Create API** aus.

1. Wählen Sie „**Zusammengeführte API**“ und anschließend „**Weiter**“.

1. **Geben Sie auf der Seite „API-Details** angeben“ die folgenden Informationen ein: 

   1. Geben Sie unter **API-Details** die folgenden Informationen ein:

      1. Geben Sie den **API-Namen Ihrer zusammengeführten API** an. Dieses Feld ist eine Möglichkeit, Ihre GraphQL-API zu kennzeichnen, um sie bequem von anderen APIs GraphQL zu unterscheiden. 

      1. Geben Sie die **Kontaktdaten an**. Dieses Feld ist optional und fügt der GraphQL-API einen Namen oder eine Gruppe hinzu. Es ist nicht mit anderen Ressourcen verknüpft oder wird von diesen generiert und funktioniert ähnlich wie das API-Namensfeld. 

   1. Unter **Servicerolle** müssen Sie Ihrer zusammengeführten API eine IAM-Ausführungsrolle zuordnen, damit Sie Ihre Ressourcen zur Laufzeit sicher importieren und verwenden AWS AppSync können. Sie können wählen, ob Sie **eine neue Servicerolle erstellen und verwenden** möchten, sodass Sie angeben können, welche Richtlinien und Ressourcen verwendet AWS AppSync werden sollen. Sie können auch eine vorhandene IAM-Rolle importieren, indem Sie „**Bestehende Servicerolle verwenden**“ und dann die Rolle aus der Dropdownliste auswählen. 

   1. Unter **Private API-Konfiguration** können Sie festlegen, ob private API-Funktionen aktiviert werden sollen. Beachten Sie, dass diese Auswahl nach der Erstellung der zusammengeführten API nicht geändert werden kann. Weitere Informationen zu Private APIs finden Sie unter [AWS AppSync Private verwenden APIs](https://docs.aws.amazon.com/appsync/latest/devguide/using-private-apis.html). 

      Wählen Sie **Weiter**, wenn Sie fertig sind. 

1. Als Nächstes müssen Sie das GraphQL hinzufügen APIs , das als Grundlage für Ihre zusammengeführte API verwendet wird. Geben Sie auf der APIs Seite **„Quelle auswählen**“ die folgenden Informationen ein: 

   1. Wählen Sie in der Tabelle **APIs Aus Ihrem AWS Konto** die Option **Quelle hinzufügen** aus APIs. In der Liste von GraphQL APIs enthält jeder Eintrag die folgenden Daten:

      1. **Name**: Das API-Namensfeld der **GraphQL-API**. 

      1. **API-ID**: Der eindeutige ID-Wert der GraphQL-API.

      1. **Primärer Authentifizierungsmodus**: Der Standardautorisierungsmodus für die GraphQL-API. Weitere Informationen zu den Autorisierungsmodi finden Sie unter [Autorisierung und Authentifizierung](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html). AWS AppSync

      1. **Zusätzlicher Authentifizierungsmodus**: Die sekundären Autorisierungsmodi, die in der GraphQL-API konfiguriert wurden.

      1. **Wählen Sie den aus APIs , den Sie in der zusammengeführten API verwenden möchten, indem Sie das Kontrollkästchen neben dem Feld Name der API aktivieren.** Wählen Sie anschließend **Quelle hinzufügen APIs**. Das ausgewählte GraphQL APIs wird in der Tabelle **APIs von Ihren AWS Konten** angezeigt.

   1. Wählen Sie in der Tabelle „**APIs Von anderen AWS Konten**“ die Option **Quelle APIs hinzufügen** aus. Die GraphQL APIs in dieser Liste stammen von anderen Konten, die ihre Ressourcen über AWS Resource Access Manager (AWS RAM) mit Ihren teilen. Das Verfahren zur Auswahl von GraphQL APIs in dieser Tabelle ist derselbe wie im vorherigen Abschnitt. Weitere Informationen zur gemeinsamen Nutzung von Ressourcen finden Sie AWS RAM unter [Was ist AWS Resource Access Manager?](https://docs.aws.amazon.com/ram/latest/userguide/what-is.html) .

      Wählen Sie **Weiter**, wenn Sie fertig sind.

   1. Fügen Sie Ihren primären Authentifizierungsmodus hinzu. Weitere Informationen finden Sie unter [Autorisierung und Authentifizierung](https://docs.aws.amazon.com/appsync/latest/devguide/security-authz.html). Wählen Sie **Weiter** aus.

   1. Überprüfe deine Eingaben und wähle dann **Create API** aus.