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.
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.
-
Bereitstellung von GET bei einer Folder-Ressource, um eine Liste aller Objekte in einem Amazon S3-Bucket anzuzeigen.
-
Bereitstellung von GET bei einer Folder/Item-Ressource, um ein Objekt von einem Amazon S3-Bucket anzuzeigen oder herunterzuladen.
Unter Umständen sollten Sie die Beispiel-API wie in OpenAPI-Definitionen der Beispiel-API als Amazon-S3-Proxy 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 REST-APIs mit OpenAPI in API Gateway erstellen.
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.
Themen
Einrichten von IAM-Berechtigungen für die API, um Amazon S3-Aktionen aufzurufen
Erstellen von API-Ressourcen zum Darstellen von Amazon S3-Ressourcen
Bereitstellen einer API-Methode zur Auflistung der Amazon S3-Buckets des Aufrufers
Bereitstellen von API-Methoden, um auf einen Amazon S3-Bucket zuzugreifen
Bereitstellen von API-Methoden für den Zugriff auf ein Amazon S3-Objekt in einem Bucket
Einrichten von IAM-Berechtigungen für die API, um Amazon S3-Aktionen aufzurufen
Einer IAM-Rolle müssen geeignete IAM-Richtlinien zugeordnet sein, damit die API erforderliche Amazon-S3-Aktionen aufrufen kann. In diesem Schritt erstellen Sie eine neue IAM-Rolle.
Um die AWS Service-Proxy-Ausführungsrolle zu erstellen
Melden Sie sich bei der an AWS Management Console und öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Wählen Sie Roles.
-
Wählen Sie Rolle erstellen.
-
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.
-
Klicken Sie auf Weiter und dann erneut auf Weiter.
-
Geben Sie für Role name (Rollenname) den Namen
APIGatewayS3ProxyPolicy
ein und klicken Sie auf Create role (Rolle erstellen). -
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.
-
Wählen Sie für die ausgewählte Rolle die Registerkarte Berechtigungen hinzufügen aus.
-
Wählen Sie in der Dropdown-Liste Berechtigungen anfügen aus.
-
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.
-
Notieren Sie sich den neu erstellten Rollen-ARN, Sie werden ihn später brauchen.
Erstellen von API-Ressourcen zum Darstellen von Amazon S3-Ressourcen
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
-
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}.
-
Wählen Sie Create Resource (Ressource erstellen) aus.
Die Proxy-Ressource bleibt ausgeschaltet.
Wählen Sie für Ressourcenpfad
/
aus.Geben Sie für Resource name (Ressourcenname)
{folder}
ein.CORS (Cross Origin Resource Sharing) bleibt unmarkiert.
Wählen Sie Create Resource (Ressource erstellen) aus.
Wählen Sie die /{folder}-Ressource aus und klicken Sie dann auf Ressource erstellen.
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:
Bereitstellen einer API-Methode zur Auflistung der Amazon S3-Buckets des Aufrufers
Um die Liste der Amazon S3-Buckets des Aufrufers zu erhalten, muss die Aktion GET Service 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
-
Wählen Sie die /-Ressource aus und klicken Sie dann auf Methode erstellen.
Wählen Sie als Methodentyp GET aus.
Für Integrationstyp wählen Sie AWS-Service aus.
Wählen Sie für den Ort aus AWS-Region, AWS-Region an dem Sie Ihren Amazon S3 S3-Bucket erstellt haben.
Wählen Sie für AWS-Service Amazon Simple Storage Service aus.
Lassen Sie die AWS -Subdomain leer.
Für HTTP-Methode wählen Sie GET aus.
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 weiter, worin eine Amazon S3-Ressource durch den Ressourcen-Pfad des
s3-host-name/bucket/key
-Musters ausgedrückt wird. API Gateway legt dens3-host-name
fest und gibt den Client, der inbucket
undkey
spezifiziert ist, vom Client an Amazon S3 weiter.Geben Sie für Pfadüberschreibung / ein.
Geben Sie für Ausführungsrolle den Rollen-ARN für
APIGatewayS3ProxyPolicy
ein.Klicken Sie auf Einstellungen für Methodenanfragen.
Mit den Einstellungen für die Methodenanfragen steuern Sie, wer diese Methode Ihrer API aufrufen kann.
-
Wählen Sie im Dropdown-Menü
AWS_IAM
für Autorisierung aus. Wählen Sie Methode erstellen aus.
Mit dieser Einrichtung wird die Frontend-Anforderung GET
https://
in das your-api-host
/stage
/GET https://
am Backend integriert.your-s3-host
/
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
-
Klicken Sie auf der Registerkarte Methodenantwort unter Antwort 200 auf Bearbeiten.
-
Klicken Sie auf Header hinzufügen und gehen Sie wie folgt vor:
Für Header-Name geben Sie
Content-Type
ein.Wählen Sie Add header.
Wiederholen Sie diese Schritte, um einen
Timestamp
-Header und einenContent-Length
-Header zu erstellen. Wählen Sie Save (Speichern) aus.
Klicken Sie auf der Registerkarte Methodenantwort unter Methodenantworten auf Antwort erstellen.
Geben Sie als HTTP-Statuscode 400 ein.
Für diese Antwort legen Sie keine Header fest.
Wählen Sie Save (Speichern) aus.
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
-
Klicken Sie auf der Registerkarte Integrationsantwort unter Standard - Antwort auf Bearbeiten.
Geben Sie für den Header Content-Length den Wert
integration.response.header.Content-Length
als Zuordnungswert ein.Geben Sie für den Header Content-Type den Wert
integration.response.header.Content-Type
als Zuordnungswert ein.Geben Sie für den Header Timestamp den Wert
integration.response.header.Date
als Zuordnungswert ein.Wählen Sie Save (Speichern) aus. Das Ergebnis sollte in etwa wie folgt aussehen:
-
Klicken Sie auf der Registerkarte Integrationsantwort unter Integrationsantworten auf Antwort erstellen.
Machen Sie für HTTP status regex (HTTP-Status-RegEx) den Eintrag
4\d{2}
. Dadurch werden alle 4xx-HTTP-Antwortstatuscodes der Methodenantwort zugeordnet.Wählen Sie für Statuscode der Methodenantwort
400
aus.Wählen Sie Create (Erstellen) aus.
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
-
Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.
-
Wählen Sie Test aus. Das Ergebnis sollte wie in der folgenden Abbildung aussehen:
Bereitstellen von API-Methoden, um auf einen Amazon S3-Bucket zuzugreifen
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. Sie können die Beispiel-API hier für weitere Methoden importieren, OpenAPI-Definitionen der Beispiel-API als Amazon-S3-Proxy.
Exponieren der GET-Methoden in einer Ordnerressource
Wählen Sie die /{folder}-Ressource aus und klicken Sie dann auf Methode erstellen.
Wählen Sie als Methodentyp GET aus.
Für Integrationstyp wählen Sie AWS-Service aus.
Wählen Sie für den Ort aus AWS-Region, AWS-Region an dem Sie Ihren Amazon S3 S3-Bucket erstellt haben.
Wählen Sie für AWS-Service Amazon Simple Storage Service aus.
Lassen Sie die AWS -Subdomain leer.
Für HTTP-Methode wählen Sie GET aus.
Wählen Sie für Aktionstyp Pfadüberschreibung verwenden aus.
Geben Sie für Pfadüberschreibung
{bucket}
ein.Geben Sie für Ausführungsrolle den Rollen-ARN für
APIGatewayS3ProxyPolicy
ein.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}
-
Klicken Sie auf der Registerkarte Integrationsanfrage unter Einstellungen für Integrationsanfragen auf Bearbeiten.
Wählen Sie URL-Pfadparameter aus und klicken Sie dann auf Pfadparameter hinzufügen.
Geben Sie unter Name
bucket
ein.-
Geben Sie für Zugeordnet von
method.request.path.folder
ein. Wählen Sie Save (Speichern) aus.
Als Nächstes testen Sie Ihre API.
Testen der /{folder} GET
-Methode
-
Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.
-
Geben Sie den Namen Ihres Buckets unter Pfad für Ordner ein.
-
Wählen Sie Test aus.
Das Testergebnis wird eine Liste der Objekte in Ihrem Bucket enthalten.
Bereitstellen von API-Methoden für den Zugriff auf ein Amazon S3-Objekt in einem Bucket
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.
Exponieren der GET-Methode in einer item-Ressource
-
Wählen Sie die /{item}-Ressource aus und klicken Sie dann auf Methode erstellen.
-
Wählen Sie als Methodentyp GET aus.
-
Für Integrationstyp wählen Sie AWS-Service aus.
-
Wählen Sie für den Ort aus AWS-Region, AWS-Region an dem Sie Ihren Amazon S3 S3-Bucket erstellt haben.
-
Wählen Sie für AWS-Service Amazon Simple Storage Service aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Für HTTP-Methode wählen Sie GET aus.
-
Wählen Sie für Aktionstyp Pfadüberschreibung verwenden aus.
-
Geben Sie für Pfadüberschreibung {bucket}/{object} ein.
-
Geben Sie für Ausführungsrolle den Rollen-ARN für
APIGatewayS3ProxyPolicy
ein. -
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}
-
Klicken Sie auf der Registerkarte Integrationsanfrage unter Einstellungen für Integrationsanfragen auf Bearbeiten.
-
Klicken Sie auf URL-Pfadparameter.
-
Klicken Sie auf Pfadparameter hinzufügen.
-
Geben Sie unter Name
bucket
ein. -
Geben Sie für Zugeordnet von
method.request.path.folder
ein. -
Klicken Sie auf Pfadparameter hinzufügen.
-
Geben Sie unter Name
object
ein. -
Geben Sie für Zugeordnet von
method.request.path.item
ein. -
Wählen Sie Save (Speichern) aus.
Testen der /{folder}/{object} GET
-Methode
-
Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.
-
Geben Sie den Namen Ihres Buckets unter Pfad für Ordner ein.
-
Geben Sie unter Pfad, Element den Namen eines Elements ein.
-
Wählen Sie Test aus.
Der Antworttext enthält den Inhalt des Elements.
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
-
Registrieren Sie die Medientypen der betroffenen Datei bei den APIs binaryMediaTypes. Sie können Sie von der Konsole aus erledigen:
-
Wählen Sie API-Einstellungen für die API aus.
-
Klicken Sie unter Binäre Medientypen auf Medientypen verwalten.
-
Klicken Sie auf Binären Medientyp hinzufügen und geben Sie dann den erforderlichen Medientyp ein, z. B.
image/png
. -
Wählen Sie zum Speichern der Einstellung Save Changes (Änderungen speichern) aus.
-
-
Fügen Sie den Header
Content-Type
(zum Hochladen) und/oderAccept
(zum Herunterladen) zur Methodenanfrage hinzu, um den Client aufzufordern, den erforderlichen binären Medientyp anzugeben, und weisen Sie sie der Integrationsanfrage zu. -
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 Integrations-Pass-Through-Verhalten und Auswählen einer VTL-Mapping-Vorlage.
Die maximale Größe der Nutzlast ist 10 MB. Siehe API Gateway-Kontingente für die Konfiguration und Ausführung einer REST-API.
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.