### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

cannot unmarshal number into Go struct field CloudwatchLogsLogEvent.logEvents.id of type string\"; logsEvent.AWSLogs=\"{Data:H4sIAHLYr2EC/5XRwY6CMBAG4Fchc8akUBYR48FkXU970ttiNiyMbJNCTVswG8O77wAaOXCQ3vp3Ol8nvUGJxqQFHv8uCDG8b4/b78/d4bDd78AFda1QU8xGi2Kpir1W9YVOMqnqPK2tKlMrVLXIsVlYNPZcV9miKqiyQN34XcSHmwerMS3pap+ZYeeCqX9MpsWl6/IhpEVtIP6CZ4tzH3pw6rvsGqxsV3EDkUPMQxesoFlsWtKzvJBHfrRa8ogxz33MSOYteWwSiBP4RSmVc1Va5mtHUPt+CMdLwE0AM4NVQ3VOQmKWyiHtYJFT7LXQund+Oc2vGPPn8/5LvD/io0k+oN/i83n+Es9H/Gqa9xgL5vPBS3zw5AM2zfuMvY35aW8TOoO16RnnTmxCaE/tP806IuEfAwAA}

If you base64 -d|gunzip -|jq . you will see each of the logEvents has a numeric value to the "id" field.
The Aaws PI for all releases expects ID to be string not a number.
See: https://raw.githubusercontent.com/aws/aws-lambda-go/main/events/cloudwatch_logs.go

I developed a replacement for this package and refactored my lambda to call the Parse against an ID of type int64 and my lamba worked fine.

type CloudwatchLogsLogEvent struct {
        // ID        string `json:"id"`
        ID        int64 `json:"id"`
        Timestamp int64  `json:"timestamp"`
        Message   string `json:"message"`
}




### Expected Behavior

I expect the func (c CloudwatchLogsRawData) Parse() (d CloudwatchLogsData, err error) to unmarshal ok.
I expect the ID to be a string as required by aws, but it is not; I am unsure if this is a bug in localstack or the aws golang code.

### How are you starting LocalStack?

With a `docker run` command

### Steps To Reproduce

#### How are you starting localstack (e.g., `bin/localstack` command, arguments, or `docker-compose.yml`)

docker run --privileged --rm $-d --name localstack -v "/var/run/docker.sock:/var/run/docker.sock" -e DOCKER_HOST=unix:///var/run/docker.sock -e DEBUG=1 -e LAMBDA_EXECUTOR=docker -e HOSTNAME_EXTERNAL=localstack -p 4566:4566 -p 4571:4571 localstack/localstack:latest

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

alias AWSBASECMD="docker run --rm --network=host -v $(pwd):$(pwd) -w $(pwd) -e AWS_DEFAULT_REGION=us-east-1 -e AWS_ACCESS_KEY_ID=test -e AWS_SECRET_ACCESS_KEY=test amazon/aws-cli:2.2.8 --endpoint-url=http://localhost:4566"

I am not attaching the entire golang lambda impl, but the gist is

```
import  "github.com/aws/aws-lambda-go/events"
import "github.com/aws/aws-lambda-go/lambda"

func main() {
        lambda.Start(HandleRequest)
}
func HandleRequest(ctx context.Context, logsEvent events.CloudwatchLogsEvent) {
        fmt.Fprintf(os.Stderr, "In ngloggerv2 HandleRequest\n")
        data, err := logsEvent.AWSLogs.Parse() //  data CloudwatchLogsData
        if err != nil {
                // The aws CloudwatchLogsEvent parsing fails because there is an ID string field in CloudwatchLogsLogEvent but is passed in as an int
                fmt.Fprintf(os.Stderr, "Warning: The parsing of the CloudwatchLogsEvent returned error \"%+v\"; logsEvent.AWSLogs=\"%+v\"\n", err, logsEvent.AWSLogs)
                err = nil
        }
}
```

docker run -v $(pwd):$(pwd) -w $(pwd) -e GOPROXY=direct -e GOOS=linux golang:1.17.1 go build -o ngloggerv2 *.go
docker run -v $(pwd):$(pwd) -w $(pwd) kramos/alpine-zip ngloggerv2.zip ngloggerv2
AWSBASECMD lambda create-function --function-name=ngloggerv2 --runtime=go1.x --role=fakerole --handler=ngloggerv2 --region=us-east-1 --zip-file fileb://ngloggerv2.zip

OSXRMAURMBP16:localstack rmauri$ cat testdata/localstacktest3-input.json
[
{
    "timestamp": 1638289738001,
    "message": "{\"message\":\"hello world; iteration 1\",\"ecsenv\": \"local\",\"eventid\":1}"
},
{
    "timestamp": 1638289739002,
    "message": "{\"message\":\"hello world; iteration 2\",\"ecsenv\": \"local\",\"eventid\":2}"
},
{
    "timestamp": 1638289740003,
    "message": "{\"message\":\"hello world; iteration 3\",\"ecsenv\": \"local\",\"eventid\":3}"
},
{
    "timestamp": 1638289741004,
    "message": "{\"message\":\"hello world; iteration 4\",\"ecsenv\": \"local\",\"eventid\":4}"
},
{
    "timestamp": 1638289742005,
    "message": "hello world; iteration=6 ecsenv=local eventid=6"
}
]

Then I execute this shell script which sets up a subscription filter between lambda and cloudwatch logs and then aws logs put-log-events.

The lambda writes to stderr, which goes to cloudwatchlogs and the test script reads the log entries and writes out as follows.
Notice the error about json unmarshaling.

$ ./localstacktest-ngloggerv2.sh test3
The /aws/lambda/ngloggerv2 streams (stdout/err output from ngloggerv2) are:
STREAMS={
    "logStreams": [
        {
            "logStreamName": "2021/12/07/[LATEST]99ecd653",
            "creationTime": 1638915982672,
            "firstEventTimestamp": 1638915982638,
            "lastEventTimestamp": 1638915982680,
            "lastIngestionTime": 1638915982692,
            "uploadSequenceToken": "1",
            "arn": "arn:aws:logs:us-east-1:000000000000:log-group:/aws/lambda/ngloggerv2:log-stream:2021/12/07/[LATEST]99ecd653",
            "storedBytes": 8237
        }
    ]
}
{
    "events": [
        {
            "timestamp": 1638915982638,
            "message": "\u001b[32mSTART RequestId: f7f3fc97-fd8b-1bb3-7ee6-0036411dede3 Version: $LATEST",
            "ingestionTime": 1638915982692
        },
        {
            "timestamp": 1638915982639,
            "message": "\u001b[0m",
            "ingestionTime": 1638915982692
        },
        {
            "timestamp": 1638915982641,
            "message": "In ngloggerv2 HandleRequest",
            "ingestionTime": 1638915982692
        },
        {
            "timestamp": 1638915982642,
            "message": "Warning: The parsing of the CloudwatchLogsEvent returned error \"json: cannot unmarshal number into Go struct field CloudwatchLogsLogEvent.logEvents.id of type string\"; logsEvent.AWSLogs=\"{Data:**H4sIAI3fr2EC/5XRwY6CMBAG4Fchc4akUETFeCBZ19Oe9LaYDQsj26RQ0xbMxvDuO4BmOXDQ3vp3Ol8nvUGFxmQlHn8vCDG8Jcfk62N3OCT7HbigrjVqitlkUSxVudequdBJLlVTZI1VVWaFqr0CW8+iseemzr26pMoSdRv0ER9vHqzGrKKrQ2bGnQum+Ta5Fpe+y7uQFrWB+BP+W5yH0IfT0GXXYm37ihuIAmLOXbCCZrFZRc/yI74KVuslXzHmu48Zybylj00KcQo/KKVyrkrLYuMIaj8M4fgpuClgbrBuqc5JScwzOaY9LAqK/Q46986H8/yaseB1PniKDyb8YpYP6bf46zx/iucTPprnfcbC1/nwKT6c8Mt5PmBsMeXnvW3kjNZ2YJw7sY2gO3V/P9lT3B8DAAA=**}\"",
            "ingestionTime": 1638915982692
        },.....
        
        See attached zip file containing the test client.
[localstacktest-ngloggerv2.zip](https://github.com/localstack/localstack/files/7672027/localstacktest-ngloggerv2.zip)

        
        

### Environment

```markdown
- OS: macos running localstack docker and client running aws-cli docker image
- LocalStack:
```


### Anything else?

_No response_
def __init__(self, regex: str | Pattern[str], replacement: str):
        self.regex = regex
        self.replacement = replacement
    def transform(self, input_data: dict, *, ctx: TransformContext) -> dict:
        compiled_regex = re.compile(self.regex) if isinstance(self.regex, str) else self.regex
        def _regex_replacer_helper(pattern: Pattern[str], repl: str):
            def replace_val(s):
                result = re.sub(pattern, repl, s)
                if result != s:
                    LOG.debug(f"Replacing regex '{pattern.pattern}' with '{repl}'")
                else:
                    LOG.debug(f"No match found for regex '{pattern.pattern}'")
                return result
            return replace_val
        ctx.register_serialized_replacement(
            _regex_replacer_helper(compiled_regex, self.replacement)
        )
        LOG.debug(
            f"Registering regex pattern '{compiled_regex.pattern}' in snapshot with '{self.replacement}'"
        )
        return input_data
class KeyValueBasedTransformer: