Skip to content
Back to main site

Amazon Kinesis Data Streams

Create streams, write records and read the stored bytes through shard iterators.

Plan: Pro38 of 45 operations implemented1Known difference

SplitShard is not served, and MillisBehindLatest behaved like a remaining-record count rather than elapsed milliseconds.

Example checked on Vera 1.2.2, 8 November 2026. Each coverage note names its own evidence and date.

Activate your license key and start the emulator with the Vera launcher, as in Activate Pro, then run this in a terminal of its own, from an empty scratch directory. It gives the official AWS CLI dummy credentials and a config file of its own, so no AWS account is needed and your own AWS profile isn't touched.

Terminal window
export VERA_ENDPOINT="http://localhost:5003"
export AWS_ACCESS_KEY_ID=test AWS_SECRET_ACCESS_KEY=test
export AWS_REGION=us-east-1 AWS_DEFAULT_REGION=us-east-1
export AWS_SHARED_CREDENTIALS_FILE=/dev/null
export AWS_EC2_METADATA_DISABLED=true
export AWS_PAGER="" AWS_CLI_AUTO_PROMPT=off
unset AWS_PROFILE AWS_DEFAULT_PROFILE
unset AWS_SESSION_TOKEN AWS_SECURITY_TOKEN
unset AWS_WEB_IDENTITY_TOKEN_FILE AWS_ROLE_ARN AWS_ROLE_SESSION_NAME
unset AWS_CONTAINER_CREDENTIALS_FULL_URI
unset AWS_CONTAINER_CREDENTIALS_RELATIVE_URI
cat > vera-aws-config <<'EOF'
[default]
region = us-east-1
output = json
cli_binary_format = base64
s3 =
addressing_style = path
EOF
export AWS_CONFIG_FILE="$PWD/vera-aws-config"

When you've finished every example in this terminal, close it and delete vera-aws-config, not before.

Use the AWS CLI’s kinesis commands. The emulator serves the 2013-12-02 API over the AWS JSON protocol.

A record’s data is bytes. The example writes them to record.bin and passes the file as fileb://, which the AWS CLI reads as raw bytes.

Create a stream with one shard and describe it, write example.net to it, then read the record back from the start of the shard. The shard iterator is kept in ITERATOR.

Terminal window
printf %s example.net > record.bin
aws --endpoint-url "$VERA_ENDPOINT" kinesis create-stream \
--stream-name vera-docs-stream --shard-count 1
aws --endpoint-url "$VERA_ENDPOINT" kinesis describe-stream --stream-name vera-docs-stream
aws --endpoint-url "$VERA_ENDPOINT" kinesis put-record --stream-name vera-docs-stream \
--partition-key docs --data fileb://record.bin
ITERATOR=$(aws --endpoint-url "$VERA_ENDPOINT" kinesis get-shard-iterator \
--stream-name vera-docs-stream --shard-id shardId-000000000000 \
--shard-iterator-type TRIM_HORIZON --query ShardIterator --output text)
aws --endpoint-url "$VERA_ENDPOINT" kinesis get-records --shard-iterator "$ITERATOR" --limit 10

get-records returns the stored record. ZXhhbXBsZS5uZXQ= is example.net in base64: the bytes that were written. These are selected fields; the ApproximateArrivalTimestamp differs on every run.

Output (selected fields)
{
"Records": [
{
"SequenceNumber": "1",
"ApproximateArrivalTimestamp": "2026-11-05T20:37:24+00:00",
"Data": "ZXhhbXBsZS5uZXQ=",
"PartitionKey": "docs",
"EncryptionType": "NONE"
}
],
"NextShardIterator": "iterator:shardId-000000000000:1",
"MillisBehindLatest": 0
}

To clean up, delete the stream and the record file:

