### Is there an existing issue for this?

- [X] I have searched the existing issues

### Current Behavior

When calling 

`cloudWatchClient.EnableAlarmActions(&cloudwatch.EnableAlarmActionsInput{AlarmNames: alarmNames})`

with golang I receive a SerializationError with bytes in the error message saying: 

`<!DOCTYPE HTM |UBLIC "-//W3C//DTD HTML 3.2 Final//EN">.<title>500 Internal Server Error</title>.<h1>Internal Server Error</h1>.<p>The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.`

I believe this is a bug, since other cloudwatch operations like "DescribeAlarms" work flawlessly with the same client.

### Expected Behavior

I expected the call to go through without any errors

### How are you starting LocalStack?

With a `docker run` command

### Steps To Reproduce

Start localstack, create alarms and call cloudwatch "EnableAlarmActions"

### Environment

_No response_

### Anything else?

_No response_
"""
    Checks if a premature alarm should be triggered.
    https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/AlarmThatSendsEmail.html#CloudWatch-alarms-avoiding-premature-transition:
    [...] alarms are designed to always go into ALARM state when the oldest available breaching datapoint during the Evaluation
    Periods number of data points is at least as old as the value of Datapoints to Alarm, and all other more recent data
    points are breaching or missing. In this case, the alarm goes into ALARM state even if the total number of datapoints
    available is lower than M (Datapoints to Alarm).
    This alarm logic applies to M out of N alarms as well.
    """
    treat_missing_data = alarm_details.get("TreatMissingData", "missing")
    if treat_missing_data not in ("missing", "ignore"):
        return False
    datapoints_to_alarm = alarm_details.get("DatapointsToAlarm", 1)
    if datapoints_to_alarm > 1:
        comparison_operator = alarm_details["ComparisonOperator"]
        threshold = alarm_details["Threshold"]
        oldest_datapoints = metric_values[:-datapoints_to_alarm]
        if oldest_datapoints.count(None) == len(oldest_datapoints):
            if metric_values[-datapoints_to_alarm] and COMPARISON_OPS.get(comparison_operator)(
                metric_values[-datapoints_to_alarm], threshold
            ):
                values = list(filter(None, metric_values[len(oldest_datapoints) :]))
                if all(
                    COMPARISON_OPS.get(comparison_operator)(value, threshold) for value in values
                ):
                    return True
    return False
def collect_metric_data(alarm_details: MetricAlarm, client: "CloudWatchClient") -> List[float]: