Tutorial: Creación de una API de REST como proxy de Amazon Kinesis
Esta página describe cómo crear y configurar una API de REST con una integración del tipo AWS
para tener acceso a Kinesis.
nota
Para integrar la API de API Gateway con Kinesis, debe elegir una región en la que estén disponibles los servicios API Gateway y Kinesis. Para conocer la disponibilidad de las regiones, consulte Puntos de enlace y cuotas de servicio.
A modo de ejemplo, crearemos una API de ejemplo para permitir que un cliente haga lo siguiente:
-
Listado de los flujos disponibles para el usuario en Kinesis
-
Creación, descripción o eliminación de un flujo especificado
-
Leer registros de datos o escribir registros de datos en un flujo especificado
Para realizar las tareas anteriores, la API expone métodos en diferentes recursos para invocar lo siguiente, respectivamente:
-
La acción
ListStreams
en Kinesis -
La acción
CreateStream
,DescribeStream
oDeleteStream
-
La acción
GetRecords
oPutRecords
(incluida la acciónPutRecord
) en Kinesis
En concreto, crearemos la API mediante las operaciones siguientes:
-
Exponer un método HTTP GET en el recurso
/streams
de la API e integrar el método con la acción ListStreams de Kinesis para mostrar los flujos de la cuenta del intermediario. -
Exponer un método HTTP POST en el recurso
/streams/{stream-name}
de la API e integrar el método con la acción CreateStream de Kinesis para crear un flujo con nombre en la cuenta del intermediario. -
Exponer un método HTTP GET en el recurso
/streams/{stream-name}
de la API e integrar el método con la acción DescribeStream de Kinesis para describir un flujo con nombre en la cuenta del intermediario. -
Exponer un método HTTP DELETE en el recurso
/streams/{stream-name}
de la API e integrar el método con la acción DeleteStream de Kinesis para eliminar un flujo en la cuenta del intermediario. -
Exponer un método PUT HTTP en el recurso
/streams/{stream-name}/record
de la API e integrar el método con la acción PutRecord de Kinesis. Esto permite que el cliente añada un solo registro de datos al flujo con nombre. -
Exponer un método PUT HTTP en el recurso
/streams/{stream-name}/records
de la API e integrar el método con la acción PutRecords de Kinesis. Esto permite que el cliente añada una lista de registros de datos al flujo con nombre. -
Exponer un método GET HTTP en el recurso
/streams/{stream-name}/records
de la API e integrar el método con la acción GetRecords de Kinesis. Esto permite que el cliente muestre registros de datos en el flujo con nombre, con un iterador de fragmento especificado. Un iterador de fragmento especifica la posición del fragmento desde la que se empiezan a leer los registros de datos de forma secuencial. -
Exponer un método GET HTTP en el recurso
/streams/{stream-name}/sharditerator
de la API e integrar el método con la acción GetShardIterator de Kinesis. Este método auxiliar debe proporcionarse en la acciónListStreams
de Kinesis.
Puede aplicar las instrucciones que se presentan aquí a otras acciones de Kinesis. Para obtener la lista completa de las acciones de Kinesis, consulte Referencia de API de Amazon Kinesis.
En lugar de utilizar la consola de API Gateway para crear la API de ejemplo, puede importar la API de ejemplo en API Gateway mediante la API de importación de API Gateway. Para obtener información acerca de cómo utilizar Import API, consulte Desarrollo de API de REST mediante OpenAPI en API Gateway.
Creación de un rol y una política de IAM para que la API tenga acceso a Kinesis
Para que la API pueda invocar las acciones de Kinesis necesarias, debe tener las políticas de IAM adecuadas asociadas a un rol de IAM.
Para crear el rol de ejecución del proxy de servicio de AWS
Inicie sesión en AWS Management Console Management Console y abra la consola IAM en https://console.aws.amazon.com/iam/
. -
Elija Roles.
-
Elija Crear rol.
-
Elija Servicio de AWS en Seleccionar el tipo de entidad de confianza y, a continuación, elija API Gateway y seleccione Permite que API Gateway envíe registros a CloudWatch Logs.
-
Seleccione Siguiente y de nuevo Siguiente.
-
En Role name (Nombre de rol), escriba
APIGatewayKinesisProxyPolicy
y luego elija Create role (Crear rol). -
En la lista Roles (Roles), elija el rol que acaba de crear. Puede que tenga que desplazarse o usar la barra de búsqueda para encontrar el rol.
-
Para el rol seleccionado, seleccione la pestaña Agregar permisos.
-
Elija Adjuntar políticas en la lista desplegable.
-
En la barra de búsqueda, escriba
AmazonKinesisFullAccess
y, a continuación, elija Añadir permisos.nota
Para simplificar el proceso, este tutorial utiliza una política administrada. Como práctica recomendada, se deben crear políticas de IAM propias para otorgar los permisos mínimos requeridos.
-
Anote el ARN del rol recién creado, ya que lo usará más adelante.
Creación de una API como un proxy de Kinesis
Utilice los siguientes pasos para crear la API en la consola de API Gateway.
Para crear una API como un proxy de servicio de AWS para Kinesis
-
Inicie sesión en la consola de API Gateway en https://console.aws.amazon.com/apigateway
. -
Si es la primera vez que utiliza API Gateway, verá una página en la que aparecen las características del servicio. En REST API, elija Build (Compilación). Cuando aparezca el menú emergente Create Example API (Crear API de ejemplo), elija OK (Aceptar).
Si esta no es la primera vez que utiliza API Gateway, elija Create API (Crear API). En REST API, elija Build (Compilación).
-
Elija New API (Nueva API).
-
En API name (Nombre de la API), escriba
KinesisProxy
. Mantenga los valores predeterminados en todos los demás campos. -
(Opcional) En Description (Descripción), introduzca una descripción.
-
Seleccione Create API (Crear API).
Una vez creada la API, la consola de API Gateway mostrará la página Resources (Recursos), que contiene únicamente el recurso raíz de la API (/
).
Lista de flujos en Kinesis
Kinesis es compatible con la acción ListStreams
con la siguiente llamada a la API de REST:
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> { ... }
En la anterior solicitud de API de REST, la acción se especifica en el parámetro de consulta Action
. También puede, en su lugar, especificar la acción en un encabezado X-Amz-Target
:
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 { ... }
En este tutorial usamos el parámetro de consulta para especificar la acción.
Para exponer una acción de Kinesis en la API, agregue un recurso /streams
a la raíz de la API. A continuación, defina un método GET
en el recurso e integre el método en la acción ListStreams
de Kinesis.
En el siguiente procedimiento se describe cómo listar los flujos de Kinesis con la consola de API Gateway.
Para listar los flujos de Kinesis con la consola de API Gateway
-
Seleccione el recurso
/
y, a continuación, elija Crear recurso. En Nombre del recurso, escriba
streams
.Mantenga desactivado CORS (uso compartido de recursos entre orígenes).
Elija Crear recurso.
-
Elija el recurso
/streams
y luego Crear método. A continuación, haga lo siguiente:En Tipo de método, seleccione GET.
nota
El verbo HTTP de un método invocado por un cliente puede ser diferente del verbo HTTP de una integración requerida por el backend. Aquí elegimos
GET
porque mostrar los flujos es intuitivamente una operación READ.En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
nota
Aquí elegimos
POST
porque Kinesis requiere que la acciónListStreams
también se invoque. -
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
ListStreams
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Crear método.
-
En la pestaña Solicitud de integración, en Configuración de la solicitud de integración, seleccione Editar.
En Acceso directo de cuerpo de la solicitud, elija Cuando no haya plantillas definidas (recomendado).
-
Elija Parámetros de encabezados de consulta de URL y luego haga lo siguiente:
-
Seleccione Añadir parámetros de encabezados de solicitud.
-
En Nombre, escriba
Content-Type
. -
En Mapeado de, introduzca
'application/x-amz-json-1.1'
.
Hemos utilizado un mapeo de parámetros de solicitud para definir el encabezado
Content-Type
en el valor estático'application/x-amz-json-1.1'
para informar a Kinesis de que la entrada es de una versión específica de JSON. -
-
Elija Plantillas de mapeo y, a continuación, elija Agregar plantilla de mapeo y haga lo siguiente:
-
En Content-Type, indique
application/json
. -
En Cuerpo de plantilla, escriba
{}
. -
Seleccione Guardar.
La solicitud ListStreams toma una carga con el siguiente formato JSON:
{ "ExclusiveStartStreamName": "string", "Limit": number }
Sin embargo, las propiedades son opcionales. Para utilizar los valores predeterminados, usamos aquí una carga JSON vacía.
-
-
Pruebe el método GET en el recurso /streams para invocar la acción
ListStreams
en Kinesis:Elija la pestaña Prueba. Puede que tenga que elegir el botón de flecha hacia la derecha para mostrar la pestaña.
Elija Prueba para probar su método.
Si ya ha creado dos flujos llamados "myStream" y "yourStream" en Kinesis, la prueba realizada correctamente devolverá una respuesta 200 OK que contiene la siguiente carga:
{ "HasMoreStreams": false, "StreamNames": [ "myStream", "yourStream" ] }
Creación, descripción y eliminación de un flujo en Kinesis
Crear, describir y eliminar un flujo en Kinesis implica realizar las siguientes solicitudes a la API de REST de Kinesis, respectivamente:
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" }
Podemos crear la API para que acepte la entrada necesaria como una carga JSON de una solicitud de método y transmita la carga a la solicitud de integración. Sin embargo, para proporcionar más ejemplos de mapeo de datos entre solicitudes de método e integración y respuestas de método e integración, crearemos nuestra API de una forma ligeramente distinta.
Exponemos los métodos HTTP GET
, POST
y Delete
HTTP en un recurso Stream
al que se asignará un nombre. Utilizamos la variable de ruta {stream-name}
como marcador de posición del recurso de flujo e integramos estos métodos de la API con las acciones DescribeStream
, CreateStream
y DeleteStream
de Kinesis respectivamente. Exigimos que el cliente pase otros datos de entrada como encabezados, parámetros de consulta o la carga de una solicitud de método. Proporcionamos plantillas de asignación para transformar los datos en la carga de solicitud de integración necesaria.
Para crear un recurso {stream-name}
-
Elija el recurso /streams y, a continuación, elija Crear recurso.
Mantenga Recurso proxy desactivado.
En Ruta de recurso, seleccione
/streams
.En Nombre del recurso, escriba
{stream-name}
.Mantenga desactivado CORS (uso compartido de recursos entre orígenes).
Elija Crear recurso.
Para configurar y probar el método GET en un recurso de flujo
-
Elija el recurso /{stream-name} y, a continuación, elija Crear método.
En Tipo de método, seleccione GET.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
DescribeStream
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Crear método.
-
En la sección Solicitud de integración, añada los siguientes Parámetros de encabezados de solicitudes de URL:
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que el método
GET /streams
. -
Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud del método
GET /streams/{stream-name}
a la solicitud de integraciónPOST /?Action=DescribeStream
:{ "StreamName": "$input.params('stream-name')" }
Esta plantilla de mapeo genera la carga de la solicitud de integración necesaria para la acción
DescribeStream
de Kinesis a partir del valor del parámetro de rutastream-name
de la solicitud de método. -
Para probar el método
GET /stream/{stream-name}
para invocar la acciónDescribeStream
en Kinesis, seleccione la pestaña Prueba. -
En Ruta, en stream-name, introduzca el nombre de un flujo de Kinesis existente.
-
Seleccione Probar. Si la prueba tiene éxito, se devuelve la respuesta 200 OK con una carga similar a la siguiente:
{ "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" } }
Después de implementar la API, puede realizar una solicitud REST a este método de la API:
GET https://
your-api-id
.execute-api.region
.amazonaws.com/stage
/streams/myStream
HTTP/1.1 Host:your-api-id
.execute-api.region
.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z
Para configurar y probar el método POST en un recurso de flujo
-
Elija el recurso /{stream-name} y, a continuación, elija Crear método.
En Tipo de método, seleccione POST.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
CreateStream
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Crear método.
-
En la sección Solicitud de integración, añada los siguientes Parámetros de encabezados de solicitudes de URL:
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que el método
GET /streams
. -
Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud del método
POST /streams/{stream-name}
a la solicitud de integraciónPOST /?Action=CreateStream
:{ "ShardCount": #if($input.path('$.ShardCount') == '') 5 #else $input.path('$.ShardCount') #end, "StreamName": "$input.params('stream-name')" }
En la plantilla de mapeo anterior, definimos
ShardCount
en un valor fijo de 5 si el cliente no especifica un valor en la carga de la solicitud de método. -
Para probar el método
POST /stream/{stream-name}
para invocar la acciónCreateStream
en Kinesis, seleccione la pestaña Prueba. -
En Ruta, en stream-name, introduzca el nombre de un flujo de Kinesis nuevo.
-
Seleccione Probar. Si la prueba tiene éxito, se devuelve una respuesta 200 OK sin datos.
Después de implementar la API, también puede realizar una solicitud de API de REST al método POST en un recurso Stream para invocar la acción
CreateStream
en Kinesis:POST https://
your-api-id
.execute-api.region
.amazonaws.com/stage
/streams/yourStream
HTTP/1.1 Host:your-api-id
.execute-api.region
.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z { "ShardCount": 5 }
Configurar y probar el método DELETE en un recurso de flujo
-
Elija el recurso /{stream-name} y, a continuación, elija Crear método.
En Tipo de método, seleccione DELETE.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
DeleteStream
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Crear método.
-
En la sección Solicitud de integración, añada los siguientes Parámetros de encabezados de solicitudes de URL:
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que el método
GET /streams
. -
Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud de método
DELETE /streams/{stream-name}
a la solicitud de integración dePOST /?Action=DeleteStream
correspondiente:{ "StreamName": "$input.params('stream-name')" }
Esta plantilla de mapeo genera la entrada necesaria de la
DELETE /streams/{stream-name}
acción desde el nombre de ruta URL proporcionada por el cliente:stream-name
. -
Para probar el método
DELETE /stream/{stream-name}
para invocar la acciónDeleteStream
en Kinesis, seleccione la pestaña Prueba. -
En Ruta, en stream-name, introduzca el nombre de un flujo de Kinesis existente.
-
Seleccione Probar. Si la prueba tiene éxito, se devuelve una respuesta 200 OK sin datos.
Después de implementar la API, también puede realizar la siguiente solicitud API de REST al método DELETE en el recurso Stream para llamar a la acción
DeleteStream
en Kinesis:DELETE https://
your-api-id
.execute-api.region
.amazonaws.com/stage
/streams/yourStream
HTTP/1.1 Host:your-api-id
.execute-api.region
.amazonaws.com Content-Type: application/json Authorization: ... X-Amz-Date: 20160323T194451Z {}
Obtención de registros y adición de registros a un flujo de Kinesis
Después de crear un flujo en Kinesis, puede agregar registros de datos al flujo y leer los datos del flujo. Agregar registros de datos implica llamar a la acción PutRecords o PutRecord de Kinesis. La primera acción añade varios registros, mientras que la última añade un solo registro al flujo.
POST /?Action=PutRecords HTTP/1.1 Host: kinesis.
region
.domain
Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes
{ "Records": [ { "Data": blob, "ExplicitHashKey": "string", "PartitionKey": "string" } ], "StreamName": "string" }
o
POST /?Action=PutRecord HTTP/1.1 Host: kinesis.
region
.domain
Authorization: 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" }
Aquí, StreamName
identifica el flujo de destino para añadir registros. StreamName
, Data
y PartitionKey
son datos de entrada necesarios. En nuestro ejemplo, usamos los valores predeterminados para todos los datos de entrada opcionales y no especificaremos de forma explícita los valores para ellos en la entrada de la solicitud del método.
Leer datos en Kinesis equivale a llamar a la acción GetRecords:
POST /?Action=GetRecords HTTP/1.1 Host: kinesis.
region
.domain
Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes
{ "ShardIterator":"string"
, "Limit":number
}
Aquí, el flujo de origen del que se obtienen los registros se especifica en el valor de ShardIterator
necesario, tal y como se muestra en la siguiente acción de Kinesis para obtener un iterador de fragmento:
POST /?Action=GetShardIterator HTTP/1.1 Host: kinesis.
region
.domain
Authorization: AWS4-HMAC-SHA256 Credential=..., ... ... Content-Type: application/x-amz-json-1.1 Content-Length:PayloadSizeBytes
{ "ShardId":"string"
, "ShardIteratorType":"string"
, "StartingSequenceNumber":"string"
, "StreamName":"string"
}
Para las acciones GetRecords
y PutRecords
, exponemos los métodos GET
y PUT
, respectivamente, en un recurso /records
que se añade a un recurso de flujo con nombre (/{stream-name}
). Del mismo modo, exponemos la acción PutRecord
como un método PUT
en un recurso /record
.
Como la acción GetRecords
toma como entrada un valor de ShardIterator
, que se obtiene llamando a la acción auxiliar GetShardIterator
, exponemos un método auxiliar GET
en un recurso ShardIterator
(/sharditerator
).
Para crear los recursos /record, /records y /sharditerator
-
Elija el recurso /{stream-name} y, a continuación, elija Crear recurso.
Mantenga Recurso proxy desactivado.
En Ruta de recurso, seleccione
/{stream-name}
.En Nombre del recurso, escriba
record
.Mantenga desactivado CORS (uso compartido de recursos entre orígenes).
Elija Crear recurso.
Repita los pasos anteriores para crear un recurso /records y un recurso /sharditerator. La API final debe ser similar a la siguiente:
Los siguientes cuatro procedimientos describen cómo configurar cada uno de los métodos, cómo asignar datos desde las solicitudes de método a las solicitudes de integración y cómo probar los métodos.
Para configurar y probar el método PUT /streams/{stream-name}/record
para invocar a PutRecord
en Kinesis
-
Elija /record y, a continuación, elija Crear método.
En Tipo de método, seleccione PUT.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
PutRecord
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Crear método.
-
En la sección Solicitud de integración, añada los siguientes Parámetros de encabezados de solicitudes de URL:
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que el método
GET /streams
. -
Añada la siguiente plantilla de mapeo de cuerpo para mapear los datos de la solicitud de método
PUT /streams/{stream-name}/record
a la solicitud de integración dePOST /?Action=PutRecord
correspondiente:{ "StreamName": "$input.params('stream-name')", "Data": "$util.base64Encode($input.json('$.Data'))", "PartitionKey": "$input.path('$.PartitionKey')" }
En esta plantilla de asignación se asume que la carga del método de solicitud tiene el siguiente formato:
{ "Data": "some data", "PartitionKey": "some key" }
Estos datos se pueden modelar mediante el siguiente esquema JSON:
{ "$schema": "http://json-schema.org/draft-04/schema#", "title": "PutRecord proxy single-record payload", "type": "object", "properties": { "Data": { "type": "string" }, "PartitionKey": { "type": "string" } } }
Puede crear un modelo para incluir este esquema y utilizar el modelo para facilitar la generación de la plantilla de asignación. Sin embargo, puede generar una plantilla de asignación sin usar ningún modelo.
-
Para probar el método
PUT /streams/{stream-name}/record
, establezca la variable de rutastream-name
en el nombre de un flujo existente, introduzca la carga del formato necesario y, a continuación, envíe la solicitud de método. El resultado correcto es una respuesta200 OK
con una carga con el formato siguiente:{ "SequenceNumber": "49559409944537880850133345460169886593573102115167928386", "ShardId": "shardId-000000000004" }
Para configurar y probar el método PUT /streams/{stream-name}/records
para invocar a PutRecords
en Kinesis
-
Elija el recurso /records y, a continuación, elija Crear método.
En Tipo de método, seleccione PUT.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
PutRecords
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Crear método.
-
En la sección Solicitud de integración, añada los siguientes Parámetros de encabezados de solicitudes de URL:
Content-Type: 'x-amz-json-1.1'
La tarea sigue el mismo procedimiento para configurar el mapeo del parámetro de solicitud que el método
GET /streams
. -
Añada la siguiente plantilla de mapeo para mapear los datos de la solicitud del método
PUT /streams/{stream-name}/records
a la solicitud de integración dePOST /?Action=PutRecords
correspondiente:{ "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 ] }
Esta plantilla de mapeo asume que el siguiente esquema JSON puede modelar la carga de la solicitud de método:
{ "$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" } } } } } }
Puede crear un modelo para incluir este esquema y utilizar el modelo para facilitar la generación de la plantilla de asignación. Sin embargo, puede generar una plantilla de asignación sin usar ningún modelo.
En este tutorial, hemos usado dos formatos de carga ligeramente diferentes para ilustrar que un desarrollador de API puede optar por exponer el formato de datos de backend al cliente u ocultárselo. Un formato es para el método
PUT /streams/{stream-name}/records
(anterior). Otro formato se utiliza en el métodoPUT /streams/{stream-name}/record
(en el procedimiento anterior). En un entorno de producción, debe mantener la coherencia de ambos formatos. -
Para probar el método
PUT /streams/{stream-name}/records
, establezca la variable de rutastream-name
en un flujo existente, introduzca la siguiente carga y envíe la solicitud del método.{ "records": [ { "data": "some data", "partition-key": "some key" }, { "data": "some other data", "partition-key": "some key" } ] }
El resultado correcto es una respuesta 200 OK con una carga similar a la siguiente:
{ "FailedRecordCount": 0, "Records": [ { "SequenceNumber": "49559409944537880850133345460167468741933742152373764162", "ShardId": "shardId-000000000004" }, { "SequenceNumber": "49559409944537880850133345460168677667753356781548470338", "ShardId": "shardId-000000000004" } ] }
Para configurar y probar el método GET /streams/{stream-name}/sharditerator
para invocar a GetShardIterator
en Kinesis
GET /streams/{stream-name}/sharditerator
es un método auxiliar para adquirir un iterador de fragmento necesario antes de llamar al método GET
/streams/{stream-name}/records
.
-
Elija el recurso /sharditerator y, a continuación, elija Crear método.
En Tipo de método, seleccione GET.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
GetShardIterator
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Parámetros de cadenas de consulta de URL.
La acción
GetShardIterator
requiere una entrada de un valor de ShardId. Para pasar un valor deShardId
proporcionado por el cliente, añadimos un parámetro de consultashard-id
a la solicitud del método, tal y como se muestra en el siguiente paso. Elija Add query string (Añadir cadena de consulta).
En Nombre, escriba
shard-id
.Mantenga desactivados Obligatorio y Almacenamiento en caché.
-
Elija Crear método.
-
En la sección Solicitud de integración, añada la siguiente plantilla de mapeo para generar la entrada requerida (
ShardId
yStreamName
) a la acciónGetShardIterator
a partir de los parámetrosshard-id
ystream-name
de la solicitud de método. Además, la plantilla de mapeo también estableceShardIteratorType
enTRIM_HORIZON
como valor predeterminada.{ "ShardId": "$input.params('shard-id')", "ShardIteratorType": "TRIM_HORIZON", "StreamName": "$input.params('stream-name')" }
-
Con la opción Test (Prueba) de la consola de API Gateway, escriba un nombre de flujo existente como el valor de la variable
stream-name
de Path (Ruta), establezcashard-id
para Query string (Cadena de consulta) en un valorShardId
existente (por ejemplo,shard-000000000004
) y elija Test (Prueba).La carga de la respuesta correcta es similar al siguiente resultado:
{ "ShardIterator": "AAAAAAAAAAFYVN3VlFy..." }
Anote el valor de
ShardIterator
. Lo necesita para obtener los registros de un flujo.
Para configurar y probar el método GET /streams/{stream-name}/records
para invocar la acción GetRecords
en Kinesis
-
Elija el recurso /records y, a continuación, elija Crear método.
En Tipo de método, seleccione GET.
En Tipo de integración, seleccione Servicio de AWS.
En Región de AWS, seleccione la Región de AWS donde creó el flujo de Kinesis.
En Servicio de AWS, seleccione Kinesis.
-
Deje Subdominio de AWS en blanco.
-
En HTTP method (Método HTTP), elija POST.
-
En Tipo de acción, elija Usar nombre de acción.
-
En Nombre de la función, introduzca
GetRecords
. -
En Rol de ejecución, escriba el ARN del rol de ejecución.
-
Deje el valor predeterminado Acceso directo en Tratamiento de contenido.
-
Elija Encabezados de solicitud HTTP.
La acción
GetRecords
requiere una entrada de un valor deShardIterator
. Para pasar un valor deShardIterator
proporcionado por el cliente, agregamos un parámetro de encabezadoShard-Iterator
a la solicitud del método. Elija Add header (Añadir encabezado).
En Nombre, escriba
Shard-Iterator
.Mantenga desactivados Obligatorio y Almacenamiento en caché.
Elija Crear método.
-
En la sección Solicitud de integración, añada la siguiente plantilla de mapeo de cuerpo para mapear el valor del parámetro de encabezado
Shard-Iterator
al valor de la propiedadShardIterator
de la carga JSON para la acciónGetRecords
en Kinesis.{ "ShardIterator": "$input.params('Shard-Iterator')" }
-
Con la opción Prueba de la consola de API Gateway, escriba un nombre de flujo existente como el valor de la variable
stream-name
de Ruta, establezca elShard-Iterator
de Encabezado en el valor deShardIterator
obtenido de la serie de pruebas del métodoGET /streams/{stream-name}/sharditerator
(arriba) y elija Prueba.La carga de la respuesta correcta es similar al siguiente resultado:
{ "MillisBehindLatest": 0, "NextShardIterator": "AAAAAAAAAAF...", "Records": [ ... ] }