Terminal window
aws --endpoint-url "$VERA_ENDPOINT" kinesis delete-stream --stream-name vera-docs-stream
rm record.bin
  • Streams with a shard count, described and deleted. A new stream is ACTIVE at once.
  • Writing and reading records: PutRecord stores a record’s bytes, and GetRecords returns them through a TRIM_HORIZON shard iterator, with an iterator for the next read.
  • Batch writes and shards: in a supplemental test, all three records of a PutRecords batch were returned, ListShards returned the stream’s shard, and reading on with the next iterator returned the remaining records.
  • Also served, not checked in Vera 1.2.0 preview or Vera 1.2.0-rc.3: merging shards and changing shard counts, retention periods, encryption, enhanced fan-out consumers and SubscribeToShard, stream modes, resource policies, tags and enhanced monitoring.

The main limits are below. A few more apply to every service, and the API coverage notes cover smaller differences.

  • SplitShard isn’t served. A valid split request returned HTTP 400 UnknownOperationException. Earlier testing also found UpdateStreamRecordDistributionStrategy and the channel operations, CreateChannel, DeleteChannel, DescribeChannel, ListChannels and UpdateChannel, not served.
  • MillisBehindLatest counts records, not milliseconds. With six records stored, a read with Limit 1 reported 5. The same iterator still reported 5 after 1.5 seconds, and the next read, with Limit 2, reported 3, with three records left. Don’t use it as a measure of lag in time. This was seen on the tested iterator path; retention and resharding cases weren’t checked.
  • No throughput or timing. Throughput limits, throttling, large payloads, retention and iterator expiry, enhanced fan-out and encryption weren’t established.

AWS defines MillisBehindLatest as a time lag in its GetRecords reference.

Every operation in AWS's published 2013-12-02 API (SDK model, botocore 1.43.105), and whether the emulator implements it. Availability combines the earlier implementation inventory with the dated observations below; checking a page's example does not verify every operation. Each note names its evidence first; an observation given without a build or date comes from earlier testing, on 3 November 2026. What the statuses mean

OperationStatusNotes
AddTagsToStreamImplemented
CreateChannelNot implemented
CreateStreamImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Created a one-shard stream, ACTIVE at once.
DecreaseStreamRetentionPeriodImplemented
DeleteChannelNot implemented
DeleteResourcePolicyImplemented
DeleteStreamImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Deleted the example's stream.
DeregisterStreamConsumerImplemented
DescribeAccountSettingsImplemented
DescribeChannelNot implemented
DescribeLimitsImplemented
DescribeStreamImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Described the example's stream.
DescribeStreamConsumerImplemented
DescribeStreamSummaryImplemented
DisableEnhancedMonitoringImplemented
EnableEnhancedMonitoringImplemented
GetRecordsKnown differenceLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned the stored record bytes. MillisBehindLatest behaved like a count of remaining records, not elapsed milliseconds: with six records stored, a Limit 1 read reported 5, the same iterator still reported 5 after 1.5 seconds, and a following Limit 2 read reported 3 with three records left. This resolves the earlier unverified inference from source review.
GetResourcePolicyImplemented
GetShardIteratorImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned a TRIM_HORIZON iterator that read the stream's records from the start.
IncreaseStreamRetentionPeriodImplemented
ListChannelsNot implemented
ListShardsImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Returned the stream's shard.
ListStreamConsumersImplemented
ListStreamsImplemented
ListTagsForResourceImplemented
ListTagsForStreamImplemented
MergeShardsImplemented
PutRecordImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — Stored the record's bytes, which GetRecords returned unchanged.
PutRecordsImplementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — All three records of a batch were stored and read back.
PutResourcePolicyImplemented
RegisterStreamConsumerImplemented
RemoveTagsFromStreamImplemented
SplitShardNot implementedLocal observation: Vera 1.2.0 preview, 5 November 2026 — A valid split request returned HTTP 400 UnknownOperationException.
StartStreamEncryptionImplemented
StopStreamEncryptionImplemented
SubscribeToShardImplemented
TagResourceImplemented
UntagResourceImplemented
UpdateAccountSettingsImplemented
UpdateChannelNot implemented
UpdateMaxRecordSizeImplemented
UpdateShardCountImplemented
UpdateStreamModeImplemented
UpdateStreamRecordDistributionStrategyNot implemented
UpdateStreamWarmThroughputImplemented