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:
-
Sie stellen eine HTTP GET-Methode für die
/streams-Ressource der API zur Verfügung und integrieren die Methode in die ListStreams-Aktion in Kinesis, um die Streams im Konto des Aufrufers aufzulisten. -
Sie stellen eine HTTP POST-Methode für die
/streams/{stream-name}-Ressource der API bereit und integrieren die Methode in die CreateStream-Aktion in Kinesis, um einen benannten Stream im Konto des Aufrufers zu erstellen. -
Sie stellen eine HTTP GET-Methode für die
/streams/{stream-name}-Ressource der API zur Verfügung und integrieren die Methode in die DescribeStream-Aktion in Kinesis, um einen benannten Stream im Konto des Aufrufers zu beschreiben. -
Sie stellen eine HTTP DELETE-Methode für die
/streams/{stream-name}-Ressource der API bereit und integrieren die Methode in die DeleteStream-Aktion in Kinesis, um einen Stream im Konto des Aufrufers zu löschen. -
Sie setzen eine HTTP PUT-Methode für die
/streams/{stream-name}/record-Ressource der API ein und integrieren die Methode in der PutRecord-Aktion in Amazon Kinesis. Dadurch kann der Client einen einzelnen Datensatz zum benannten Stream hinzufügen. -
Sie nutzen eine HTTP PUT-Methode für die
/streams/{stream-name}/records-Ressource der API und integrieren die Methode in der PutRecords-Aktion in Amazon Kinesis. Dadurch kann der Client eine Liste mit Datensätzen zum benannten Stream hinzufügen. -
Sie stellen eine HTTP GET-Methode für die
/streams/{stream-name}/records-Ressource der API bereit und integrieren die Methode in der GetRecords-Aktion in Amazon 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. -
Sie stellen eine HTTP GET-Methode für die
/streams/{stream-name}/sharditerator-Ressource der API zur Verfügung und integrieren die Methode in der GetShardIterator-Aktion in Amazon 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 REST-APIs mit OpenAPI in API Gateway erstellen.
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.
Erstellen der Ausführungsrolle für den AWS-Service-Proxy
Melden Sie sich bei der AWS Management Console an, und öffnen Sie die IAM-Konsole unter https://console.aws.amazon.com/iam/
. -
Wählen Sie Roles.
-
Wählen Sie Create role aus.
-
Wählen Sie unter Typ der vertrauenswürdigen Entität auswählen die Option AWS-Service und anschließend API Gateway und Erlaubt API Gateway, Protokolle an CloudWatch Logs zu senden aus.
-
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.
So erstellen Sie eine API als AWS-Service-Proxy für Kinesis:
-
Melden Sie sich bei der API Gateway-Konsole unter https://console.aws.amazon.com/apigateway
an. -
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 Build (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 unter IP-Adresstyp die Option IPv4 aus.
-
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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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 als Name die Zeichenfolge „
Content-Type“ ein. -
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 aus.
Die ListStreams-Anfrage verwendet eine Nutzlast mit dem 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.
Sie nutzen die HTTP-Methoden GET, POST und Delete für eine Ressource, die den Namen Stream erhält. 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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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. Beim Hinzufügen von Datensätzen wird die PutRecords- oder die PutRecord-Aktion in Amazon Kinesis aufgerufen. 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 über den Aufruf der Aktion GetRecords:
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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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 als Name die Zeichenfolge „
shard-id“ ein.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.
Für AWS-Region wählen Sie den AWS-Region aus, wo 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 als Name die Zeichenfolge „
Shard-Iterator“ ein.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": [ ... ] }