In this quickstart, you’ll create a real-time data pipeline that streams changes from a Postgres database to an Amazon Kinesis data stream. You’ll:

  • Set up a Kinesis stream using the AWS CLI
  • Create an IAM user with the minimal required permissions
  • Boot Sequin and connect to a sample playground database
  • Configure Sequin to stream database changes to your Kinesis stream
  • See your changes flow in real-time

By the end, you’ll have hands-on experience setting up Postgres change data capture (CDC) with Sequin and Kinesis.

Prerequisites

  • AWS CLI installed and configured with your AWS credentials
  • An AWS account with permissions to create Kinesis streams and IAM users

Step 1: Set up your Kinesis stream

First, let’s create a Kinesis stream and the necessary AWS resources using the AWS CLI.

1

Create a Kinesis stream

Run this command to create a new Kinesis stream called sequin-quickstart:

aws kinesis create-stream \
  --stream-name sequin-quickstart \
  --shard-count 1

Wait for the stream to become active (this takes about 1-2 minutes):

aws kinesis describe-stream --stream-name sequin-quickstart

Look for "StreamStatus": "ACTIVE" in the response.

2

Get your stream ARN

Once active, note down your stream ARN from the describe-stream output. It will look like:

arn:aws:kinesis:us-east-1:123456789012:stream/sequin-quickstart

You can also get just the ARN with:

aws kinesis describe-stream --stream-name sequin-quickstart --query 'StreamDescription.StreamARN' --output text
3

Create an IAM policy

Create a policy file called sequin-kinesis-policy.json:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "kinesis:PutRecords",
        "kinesis:DescribeStream"
      ],
      "Resource": "arn:aws:kinesis:*:*:stream/sequin-quickstart"
    }
  ]
}

Create the policy in AWS:

aws iam create-policy \
  --policy-name SequinKinesisPolicy \
  --policy-document file://sequin-kinesis-policy.json

Note the policy ARN from the response - you’ll need it in the next step.

4

Create an IAM user

Create a dedicated IAM user for Sequin:

aws iam create-user --user-name sequin-kinesis-user

Attach the policy to the user (replace YOUR_ACCOUNT_ID with your AWS account ID):

aws iam attach-user-policy \
  --user-name sequin-kinesis-user \
  --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/SequinKinesisPolicy

If you don’t have your account ID handy, you can ask AWS like this:

aws sts get-caller-identity --query Account --output text
5

Create access keys

Generate access keys for the user:

aws iam create-access-key --user-name sequin-kinesis-user

Important: Save the AccessKeyId and SecretAccessKey from the response - you’ll need these for Sequin configuration and they won’t be shown again.

Run Sequin

The easiest way to get started with Sequin is with our Docker Compose file. This file starts a Postgres database, Redis instance, and Sequin server.

1

Create directory and start services

  1. Download sequin-docker-compose.zip.
  2. Unzip the file.
  3. Navigate to the unzipped directory and start the services:
cd sequin-docker-compose && docker compose up -d
2

Verify services are running

Check that Sequin is running using docker ps:

docker ps

You should see output like the following:

CONTAINER ID   IMAGE                           COMMAND                  CREATED          STATUS                    PORTS                              NAMES
bd5c458cabde   sequin/sequin:latest            "/scripts/start_comm…"   11 seconds ago   Up 9 seconds              4000/tcp, 0.0.0.0:7376->7376/tcp   sequin-sequin-1
3bacd89765e7   grafana/grafana                 "/run.sh"                11 seconds ago   Up 11 seconds             0.0.0.0:3000->3000/tcp             sequin-sequin_grafana-1
3ad41319a66c   postgres:16                     "docker-entrypoint.s…"   11 seconds ago   Up 11 seconds (healthy)   0.0.0.0:7377->5432/tcp             sequin-sequin_postgres-1
6139a5fc4e80   redis:7                         "docker-entrypoint.s…"   11 seconds ago   Up 11 seconds             0.0.0.0:7378->6379/tcp             sequin-sequin_redis-1
7e07a5b052de   prom/prometheus                 "/bin/prometheus --c…"   11 seconds ago   Up 11 seconds             0.0.0.0:9090->9090/tcp             sequin-sequin_prometheus-1

Sequin, Postgres, Redis, Prometheus, and Grafana should be up and running (status: Up).

