<!-- Love localstack? Please consider supporting our collective:
👉  https://opencollective.com/localstack/donate -->

# Type of request: This is a ...

[ ] bug report
[X ] feature request

# Detailed description

I'm using localstack to create a dynamoDb table locally with a dynamodb stream and a flink application consuming data from the stream
The shardId created in localstack follows this format

shardId-000000000000-798cedd84a2953c5af70a131f8701f35

Flink expects this format
shardId-00000001592367572726-07776efd

The difference is just after the prefix shardId.
Normally the real shardId created by amazon use is composed by shardId prefix, 20-digit timestamp and 0-36 or more characters separated by '-'

The current shardId format is not valid for flink applications and it's not following the real pattern used by amazon

## Expected behavior

ShardId must follow the pattern
shardId prefix, 20-digit timestamp and 0-36 or more characters separated by '-'

## Actual behavior

The shardId follows the pattern
shardId prefix, 12 0s and 33 characters separated by '-'

# Steps to reproduce

Create a dynamodb table

## Command used to start LocalStack

I'm using docker and docker compose to run localstack


## Client code (AWS SDK code snippet, or sequence of "awslocal" commands)

aws --endpoint-url=http://localhost:4566 dynamodb create-table \
    --table-name temp4 \
    --attribute-definitions AttributeName=partition_key,AttributeType=S AttributeName=sort_key,AttributeType=S \
    --key-schema AttributeName=partition_key,KeyType=HASH AttributeName=sort_key,KeyType=RANGE \
    --provisioned-throughput ReadCapacityUnits=100,WriteCapacityUnits=100 \
    --stream-specification StreamEnabled=true,StreamViewType=NEW_AND_OLD_IMAGES


""" Convert message attribute details (first characters) to lower case (e.g., stringValue, dataType). """
    message_attrs = message_attrs or {}
    for _, attr in message_attrs.items():
        if not isinstance(attr, dict):
            continue
        for key, value in dict(attr).items():
            attr[first_char_to_lower(key)] = attr.pop(key)
    return message_attrs
def process_apigateway_invocation(func_arn, path, payload, stage, api_id, headers={},
                                  resource_path=None, method=None, path_params={},
                                  query_string_params=None, request_context={}):
    try:
        resource_path = resource_path or path
        path_params = dict(path_params)
        fix_proxy_path_params(path_params)
        event = {
            'path': path,
            'headers': dict(headers),
            'multiValueHeaders': multi_value_dict_for_list(headers),
            'pathParameters': path_params,
            'body': payload,
            'isBase64Encoded': False,
            'resource': resource_path,
            'httpMethod': method,
            'queryStringParameters': query_string_params,
            'multiValueQueryStringParameters': multi_value_dict_for_list(query_string_params),
            'requestContext': request_context,
            'stageVariables': get_stage_variables(api_id, stage),
        }
        return run_lambda(event=event, context={}, func_arn=func_arn,