

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.

# Tutorial: REST-API als AmazonS3-Proxy erstellen
<a name="integrating-api-with-aws-services-s3"></a>

Dieser Abschnitt zeigt anhand eines Beispiels die Verwendung einer REST-API in API Gateway als Amazon S3-Proxy und beschreibt das Erstellen und Konfigurieren einer REST-API zur Bereitstellung der folgenden Amazon S3-Operationen: 
+ Bereitstellung von GET bei der Stammressource der API, um [alle Amazon S3-Buckets eines Aufrufers aufzulisten](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html).
+ Bereitstellung von GET bei einer Folder-Ressource, um [eine Liste aller Objekte in einem Amazon S3-Bucket anzuzeigen](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListObjects.html).
+ Machen Sie GET auf einer Folder/Item Ressource verfügbar, um [ein Objekt aus einem Amazon S3 S3-Bucket anzuzeigen oder herunterzuladen](https://docs.aws.amazon.com/AmazonS3/latest/API/API_GetObject.html).

 Unter Umständen sollten Sie die Beispiel-API wie in [OpenAPI-Definitionen der Beispiel-API als Amazon-S3-Proxy](api-as-s3-proxy-export-swagger-with-extensions.md) gezeigt als Amazon-S3-Proxy importieren. Dieses Beispiel enthält weitere exponierte Methoden. Anweisung zum Importieren einer API mithilfe der OpenAPI-Definition finden Sie unter [Entwickeln APIs Sie REST mit OpenAPI in API Gateway](api-gateway-import-api.md).

**Anmerkung**  
 Um Ihre API Gateway-API in Amazon S3 zu integrieren, müssen Sie eine Region auswählen, in der sowohl die API Gateway- als auch die Amazon S3-Services verfügbar sind. Informationen zur Verfügbarkeit der Regionen finden Sie unter [Amazon API Gateway-Endpunkte und -Kontingente](https://docs.aws.amazon.com/general/latest/gr/apigateway.html). 

**Topics**
+ [Einrichten von IAM-Berechtigungen für die API, um Amazon S3-Aktionen aufzurufen](#api-as-s3-proxy-iam-permissions)
+ [Erstellen von API-Ressourcen zum Darstellen von Amazon S3-Ressourcen](#api-as-s3-proxy-create-resources)
+ [Bereitstellen einer API-Methode zur Auflistung der Amazon S3-Buckets des Aufrufers](#api-root-get-as-s3-get-service)
+ [Bereitstellen von API-Methoden, um auf einen Amazon S3-Bucket zuzugreifen](#api-folder-operations-as-s3-bucket-actions)
+ [Bereitstellen von API-Methoden für den Zugriff auf ein Amazon S3-Objekt in einem Bucket](#api-items-in-folder-as-s3-objects-in-bucket)
+ [OpenAPI-Definitionen der Beispiel-API als Amazon-S3-Proxy](api-as-s3-proxy-export-swagger-with-extensions.md)
+ [Aufrufen der API mit einem REST-API-Client](api-as-s3-proxy-test-using-postman.md)

## Einrichten von IAM-Berechtigungen für die API, um Amazon S3-Aktionen aufzurufen
<a name="api-as-s3-proxy-iam-permissions"></a>

 Einer IAM-Rolle müssen geeignete IAM-Richtlinien zugeordnet sein, damit die API erforderliche Amazon-S3-Aktionen aufrufen kann. In dieser Übung erstellen Sie eine neue IAM-Rolle.

**Um die AWS Service-Proxy-Ausführungsrolle zu erstellen**

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

1. Wählen Sie **Roles**.

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

1.  Wählen Sie unter **Typ der vertrauenswürdigen Entität auswählen** die Option **AWS Dienst** aus, wählen Sie dann **API Gateway** aus und wählen Sie **Erlaubt API Gateway, Logs in Logs zu CloudWatch übertragen**.

1.  Klicken Sie auf **Weiter** und dann erneut auf **Weiter**.

1. Geben Sie für **Role name (Rollenname)** den Namen **APIGatewayS3ProxyPolicy** ein und klicken Sie auf **Create role (Rolle erstellen)**.

1. Wählen Sie in der Liste **Roles** die Rolle aus, die Sie gerade erstellt haben. Möglicherweise müssen Sie scrollen oder die Rolle über die Suchleiste finden.

1. Wählen Sie für die ausgewählte Rolle die Registerkarte **Berechtigungen hinzufügen** aus.

1. Wählen Sie in der Dropdown-Liste **Berechtigungen anfügen** aus.

1. Geben Sie im Suchfeld **AmazonS3FullAccess** ein und wählen Sie **Berechtigungen hinzufügen** aus. 
**Anmerkung**  
Dieses Tutorial verwendet der Einfachheit halber eine verwaltete Richtlinie. Als Best Practice sollten Sie Ihre eigene IAM-Richtlinie erstellen, um die erforderlichen Mindestberechtigungen zu gewähren. 

1. Notieren Sie sich den neu erstellten **Rollen-ARN**, Sie werden ihn später brauchen.

## Erstellen von API-Ressourcen zum Darstellen von Amazon S3-Ressourcen
<a name="api-as-s3-proxy-create-resources"></a>

Die Root-Ressource der API (`/`) verwenden Sie als den Container des Amazon-S3-Buckets eines authentifizierten Aufrufers. Außerdem erstellen Sie die Ressourcen `Folder` und `Item`, um einen bestimmten Amazon-S3-Bucket bzw. ein bestimmtes Amazon-S3-Objekt darzustellen. Der Ordnername und der Objektschlüssel werden vom Aufrufer in Form von Pfadparametern als Teil einer Anforderungs-URL angegeben. 

**Anmerkung**  
Beim Zugriff auf Objekte, deren Objektschlüssel `/` oder andere Sonderzeichen enthält, müssen diese Zeichen URL-kodiert sein. Beispielsweise sollte `test/test.txt` zu `test%2Ftest.txt` kodiert werden.

**So erstellen Sie eine API-Ressource, die die Amazon S3-Servicefunktionen bereitstellt**

1.  Erstellen Sie in derselben Weise, in der AWS-Region Sie Ihren Amazon S3 S3-Bucket erstellt haben, eine API mit dem Namen **myS3**. Die Stammressource dieser API (**/**) stellt den Amazon S3-Service dar. In diesem Schritt erstellen Sie zwei zusätzliche Ressourcen: **/\{folder\}** und **/\{item\}**.

1. Wählen Sie **Create Resource** (Ressource erstellen) aus.

1. Die **Proxy-Ressource** bleibt ausgeschaltet. 

1. Wählen Sie für **Ressourcenpfad** `/` aus.

1. Geben Sie für **Resource name (Ressourcenname)** **\{folder\}** ein.

1. **CORS (Cross Origin Resource Sharing)** bleibt unmarkiert.

1. Wählen Sie **Create Resource** (Ressource erstellen) aus.

1. Wählen Sie die **/\{folder\}**-Ressource aus und klicken Sie dann auf **Ressource erstellen**.

1. Wiederholen Sie die Schritte oben, um eine untergeordnete Ressource für **/\{folder\}** mit dem Namen **\{item\}** zu erstellen.

   Die endgültige API sollte wie folgt aussehen:

      
![Erstellen einer API in API Gateway als Amazon S3-Proxy](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/aws_proxy_s3_create_api-resources_new_console.png)

## Bereitstellen einer API-Methode zur Auflistung der Amazon S3-Buckets des Aufrufers
<a name="api-root-get-as-s3-get-service"></a>

Um die Liste der Amazon S3-Buckets des Aufrufers zu erhalten, muss die Aktion [GET Service](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListBuckets.html) in Amazon S3 aufgerufen werden. Erstellen Sie die GET-Methode in der Stammressource der API (**/**). Konfigurieren Sie die GET-Methode für die Integration in Amazon S3 wie folgt. 

**So erstellen und initialisieren Sie die `GET /`-Methode der API**

1. Wählen Sie die **/**-Ressource aus und klicken Sie dann auf **Methode erstellen**. 

1. Wählen Sie als Methodentyp **GET** aus.

1. Für **Integrationstyp** wählen Sie **AWS-Service** aus.

1. Wählen Sie für den Ort aus **AWS-Region**, AWS-Region an dem Sie Ihren Amazon S3 S3-Bucket erstellt haben. 

1. Wählen Sie für **AWS-Service** **Amazon Simple Storage Service** aus.

1. Lassen Sie die **AWS -Subdomain** leer.

1. Für **HTTP-Methode** wählen Sie **GET** aus.

1. Wählen Sie für **Aktionstyp** **Pfadüberschreibung verwenden** aus.

   Wenn der Pfad überschrieben wird, leitet API Gateway die Client-Anfrage an Amazon S3 als die entsprechende [Amazon S3-REST-API-Path-Style-Anfrage](https://docs.aws.amazon.com/AmazonS3/latest/userguide/RESTAPI.html) weiter, worin eine Amazon S3-Ressource durch den Ressourcen-Pfad des `s3-host-name/bucket/key`-Musters ausgedrückt wird. API Gateway legt den `s3-host-name` fest und gibt den Client, der in `bucket` und `key` spezifiziert ist, vom Client an Amazon S3 weiter.

1. Geben Sie für **Pfadüberschreibung** **/** ein.

1. Geben Sie für **Ausführungsrolle** den Rollen-ARN für **APIGatewayS3ProxyPolicy** ein.

1. Klicken Sie auf **Einstellungen für Methodenanfragen**.

   Mit den Einstellungen für die Methodenanfragen steuern Sie, wer diese Methode Ihrer API aufrufen kann.

1. Wählen Sie im Dropdown-Menü `AWS_IAM` für **Autorisierung** aus.

      
![Deklarieren von Methodenantworttypen](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/aws_proxy_s3_setup_method_request_authorization_new_console.png)

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

Mit dieser Einrichtung wird die Frontend-Anforderung `GET https://{{your-api-host}}/{{stage}}/` in das `GET https://{{your-s3-host}}/` am Backend integriert.

 Sie deklarieren die 200-, 400- und 500-Antworten unter **Methodenantwort**, damit Ihre API erfolgreiche Antworten und Ausnahmen ordnungsgemäß an den Aufrufer zurückgibt. Die Standard-Zuweisung für 200-Antworten wird verwendet, sodass hier nicht deklarierte Backend-Antworten des Statuscodes an den Aufrufer als 200-Antworten zurückgegeben werden. 

**Deklarieren der Antworttypen für die `GET /`-Methode**

1.  Klicken Sie auf der Registerkarte **Methodenantwort** unter **Antwort 200** auf **Bearbeiten**.

1. Klicken Sie auf **Header hinzufügen** und gehen Sie wie folgt vor:

   1. Für **Header-Name** geben Sie **Content-Type** ein.

   1. Wählen Sie **Add header**.

   Wiederholen Sie diese Schritte, um einen **Timestamp**-Header und einen **Content-Length**-Header zu erstellen.

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

1. Klicken Sie auf der Registerkarte **Methodenantwort** unter **Methodenantworten** auf **Antwort erstellen**.

1. Geben Sie als **HTTP-Statuscode** **400** ein.

   Für diese Antwort legen Sie keine Header fest.

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

1. Wiederholen Sie die folgenden Schritte, um die Antwort 500 zu erstellen.

   Für diese Antwort legen Sie keine Header fest.

Da die erfolgreiche Integrationsantwort von Amazon S3 die Bucket-Liste als XML-Nutzlast, und die standardmäßige Methodenantwort von API Gateway eine JSON-Nutzlast zurückgibt, muss der Parameterwert des Backend-Content-Type-Headers dem Frontend-Gegenstück zugewiesen werden. Andernfalls erhält der Client `application/json` als Content-Type, wenn der Antworttext eigentlich eine XML-Zeichenfolge ist. Das folgende Verfahren zeigt, wie diese Einrichtung erfolgt. Weiterhin sollten Sie dem Client noch andere Header-Parameter anzeigen, z. B. Datum und Länge des Inhalts. 

**So richten Sie Antwort-Header-Zuordnungen für die GET-Methode ein**

1. Klicken Sie auf der Registerkarte **Integrationsantwort** unter **Standard - Antwort** auf **Bearbeiten**.

1. Geben Sie für den Header **Content-Length** den Wert **integration.response.header.Content-Length** als Zuordnungswert ein.

1. Geben Sie für den Header **Content-Type** den Wert **integration.response.header.Content-Type** als Zuordnungswert ein.

1. Geben Sie für den Header **Timestamp** den Wert **integration.response.header.Date** als Zuordnungswert ein.

1. Wählen Sie **Speichern**. Das Ergebnis sollte in etwa wie folgt aussehen:

      
![Zuweisen von Integrationsantwort-Headern zu Methodenantwort-Headern](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/aws_proxy_s3_setup_integration_response_headers_new_console.png)

1. Klicken Sie auf der Registerkarte **Integrationsantwort** unter **Integrationsantworten** auf **Antwort erstellen**.

1. Machen Sie für **HTTP status regex (HTTP-Status-RegEx)** den Eintrag **4\\d\{2\}**. Dadurch werden alle 4xx-HTTP-Antwortstatuscodes der Methodenantwort zugeordnet.

1. Wählen Sie für **Statuscode der Methodenantwort** **400** aus.

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

1. Wiederholen Sie die folgenden Schritte, um eine Integrationsantwort für die 500-Methodenantwort zu erstellen. Machen Sie für **HTTP status regex (HTTP-Status-RegEx)** den Eintrag **5\\d\{2\}**.

Zur Übung sollten Sie nun die API testen, die Sie bisher konfiguriert haben.

**So testen Sie die `GET /`-Methode**

1. Wählen Sie die Registerkarte **Test**. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.

1. Wählen Sie **Test** aus. Das Ergebnis sollte wie in der folgenden Abbildung aussehen:

      
![Testen des GET-Bucket-Ergebnisses für API-Stammressource](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/aws_proxy_s3_test_root_get_result_new_console.png)

## Bereitstellen von API-Methoden, um auf einen Amazon S3-Bucket zuzugreifen
<a name="api-folder-operations-as-s3-bucket-actions"></a>

Wenn Sie mit einem Amazon-S3-Bucket arbeiten, legen Sie die `GET`-Methode in der /\{folder\}-Ressource zum Auflisten von Objekten in einem Bucket offen. Die Anweisungen sind ähnlich wie diejenigen, die unter beschrieben sin [Bereitstellen einer API-Methode zur Auflistung der Amazon S3-Buckets des Aufrufers](#api-root-get-as-s3-get-service). Sie können die Beispiel-API hier für weitere Methoden importieren, [OpenAPI-Definitionen der Beispiel-API als Amazon-S3-Proxy](api-as-s3-proxy-export-swagger-with-extensions.md).

**Exponieren der GET-Methoden in einer Ordnerressource**

1. Wählen Sie die **/\{folder\}**-Ressource aus und klicken Sie dann auf **Methode erstellen**. 

1. Wählen Sie als Methodentyp **GET** aus.

1. Für **Integrationstyp** wählen Sie **AWS-Service** aus.

1. Wählen Sie für den Ort aus **AWS-Region**, AWS-Region an dem Sie Ihren Amazon S3 S3-Bucket erstellt haben. 

1. Wählen Sie für **AWS-Service** **Amazon Simple Storage Service** aus.

1. Lassen Sie die **AWS -Subdomain** leer.

1. Für **HTTP-Methode** wählen Sie **GET** aus.

1. Wählen Sie für **Aktionstyp** **Pfadüberschreibung verwenden** aus.

1. Geben Sie für **Pfadüberschreibung** **\{bucket\}** ein.

1. Geben Sie für **Ausführungsrolle** den Rollen-ARN für **APIGatewayS3ProxyPolicy** ein.

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

Der `{folder}`-Pfadparameter wird in der Amazon-S3-Endpunkt-URL festgelegt. Der `{folder}`-Pfadparameter der Methodenanforderung muss dem `{bucket}`-Pfadparameter der Integrationsanforderung zugeordnet werden.

**Zuordnen von `{folder}` zu `{bucket}`**

1.  Klicken Sie auf der Registerkarte **Integrationsanfrage** unter **Einstellungen für Integrationsanfragen** auf **Bearbeiten**. 

1. Wählen Sie **URL-Pfadparameter** aus und klicken Sie dann auf **Pfadparameter hinzufügen**.

1. Geben Sie unter **Name** **bucket** ein.

1. Geben Sie für **Zugeordnet von** **method.request.path.folder** ein.

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

Als Nächstes testen Sie Ihre API. 

**Testen der `/{folder} GET`-Methode**

1. Wählen Sie die Registerkarte **Test**. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.

1. Geben Sie den Namen Ihres Buckets unter **Pfad** für **Ordner** ein.

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

   Das Testergebnis wird eine Liste der Objekte in Ihrem Bucket enthalten.

      
![Testen der GET-Methode zur Erstellung eines Amazon-S3-Bucket.](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/aws_proxy_s3_test_api_folder_get_new_console.png)

## Bereitstellen von API-Methoden für den Zugriff auf ein Amazon S3-Objekt in einem Bucket
<a name="api-items-in-folder-as-s3-objects-in-bucket"></a>

Amazon S3 unterstützt GET-, DELETE-, HEAD-, OPTIONS-, POST- und PUT-Aktionen für den Zugriff auf und die Verwaltung von Objekte(n) in einem bestimmten Bucket. In diesem Tutorial exponieren Sie eine `GET`-Methode für die `{folder}/{item}`-Ressource, um eine Abbildung aus einem Bucket abzurufen. Weitere Nutzungsbeispiele der `{folder}/{item}` Ressource finden Sie in der Beispiel-API, [OpenAPI-Definitionen der Beispiel-API als Amazon-S3-Proxy](api-as-s3-proxy-export-swagger-with-extensions.md).

**Exponieren der GET-Methode in einer item-Ressource**

1. Wählen Sie die **/\{item\}**-Ressource aus und klicken Sie dann auf **Methode erstellen**. 

1. Wählen Sie als Methodentyp **GET** aus.

1. Für **Integrationstyp** wählen Sie **AWS-Service** aus.

1. Wählen Sie für den Ort aus **AWS-Region**, AWS-Region an dem Sie Ihren Amazon S3 S3-Bucket erstellt haben. 

1. Wählen Sie für **AWS-Service** **Amazon Simple Storage Service** aus.

1. Lassen Sie die **AWS -Subdomain** leer.

1. Für **HTTP-Methode** wählen Sie **GET** aus.

1. Wählen Sie für **Aktionstyp** **Pfadüberschreibung verwenden** aus.

1. Geben Sie für **Pfadüberschreibung** **\{bucket\}/\{object\}** ein.

1. Geben Sie für **Ausführungsrolle** den Rollen-ARN für **APIGatewayS3ProxyPolicy** ein.

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

Die Pfadparameter `{folder}` und `{item}` werden in der Amazon-S3-Endpunkt-URL festgelegt. Der -Pfadparameter der Methodenanforderung muss dem -Pfadparameter der Integrationsanforderung zugeordnet werden.

In diesem Schritt führen Sie folgende Aufgaben aus:
+ Ordnen Sie den Pfadparameter `{folder}` der Methodenanforderung dem Pfadparameter `{bucket}` der Integrationsanforderung zu.
+ Ordnen Sie den Pfadparameter `{item}` der Methodenanforderung dem Pfadparameter `{object}` der Integrationsanforderung zu.

**Zuordnen von `{folder}` zu `{bucket}` und `{item}` zu `{object}`**

1.  Klicken Sie auf der Registerkarte **Integrationsanfrage** unter **Einstellungen für Integrationsanfragen** auf **Bearbeiten**. 

1. Klicken Sie auf **URL-Pfadparameter**.

1. Klicken Sie auf **Pfadparameter hinzufügen**.

1. Geben Sie unter **Name** **bucket** ein.

1. Geben Sie für **Zugeordnet von** **method.request.path.folder** ein.

1. Klicken Sie auf **Pfadparameter hinzufügen**.

1. Geben Sie unter **Name** **object** ein.

1. Geben Sie für **Zugeordnet von** **method.request.path.item** ein.

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

**Testen der `/{folder}/{object} GET`-Methode**

1. Wählen Sie die Registerkarte **Test**. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.

1. Geben Sie den Namen Ihres Buckets unter **Pfad** für **Ordner** ein.

1. Geben Sie unter **Pfad**, **Element** den Namen eines Elements ein.

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

   Der Antworttext enthält den Inhalt des Elements.

      
![Testen der GET-Methode zur Erstellung eines Amazon-S3-Bucket.](http://docs.aws.amazon.com/de_de/apigateway/latest/developerguide/images/aws_proxy_s3_test_api_item_get_new_console.png)

   Die Anforderung gibt den Klartext („Hello world“) als Inhalt der angegebenen Datei (test.txt) in dem entsprechenden Amazon-S3-Bucket (amzn-s3-demo-bucket) zurück.

 Um Binärdateien, die in API Gateway als irgendetwas anderes als utf-8-codierter JSON-Inhalt betrachtet werden, herunter- oder hochzuladen, sind zusätzliche API-Einstellungen erforderlich. Dies kann wie folgt beschrieben werden: 

**Herunterladen oder Hochladen von Binärdateien von S3**

1.  Registrieren Sie die Medientypen der betroffenen Datei bei den APIs binaryMediaTypes. Sie können Sie von der Konsole aus erledigen: 

   1. Wählen Sie **API-Einstellungen** für die API aus.

   1. Klicken Sie unter **Binäre Medientypen** auf **Medientypen verwalten**.

   1. Klicken Sie auf **Binären Medientyp hinzufügen** und geben Sie dann den erforderlichen Medientyp ein, z. B. `image/png`.

   1. Wählen Sie zum Speichern der Einstellung **Save Changes** (Änderungen speichern) aus.

1. Fügen Sie der Methodenanforderung den Header `Content-Type` and/or `Accept` (zum Hochladen) (zum Herunterladen) hinzu, damit der Client den erforderlichen binären Medientyp angeben und ihn der Integrationsanforderung zuordnen muss.

1. Setzen Sie **Content Handling** in der Integrationsanfrage auf `Passthrough` (für das Hochladen), und in einer Integrationsantwort (für das Herunterladen). Stellen Sie sicher, dass keine Mapping-Vorlage für den betroffenen Inhaltstyp definiert ist. Weitere Informationen finden Sie unter [Datentransformationen für REST APIs in API Gateway](rest-api-data-transformations.md).

Die maximale Größe der Nutzlast ist 10 MB. Siehe [Kontingente für die Konfiguration und Ausführung einer REST-API in API Gateway](api-gateway-execution-service-limits-table.md).

Stellen Sie sicher, dass für Dateien in Amazon S3 die richtigen Inhaltstypen als Metadaten der Dateien hinzugefügt wurden. Bei streamfähigen Medieninhalten muss den Metadaten möglicherweise auch `Content-Disposition:inline` hinzugefügt werden.

Weitere Informationen zur Unterstützung von Binärdateien in API Gateway finden Sie in [Inhaltstypkonvertierungen in API Gateway](api-gateway-payload-encodings-workflow.md).