Login

The Docker Compose file automatically configures Sequin with an admin user and a playground database.

Let’s log in to the Sequin web console:

1

Open the web console

After starting the Docker Compose services, open the Sequin web console at http://localhost:7376:

2

Login with default credentials

Use the following default credentials to login:

  • Email:
admin@sequinstream.com
  • Password:
sequinpassword!

View the playground database

To get you started quickly, Sequin’s Docker Compose file creates a logical database called sequin_playground with a sample dataset in the public.products table.

Let’s take a look:

1

Navigate to Databases

In the Sequin web console, click Databases in the sidebar.

2

Select playground database

Click on the pre-configured sequin-playground database:

The database “Health” should be green.

3

View contents of the products table

Let’s get a sense of what’s in the products table. Run the following command:

docker exec -i sequin-sequin_postgres-1 \
  psql -U postgres -d sequin_playground -c \
  "select id, name, price from products;"

This command connects to the running Postgres container and runs a psql command.

You should see a list of the rows in the products table:

id |         name          | price 
----+-----------------------+-------
  1 | Avocados (3 pack)     |  5.99
  2 | Flank Steak (1 lb)    |  8.99
  3 | Salmon Fillet (12 oz) | 14.99
  4 | Baby Spinach (16 oz)  |  4.99
  5 | Sourdough Bread       |  6.99
  6 | Blueberries (6 oz)    |  3.99
(6 rows)

We’ll make modifications to this table in a bit.

Create a Kinesis Sink

With the playground database connected, create a sink that will send changes to your Kinesis stream:

1

Navigate to Sinks

Click “Sinks” in the sidebar navigation, then click “Create Sink”.

2

Select sink type

Select “Amazon Kinesis” as the sink type and click “Continue”.

3

Note "Source" configuration

In the “Source” card, note that the sequin-playground database and products table are pre-selected. Leave these defaults:

4

Setup a backfill

Toggle open the “Initial backfill” card and select “Backfill all rows”:

5

Configure Kinesis connection

In the Kinesis configuration card, enter:

  • Stream ARN: The ARN you noted from Step 1 (e.g., arn:aws:kinesis:us-east-1:123456789012:stream/sequin-quickstart)
  • AWS Access Key ID: The AccessKeyId from Step 1
  • AWS Secret Access Key: The SecretAccessKey from Step 1
  • AWS Region: The region where you created your stream (e.g., us-east-1)
6

Create the sink

Click “Create Sink” to finish setting up your Kinesis sink.

See changes flow to your Kinesis stream

On the new sink’s overview page, you should see the “Health” status turn green, indicating data is flowing to your stream.

1

Messages tab

Click the “Messages” tab to see recently delivered messages.

2

Verify in AWS (optional)

You can also verify data is flowing by checking your Kinesis stream in the AWS Console or using the CLI:

aws kinesis get-records \
  --shard-iterator $(aws kinesis get-shard-iterator \
    --stream-name sequin-quickstart \
    --shard-id shardId-000000000000 \
    --shard-iterator-type TRIM_HORIZON \
    --query 'ShardIterator' --output text) \
  --query 'Records[0].Data' --output text | base64 -d

Great work!

You’ve successfully:

  • Created a Kinesis stream with the AWS CLI
  • Set up an IAM user with minimal required permissions
  • Connected Sequin to stream Postgres changes to Kinesis
  • Loaded existing data through a backfill
  • Verified changes are flowing to your Kinesis stream

Clean up (optional)

If you want to clean up the AWS resources created in this quickstart:

# Delete the Kinesis stream
aws kinesis delete-stream --stream-name sequin-quickstart

# Detach policy from user
aws iam detach-user-policy \
  --user-name sequin-kinesis-user \
  --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/SequinKinesisPolicy

# Delete access key (replace with your actual access key ID)
aws iam delete-access-key \
  --user-name sequin-kinesis-user \
  --access-key-id YOUR_ACCESS_KEY_ID

# Delete user and policy
aws iam delete-user --user-name sequin-kinesis-user
aws iam delete-policy --policy-arn arn:aws:iam::YOUR_ACCOUNT_ID:policy/SequinKinesisPolicy

Ready to stream

Now you’re ready to connect your own database to Sequin and start streaming changes: