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 Amazon Kinesis-Proxy erstellen
Auf dieser Seite wird beschrieben, wie eine REST-API durch Integration des AWS-Typs für den Zugriff auf Kinesis erstellt und konfiguriert wird.
Anmerkung
Um Ihre API Gateway-API in Kinesis zu integrieren, müssen Sie eine Region wählen, in der sowohl das API Gateway als auch die Kinesis-Services verfügbar sind. Informationen zur Verfügbarkeit der Regionen finden Sie unter Service-Endpunkte und Kontingente.
Zur Veranschaulichung erstellen wir eine Beispiel-API, so dass ein Client die folgenden Aufgaben ausführen kann:
-
Verfügbare Streams des Benutzers in Kinesis auflisten
-
Erstellen, Beschreiben oder Löschen eines bestimmten Streams
-
Lesen von Datensätzen aus einem oder Schreiben von Datensätzen in einen bestimmten Stream
Für die Ausführung der obigen Aufgaben stellt die API Methoden für verschiedene Ressourcen bereit, um Folgendes aufzurufen:
-
Die
ListStreams-Aktion in Kinesis -
Die Aktion
CreateStream,DescribeStreamoderDeleteStream -
Die
GetRecords- oderPutRecords-Aktion (einschließlichPutRecord) in Kinesis
Genauer gesagt wird die API wie folgt erstellt:
-
Machen Sie eine HTTP-GET-Methode für die
/streamsAPI-Ressource verfügbar und integrieren Sie die Methode in die ListStreamsAktion in Kinesis, um die Streams im Konto des Aufrufers aufzulisten. -
Machen Sie eine HTTP-POST-Methode für die
/streams/{stream-name}API-Ressource verfügbar und integrieren Sie die Methode in die CreateStreamAktion in Kinesis, um einen benannten Stream im Konto des Aufrufers zu erstellen. -
Machen Sie eine HTTP-GET-Methode für die
/streams/{stream-name}API-Ressource verfügbar und integrieren Sie die Methode in die DescribeStreamAktion in Kinesis, um einen benannten Stream im Konto des Aufrufers zu beschreiben. -
Machen Sie eine HTTP-DELETE-Methode für die
/streams/{stream-name}API-Ressource verfügbar und integrieren Sie die Methode in die DeleteStreamAktion in Kinesis, um einen Stream im Konto des Anrufers zu löschen. -
Machen Sie eine HTTP-PUT-Methode für die
/streams/{stream-name}/recordAPI-Ressource verfügbar und integrieren Sie die Methode in die PutRecordAktion in Kinesis. Dadurch kann der Client einen einzelnen Datensatz zum benannten Stream hinzufügen. -
Machen Sie eine HTTP-PUT-Methode für die
/streams/{stream-name}/recordsAPI-Ressource verfügbar und integrieren Sie die Methode in die PutRecordsAktion in Kinesis. Dadurch kann der Client eine Liste mit Datensätzen zum benannten Stream hinzufügen. -
Stellen Sie eine HTTP-GET-Methode für die
/streams/{stream-name}/recordsAPI-Ressource bereit und integrieren Sie die Methode in die GetRecordsAktion in Kinesis. Auf diese Weise kann der Client Datensätze im benannten Stream mit einem angegebenen gemeinsamen Iterator auflisten. Ein gemeinsamer Iterator gibt die gemeinsame Position an, ab der Datensätze sequenziell ausgelesen werden sollen. -
Stellen Sie eine HTTP-GET-Methode für die
/streams/{stream-name}/sharditeratorAPI-Ressource bereit und integrieren Sie die Methode in die GetShardIteratorAktion in Kinesis. Diese Hilfsmethode muss derListStreams-Aktion in Kinesis zur Verfügung gestellt werden.
Sie können die hier vorgestellten Anweisungen auf andere Kinesis-Aktionen anwenden. Die vollständige Liste der Kinesis-Aktionen finden Sie unter Amazon Kinesis API-Referenz.
Anstatt die API Gateway-Konsole zur Erstellung der Beispiel-API zu verwenden, können Sie die Beispiel-API mit der API Gateway Import API in API Gateway importieren. Informationen zur Verwendung der Import-API finden Sie unter Entwickeln APIs Sie REST mit OpenAPI in API Gateway.
Erstellen Sie eine IAM-Rolle und Richtlinien für den Zugriff der API auf Kinesis
Einer IAM-Rolle müssen entsprechende IAM-Richtlinien zugeordnet sein, damit die API Kinesis-Aktionen aufrufen kann. In dieser Übung erstellen Sie eine neue IAM-Rolle.
So erstellen Sie die Ausführungsrolle AWS für den Service-Proxy
Melden Sie sich bei der an AWS-Managementkonsole und öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Wählen Sie Roles.
-
Wählen Sie Rolle erstellen aus.
-
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
APIGatewayKinesisProxyPolicyein 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
AmazonKinesisFullAccessein 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.
Eine API als Kinesis-Proxy erstellen
Führen Sie die folgenden Schritte aus, um die API in der API Gateway-Konsole zu erstellen.
Um eine API als AWS Service-Proxy für Kinesis zu erstellen
-
Melden Sie sich bei der API Gateway Gateway-Konsole unter https://console.aws.amazon.com/apigatewayan
. -
Wenn Sie API Gateway zum ersten Mal verwenden, sehen Sie eine Seite, die Sie mit den Funktionen des Service vertraut macht. Wählen Sie unter REST-API die Option Erstellen aus. Wenn das Popup-Fenster Create Example API (Beispiel-API erstellen) angezeigt wird, klicken Sie auf OK.
Wenn Sie API Gateway nicht zum ersten Mal verwenden, wählen Sie Create API (API erstellen). Wählen Sie unter REST-API die Option Build (Erstellen) aus.
-
Klicken Sie auf New API (Neue API).
-
Geben Sie unter API name (API-Name)
KinesisProxyein. Belassen Sie alle Standardwerte für die anderen Felder unverändert. -
(Optional) Geben Sie unter Description (Beschreibung) eine Beschreibung ein.
-
Wählen Sie als IP-Adresstyp die Option. IPv4
-
Wählen Sie Create API (API erstellen) aus.
Nachdem die API erstellt wurde, zeigt die API Gateway-Konsole die Seite Resources (Ressourcen) an, die nur die Root-Ressource (/) der API enthält.
Streams in Kinesis auflisten
Kinesis unterstützt die Aktion ListStreams mit dem folgenden REST-API-Aufruf:
POST /?Action=ListStreams HTTP/1.1 Host: kinesis.<region>.<domain> Content-Length: <PayloadSizeBytes> User-Agent: <UserAgentString> Content-Type: application/x-amz-json-1.1 Authorization: <AuthParams> X-Amz-Date: <Date> { ... }
In der oben gezeigten REST-API-Anforderung wird die Aktion im Action-Abfrageparameter angegeben. Alternativ können Sie stattdessen die Aktion in einer X-Amz-Target-Kopfzeile angeben:
POST / HTTP/1.1 Host: kinesis.<region>.<domain> Content-Length: <PayloadSizeBytes> User-Agent: <UserAgentString> Content-Type: application/x-amz-json-1.1 Authorization: <AuthParams> X-Amz-Date: <Date> X-Amz-Target: Kinesis_20131202.ListStreams { ... }
In diesem Tutorial verwenden wir den Abfrageparameter, um Aktionen festzulegen.
Um eine Kinesis-Aktion in der API bereitzustellen, fügen Sie eine /streams-Ressource zum Stamm der API hinzu. Richten Sie dann eine GET-Methode für die Ressource ein und integrieren Sie die Methode mit der ListStreams-Aktion von Kinesis.
Das folgende Verfahren beschreibt die Auflistung von Kinesis-Streams mit Hilfe der API Gateway-Konsole.
So listen Sie Kinesis-Streams über die API Gateway-Konsole auf:
-
Wählen Sie die
/-Ressource aus und klicken Sie dann auf Ressource erstellen. Geben Sie für Resource name (Ressourcenname)
streamsein.CORS (Cross Origin Resource Sharing) bleibt ausgeschaltet.
Wählen Sie Create Resource (Ressource erstellen) aus.
-
Wählen Sie die
/streams-Ressource aus, klicken Sie auf Methode erstellen und gehen Sie dann wie folgt vor:Wählen Sie als Methodentyp die Option GET (Abrufen) aus.
Anmerkung
Das HTTP-Verb für eine Methode, die von einem Client aufgerufen wird, kann sich von dem HTTP-Verb unterscheiden, das für eine Integration für das Backend erforderlich ist. Hier wählen wir
GETaus, da das Auflisten von Streams intuitiv ein READ-Vorgang ist.Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
Anmerkung
Wir haben hier
POSTgewählt, weil Kinesis erfordert, dass die AktionListStreamsmit aufgerufen wird. -
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
ListStreamsein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie Methode erstellen aus.
-
Klicken Sie auf der Registerkarte Integrationsanfrage unter Einstellungen für Integrationsanfragen auf Bearbeiten.
Wählen Sie für Anforderungstext-Pass-Through die Einstellung Wenn keine Vorlagen definiert sind (empfohlen) aus.
-
Klicken Sie auf URL-Abfragezeichenfolgen-Parameter und gehen Sie dann wie folgt vor:
-
Klicken Sie auf Parameter Anforderungsheader hinzufügen.
-
Geben Sie unter Name
Content-Typeein. -
Geben Sie für Zugeordnet von
'application/x-amz-json-1.1'ein.
Wir verwenden eine Zuweisung für den Anfrageparameter, um den
Content-Type-Header auf den statischen Wert'application/x-amz-json-1.1'einzustellen und damit Kinesis mitzuteilen, dass die Eingabe in einer bestimmten JSON-Version erfolgt. -
-
Wählen Sie Mapping-Vorlagen und dann Mapping-Vorlage hinzufügen aus und gehen Sie dann wie folgt vor:
-
Geben Sie für Inhaltstyp
application/jsonein. -
Geben Sie für Vorlage
{}ein. -
Wählen Sie Speichern.
Die ListStreamsAnfrage benötigt eine Nutzlast im folgenden JSON-Format:
{ "ExclusiveStartStreamName": "string", "Limit": number }Die Eigenschaften sind jedoch optional. Wir haben uns für eine leere JSON-Nutzlast entschieden, um die Standardwerte zu verwenden.
-
-
Testen Sie die GET-Methode für die /streams-Ressource zum Aufrufen der
ListStreams-Aktion in Kinesis:Wählen Sie die Registerkarte Test. Möglicherweise müssen Sie die rechte Pfeiltaste wählen, um die Registerkarte anzuzeigen.
Klicken Sie auf Test, um Ihre Methode zu testen.
Wenn Sie bereits zwei Streams mit den Namen „myStream“ und „yourStream“ in Kinesis erstellt haben, gibt der Test im Erfolgsfall die Antwort „200 OK“ mit der folgenden Nutzlast zurück:
{ "HasMoreStreams": false, "StreamNames": [ "myStream", "yourStream" ] }
Stream in Kinesis erstellen, beschreiben und löschen
Das Erstellen, Beschreiben und Löschen eines Streams in Kinesis umfasst jeweils die folgenden Kinesis REST-API-Anfragen:
POST /?Action=CreateStream HTTP/1.1 Host: kinesis.region.domain... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "ShardCount": number, "StreamName": "string" }
POST /?Action=DescribeStream HTTP/1.1 Host: kinesis.region.domain... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "StreamName": "string" }
POST /?Action=DeleteStream HTTP/1.1 Host: kinesis.region.domain... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "StreamName":"string" }
Sie können die API so erstellen, dass sie die erforderliche Eingabe als JSON-Nutzlast der Methodenanforderung akzeptiert und die Nutzlast bis zur Integrationsanforderung weiterleitet. Die API wird jedoch geringfügig abgewandelt, um weitere Beispiele für die Datenzuweisung zwischen Methoden- und Integrationsanforderungen sowie Methoden- und Integrationsantworten bereitzustellen.
Wir machen die MethodenGET,POST, und Delete HTTP für eine to-be-named Stream Ressource verfügbar. Sie verwenden die Pfadvariable {stream-name} als Platzhalter für die Stream-Ressource und integrieren diese API-Methoden in die entsprechenden DescribeStream-, CreateStream- und DeleteStream-Aktionen von Kinesis. Wir benötigen, dass der Client andere Eingabedaten als Header, Abfrageparameter oder Nutzdaten einer Methodenanforderung weitergibt. Wir stellen Mapping-Vorlagen zur Verfügung, um die Daten in die erforderliche Nutzlast der Integrationsanforderung zu transformieren.
Erstellen einer {Stream-name}-Ressource
-
Wählen Sie die Ressource /streams aus und klicken Sie dann auf Ressource erstellen.
Die Proxy-Ressource bleibt ausgeschaltet.
Wählen Sie für Ressourcenpfad
/streamsaus.Geben Sie für Resource name (Ressourcenname)
{stream-name}ein.CORS (Cross Origin Resource Sharing) bleibt ausgeschaltet.
Wählen Sie Create Resource (Ressource erstellen) aus.
So konfigurieren und testen Sie die GET-Methode für eine Stream-Ressource
-
Wählen Sie die Ressource /{stream-name} aus und klicken Sie dann auf Methode erstellen.
Wählen Sie als Methodentyp die Option GET (Abrufen) aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
DescribeStreamein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie Methode erstellen aus.
-
Fügen Sie im Abschnitt Integrationsanfrage die folgenden Parameter für URL-Anforderungsheader hinzu:
Content-Type: 'x-amz-json-1.1'Die Aufgabe folgt demselben Verfahren, um die Zuweisung des Anforderungsparameters für die Methode
GET /streamseinzurichten. -
Fügen Sie die folgende Textzuweisungsvorlage hinzu, um Daten der Methodenanforderung
GET /streams/{stream-name}der IntegrationsanforderungPOST /?Action=DescribeStreamzuzuweisen:{ "StreamName": "$input.params('stream-name')" }Diese Zuweisungsvorlage generiert die erforderliche Nutzlast der Integrationsanforderung für die Aktion
DescribeStreamvon Kinesis aufgrund des Pfadparameterwertsstream-nameder Methodenanforderung. -
Klicken Sie auf die Registerkarte Test, um die
GET /stream/{stream-name}-Methode zum Aufrufen derDescribeStream-Aktion in Kinesis zu testen. -
Geben Sie unter Stream-Name den Namen eines vorhandenen Kinesis-Streams für Pfad ein.
-
Wählen Sie Test aus. Wenn der Test erfolgreich ist, wird die Antwort "200 OK" mit einer Nutzlast ähnlich der folgenden zurückgegeben:
{ "StreamDescription": { "HasMoreShards": false, "RetentionPeriodHours": 24, "Shards": [ { "HashKeyRange": { "EndingHashKey": "68056473384187692692674921486353642290", "StartingHashKey": "0" }, "SequenceNumberRange": { "StartingSequenceNumber": "49559266461454070523309915164834022007924120923395850242" }, "ShardId": "shardId-000000000000" }, ... { "HashKeyRange": { "EndingHashKey": "340282366920938463463374607431768211455", "StartingHashKey": "272225893536750770770699685945414569164" }, "SequenceNumberRange": { "StartingSequenceNumber": "49559266461543273504104037657400164881014714369419771970" }, "ShardId": "shardId-000000000004" } ], "StreamARN": "arn:aws:kinesis:us-east-1:12345678901:stream/myStream", "StreamName": "myStream", "StreamStatus": "ACTIVE" } }Nach der Bereitstellung der API können Sie eine REST-Anforderung für diese API-Methode erstellen:
GET https://your-api-id.execute-api.region.amazonaws.com/stage/streams/myStreamHTTP/1.1 Host:your-api-id.execute-api.region.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z
So konfigurieren und testen Sie die POST-Methode für eine Stream-Ressource
-
Wählen Sie die Ressource /{stream-name} aus und klicken Sie dann auf Methode erstellen.
Wählen Sie unter Method type (Methodentyp) die Option POST aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
CreateStreamein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie Methode erstellen aus.
-
Fügen Sie im Abschnitt Integrationsanfrage die folgenden Parameter für URL-Anforderungsheader hinzu:
Content-Type: 'x-amz-json-1.1'Die Aufgabe folgt demselben Verfahren, um die Zuweisung des Anforderungsparameters für die Methode
GET /streamseinzurichten. -
Fügen Sie die folgende Textzuweisungsvorlage hinzu, um Daten der Methodenanforderung
POST /streams/{stream-name}der IntegrationsanforderungPOST /?Action=CreateStreamzuzuweisen:{ "ShardCount": #if($input.path('$.ShardCount') == '') 5 #else $input.path('$.ShardCount') #end, "StreamName": "$input.params('stream-name')" }In der vorhergehenden Zuweisungsvorlage legen wir
ShardCountauf einen festen Wert von 5 fest, wenn vom Client kein Wert in der Nutzlast der Methodenanforderung angegeben wird. -
Klicken Sie auf die Registerkarte Test, um die
POST /stream/{stream-name}-Methode zum Aufrufen derCreateStream-Aktion in Kinesis zu testen. -
Geben Sie für Path unter Stream-Name den Namen eines neuen Kinesis-Streams für Pfad ein.
-
Wählen Sie Test aus. Wenn der Test erfolgreich ist, wird die Antwort "200 OK" ohne Daten zurückgegeben.
Nach der Bereitstellung der API können Sie auch eine REST-API-Anfrage im Hinblick auf die POST-Methode für eine Stream-Ressource erstellen, um die
CreateStream-Aktion in Amazon Kinesis aufzurufen:POST https://your-api-id.execute-api.region.amazonaws.com/stage/streams/yourStreamHTTP/1.1 Host:your-api-id.execute-api.region.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z { "ShardCount": 5 }
Konfigurieren und Testen der DELETE-Methode für eine Stream-Ressource
-
Wählen Sie die Ressource /{stream-name} aus und klicken Sie dann auf Methode erstellen.
Wählen Sie als Methodentyp LÖSCHEN aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
DeleteStreamein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie Methode erstellen aus.
-
Fügen Sie im Abschnitt Integrationsanfrage die folgenden Parameter für URL-Anforderungsheader hinzu:
Content-Type: 'x-amz-json-1.1'Die Aufgabe folgt demselben Verfahren, um die Zuweisung des Anforderungsparameters für die Methode
GET /streamseinzurichten. -
Fügen Sie die folgende Textzuweisungsvorlage hinzu, um Daten der Methodenanforderung
DELETE /streams/{stream-name}der entsprechenden IntegrationsanforderungPOST /?Action=DeleteStreamzuzuweisen:{ "StreamName": "$input.params('stream-name')" }Diese Zuweisungsvorlage generiert die erforderliche Eingabe für die Aktion
DELETE /streams/{stream-name}aus dem vom Client bereitgestellten URL-Pfadstream-name. -
Klicken Sie auf die Registerkarte Test, um die
DELETE /stream/{stream-name}-Methode zum Aufrufen derDeleteStream-Aktion in Kinesis zu testen. -
Geben Sie unter Stream-Name den Namen eines vorhandenen Kinesis-Streams für Pfad ein.
-
Wählen Sie Test aus. Wenn der Test erfolgreich ist, wird die Antwort "200 OK" ohne Daten zurückgegeben.
Nach der Bereitstellung der API können Sie auch die folgende REST-API-Anfrage im Hinblick auf die DELETE-Methode für die Stream-Ressource erstellen, um die
DeleteStream-Aktion in Amazon Kinesis aufzurufen:DELETE https://your-api-id.execute-api.region.amazonaws.com/stage/streams/yourStreamHTTP/1.1 Host:your-api-id.execute-api.region.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z {}
Datensätze aus einem Stream in Kinesis abrufen und Datensätze zu einem Stream hinzufügen
Nachdem Sie einen Stream in Kinesis erstellt haben, können Sie dem Stream Datensätze hinzufügen und die Daten aus dem Stream lesen. Zum Hinzufügen von Datensätzen muss die PutRecordAktion PutRecordsoder in Kinesis aufgerufen werden. Erstere fügt dem Stream mehrere Datensätze hinzu, letztere hingegen einen einzigen Datensatz.
POST /?Action=PutRecords HTTP/1.1 Host: kinesis.region.domainAuthorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "Records": [ { "Data": blob, "ExplicitHashKey": "string", "PartitionKey": "string" } ], "StreamName": "string" }
oder
POST /?Action=PutRecord HTTP/1.1 Host: kinesis.region.domainAuthorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "Data":blob, "ExplicitHashKey":"string", "PartitionKey":"string", "SequenceNumberForOrdering":"string", "StreamName": "string" }
Hier identifiziert StreamName den Zieldatenstrom zum Hinzufügen von Datensätzen. StreamName, Data, und PartitionKey sind erforderliche Eingabedaten. In diesem Beispiel werden die Standardwerte für alle optionalen Eingabedaten verwendet. Es erfolgt keine explizite Angabe entsprechender Werte in der Eingabe für die Methodenanforderung.
Das Lesen von Daten in Kinesis läuft darauf hinaus, die GetRecordsAktion aufzurufen:
POST /?Action=GetRecords HTTP/1.1 Host: kinesis.region.domainAuthorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "ShardIterator":"string", "Limit":number}
Hier wird der Quell-Stream, von dem die Datensätze abgerufen werden, im erforderlichen ShardIterator-Wert angegeben. Dies wird in der folgenden Kinesis-Aktion zum Abrufen eines gemeinsamen Iterators verdeutlicht:
POST /?Action=GetShardIterator HTTP/1.1 Host: kinesis.region.domainAuthorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes{ "ShardId":"string", "ShardIteratorType":"string", "StartingSequenceNumber":"string", "StreamName":"string"}
Für die Aktionen GetRecords und PutRecords werden die Methoden GET und PUT entsprechend für eine /records-Ressource bereitgestellt, die einem benannten Stream hinzugefügt wird (/{stream-name}). Ebenso wird die PutRecord-Aktion als PUT-Methode für eine /record-Ressource verfügbar gemacht.
Da die Aktion GetRecords als Eingabe einen ShardIterator-Wert verwendet, der durch Aufrufen der Hilfsaktion GetShardIterator gewonnen wurde, stellen Sie eine GET-Hilfsmethode für eine ShardIterator-Ressource bereit (/sharditerator).
So erstellen Sie die Ressourcen /record, /records und /sharditerator
-
Wählen Sie die Ressource /{stream-name} aus und klicken Sie dann auf Ressource erstellen.
Die Proxy-Ressource bleibt ausgeschaltet.
Wählen Sie für Ressourcenpfad
/{stream-name}aus.Geben Sie für Resource name (Ressourcenname)
recordein.CORS (Cross Origin Resource Sharing) bleibt ausgeschaltet.
Wählen Sie Create Resource (Ressource erstellen) aus.
Wiederholen Sie die Schritte oben, um eine /records- und eine /sharditerator-Ressource zu erstellen. Die endgültige API sollte wie folgt aussehen:
In den folgenden vier Verfahren wird beschrieben, wie Sie die jeweiligen Methoden einrichten, Daten aus den Methodenanforderungen den Integrationsanforderungen zuweisen und die Methoden testen.
Einrichten und Testen der PUT /streams/{stream-name}/record-Methode zum Aufruf von PutRecord in Kinesis:
-
Wählen Sie /record aus und klicken Sie dann auf Methode erstellen.
Wählen Sie unter Methodentyp PUT aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
PutRecordein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie Methode erstellen aus.
-
Fügen Sie im Abschnitt Integrationsanfrage die folgenden Parameter für URL-Anforderungsheader hinzu:
Content-Type: 'x-amz-json-1.1'Die Aufgabe folgt demselben Verfahren, um die Zuweisung des Anforderungsparameters für die Methode
GET /streamseinzurichten. -
Fügen Sie die folgende Textzuweisungsvorlage hinzu, um Daten der Methodenanforderung
PUT /streams/{stream-name}/recordder entsprechenden IntegrationsanforderungPOST /?Action=PutRecordzuzuweisen:{ "StreamName": "$input.params('stream-name')", "Data": "$util.base64Encode($input.json('$.Data'))", "PartitionKey": "$input.path('$.PartitionKey')" }In dieser Zuweisungsvorlage wird davon ausgegangen, dass die Nutzlast der Methodenanforderung folgendes Format aufweist:
{ "Data": "some data", "PartitionKey": "some key" }Diese Daten können mithilfe des folgenden JSON-Schemas modelliert werden:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PutRecord proxy single-record payload", "type": "object", "properties": { "Data": { "type": "string" }, "PartitionKey": { "type": "string" } } }Sie können ein Modell mit diesem Schema erstellen und es verwenden, um die Generierung der Zuweisungsvorlage zu vereinfachen. Sie können eine Zuweisungsvorlage jedoch auch ohne ein Modell erstellen.
-
Testen Sie die Methode
PUT /streams/{stream-name}/record, indem Sie die Pfadvariablestream-nameauf den Namen eines vorhandenen Streams festlegen, eine Nutzlast im erforderlichen Format bereitstellen und die Methodenanforderung dann senden. Das Ergebnis im Erfolgsfall ist die Antwort200 OKmit einer Nutzlast in folgendem Format:{ "SequenceNumber": "49559409944537880850133345460169886593573102115167928386", "ShardId": "shardId-000000000004" }
So richten Sie die PUT /streams/{stream-name}/records-Methode zum Aufruf von PutRecords in Kinesis ein und testen sie:
-
Wählen Sie die Ressource /records aus und klicken Sie dann auf Methode erstellen.
Wählen Sie unter Methodentyp PUT aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
PutRecordsein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie Methode erstellen aus.
-
Fügen Sie im Abschnitt Integrationsanfrage die folgenden Parameter für URL-Anforderungsheader hinzu:
Content-Type: 'x-amz-json-1.1'Die Aufgabe folgt demselben Verfahren, um die Zuweisung des Anforderungsparameters für die Methode
GET /streamseinzurichten. -
Fügen Sie die folgende Zuweisungsvorlage hinzu, um Daten der
PUT /streams/{stream-name}/records-Methodenanforderung der entsprechendenPOST /?Action=PutRecords-Integrationsanforderung zuzuweisen:{ "StreamName": "$input.params('stream-name')", "Records": [ #foreach($elem in $input.path('$.records')) { "Data": "$util.base64Encode($elem.data)", "PartitionKey": "$elem.partition-key" }#if($foreach.hasNext),#end #end ] }In dieser Zuweisungsvorlage wird davon ausgegangen, dass die Nutzlast der Methodenanforderung anhand des folgenden JSON-Schemas modelliert werden kann:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PutRecords proxy payload data", "type": "object", "properties": { "records": { "type": "array", "items": { "type": "object", "properties": { "data": { "type": "string" }, "partition-key": { "type": "string" } } } } } }Sie können ein Modell mit diesem Schema erstellen und es verwenden, um die Generierung der Zuweisungsvorlage zu vereinfachen. Sie können eine Zuweisungsvorlage jedoch auch ohne ein Modell erstellen.
In diesem Tutorial haben wir zwei geringfügig unterschiedliche Nutzdatenformate verwendet, um zu veranschaulichen, dass ein API-Entwickler je nach Bedarf das Backend-Datenformat für den Client offenlegen oder gegenüber dem Client verbergen kann. Eines dieser Formate ist für die Methode
PUT /streams/{stream-name}/recordsbestimmt (oben). Ein anderes Format wird für die MethodePUT /streams/{stream-name}/record(im vorherigen Verfahren) verwendet. In einer Produktionsumgebung sollten beide Formate konsistent bleiben. -
Testen Sie die Methode
PUT /streams/{stream-name}/records, indem Sie die Pfadvariablestream-nameauf einen vorhandenen Stream festlegen, die folgende Nutzlast bereitstellen und die Methodenanforderung senden.{ "records": [ { "data": "some data", "partition-key": "some key" }, { "data": "some other data", "partition-key": "some key" } ] }Das Ergebnis im Erfolgsfall ist die Antwort "200 OK" mit einer Nutzlast, die der folgenden Ausgabe ähnelt:
{ "FailedRecordCount": 0, "Records": [ { "SequenceNumber": "49559409944537880850133345460167468741933742152373764162", "ShardId": "shardId-000000000004" }, { "SequenceNumber": "49559409944537880850133345460168677667753356781548470338", "ShardId": "shardId-000000000004" } ] }
Richten Sie die GET /streams/{stream-name}/sharditerator-Methode ein und testen Sie sie, indem Sie GetShardIterator in Kinesis aufrufen
Die Methode GET /streams/{stream-name}/sharditerator ist eine Hilfsmethode, um einen erforderlichen gemeinsamen Iterator vor dem Aufrufen der Methode GET
/streams/{stream-name}/records zu beschaffen.
-
Wählen Sie die Ressource /sharditerator aus und klicken Sie dann auf Methode erstellen.
Wählen Sie als Methodentyp die Option GET (Abrufen) aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
GetShardIteratorein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Klicken Sie auf Parameter für URL-Abfragezeichenfolgen.
Die
GetShardIterator-Aktion erfordert die Eingabe eines ShardId-Werts. Zur Weitergabe eines vom Client bereitgestelltenShardId-Werts wird der Methodenanforderung einshard-id-Abfrageparameter wie nachfolgend dargestellt hinzugefügt: Wählen Sie Abfragezeichenfolge hinzufügen aus.
Geben Sie unter Name
shard-idein.Lassen Sie die Optionen Required (Obligatorisch) and Caching (Cache) deaktiviert.
-
Wählen Sie Methode erstellen aus.
-
Fügen Sie im Abschnitt Integrationsanforderung die folgende Zuweisungsvorlage hinzu, um die erforderlichen Eingaben (
ShardIdundStreamName) für dieGetShardIterator-Aktion aus den Parameternshard-idundstream-nameder Methodenanforderung zu generieren. Durch die Zuweisungsvorlage wird außerdemShardIteratorTypeauf die StandardeinstellungTRIM_HORIZONfestgelegt.{ "ShardId": "$input.params('shard-id')", "ShardIteratorType": "TRIM_HORIZON", "StreamName": "$input.params('stream-name')" } -
Verwenden Sie die Option Test in der Amazon API Gateway-Konsole, geben Sie einen vorhandenen Stream-Namen als Wert der Variablen
stream-namePath ein, setzen Sie dieshard-idQuery string auf einen vorhandenenShardId-Wert (z. B.shard-000000000004) und wählen Sie Test.Im Erfolgsfall sieht die Ausgabe der Antwortnutzlast folgendermaßen oder ähnlich aus:
{ "ShardIterator": "AAAAAAAAAAFYVN3VlFy..." }Notieren Sie sich den Wert für
ShardIterator. Sie benötigen ihn, um Datensätze aus einem Stream abzurufen.
So konfigurieren und testen Sie die GET /streams/{stream-name}/records-Methode zum Aufrufen der GetRecords-Aktion in Kinesis:
-
Wählen Sie die Ressource /records aus und klicken Sie dann auf Methode erstellen.
Wählen Sie als Methodentyp die Option GET (Abrufen) aus.
Als Integrationstyp wählen Sie AWS -Dienst aus.
Wählen Sie für den AWS-Region Ort aus AWS-Region, an dem Sie Ihren Kinesis-Stream erstellt haben.
Für AWS-Service wählen Sie Kinesis aus.
-
Lassen Sie die AWS -Subdomain leer.
-
Wählen Sie in HTTP method POST.
-
Für Aktionstyp wählen Sie Aktionsname verwenden aus.
-
Für Aktionsname geben Sie
GetRecordsein. -
Für Ausführungsrolle geben Sie den ARN Ihrer Ausführungsrolle ein.
-
Die Voreinstellung unter Passthrough für Content-Handling bleibt unverändert.
-
Wählen Sie HTTP-Anforderungs-Headers aus.
Die
GetRecords-Aktion erfordert die Eingabe einesShardIterator-Werts. Für eine Weitergabe eines vom Client bereitgestelltenShardIterator-Werts muss der Methodenanforderung einShard-Iterator-Header-Parameter hinzugefügt werden. Wählen Sie Add header.
Geben Sie unter Name
Shard-Iteratorein.Lassen Sie die Optionen Required (Obligatorisch) and Caching (Cache) deaktiviert.
Wählen Sie Methode erstellen aus.
-
Fügen Sie die folgende Textzuweisungsvorlage im Abschnitt Integrationsanforderung hinzu, um den
Shard-Iterator-Header-Parameterwert demShardIterator-Eigenschaftswert der JSON-Nutzlast für dieGetRecords-Aktion in Kinesis zuzuweisen.{ "ShardIterator": "$input.params('Shard-Iterator')" } -
Mithilfe der Option Test in der Amazon-API-Gateway-Konsole geben Sie einen vorhandenen Stream-Namen als Wert der Variablen
stream-name-Pfad ein, setzen denShard-Iterator-Header auf denShardIterator-Wert aus dem Testdurchlauf derGET /streams/{stream-name}/sharditerator-Methode (oben) und klicken dann auf Test.Im Erfolgsfall sieht die Ausgabe der Antwortnutzlast folgendermaßen oder ähnlich aus:
{ "MillisBehindLatest": 0, "NextShardIterator": "AAAAAAAAAAF...", "Records": [ ... ] }