AWS Cloud Practitioner Study Notes · Part 47

Amazon CloudWatch Hard and Soft Limits

AWS Cloud Practitioner study notes explaining CloudWatch adjustable quotas, hard limits, alarm actions, metrics, dashboards, and CloudWatch Logs filters.

Amazon CloudWatch has service quotas and functional limits. The key exam skill is knowing what to do when a limit is reached:

Adjustable quota
→ Request an increase through Service Quotas or AWS Support

Hard limit
→ Cannot be increased by a customer
→ Redesign, split, aggregate, or use another feature

This is Part 47 of the AWS Cloud Practitioner Study Notes. AWS changes service quotas over time and the quota can vary by Region or account, so use the current CloudWatch service-quota page as the authority for an actual deployment.

What is a soft limit?

In AWS terminology, an adjustable service quota is often called a soft limit. It is a default quota that AWS may increase after you submit a request.

Current CloudWatch alarm quota reached

Open Service Quotas

Request an increase for the Region

Wait for AWS approval or processing

Create more alarms if approved

The request is not always automatically approved. AWS may evaluate the account’s usage and the requested amount. A quota increase in one Region does not automatically increase the quota in every Region.

Examples of commonly adjustable CloudWatch quotas include account or Region-level resource counts and many API request rates. The current CloudWatch quota table labels each item as adjustable or not adjustable.

What is a hard limit?

A hard limit is a fixed functional or per-resource constraint that customers cannot increase through Service Quotas. When the architecture reaches it, request a different design rather than a quota increase.

One log group reaches its metric-filter limit

Quota request will not solve it

Consolidate filters, split log groups, or redesign detection

Hard does not necessarily mean that AWS can never change the product. It means that the customer cannot raise the limit for the account through the normal quota-request process.

CloudWatch quota categories

CloudWatch limits apply at different scopes. Always ask whether a number applies to:

  • The account or Region
  • One alarm
  • One dashboard
  • One log group
  • One metric expression
  • API requests per second
  • A data-query result or time-series count

This scope is often more important than the number itself.

Alarms

CloudWatch alarms evaluate metrics, expressions, or log queries and can trigger actions such as notifications, Lambda invocations, EC2 actions, Auto Scaling actions, Systems Manager actions, or investigations.

Alarm count: usually an adjustable quota

The number of alarms an account can create in a Region is an account-level quota. If a monitoring platform needs more alarms than the current quota, check the current quota’s adjustable status and request an increase when available.

5,000 alarms needed
20,000 alarms required

Check the CloudWatch quota

Request an adjustable quota increase

Do not assume that every alarm-related number is adjustable simply because the total alarm count is. Per-alarm and expression limits can be hard limits.

Alarm actions

An alarm can invoke supported actions when it changes state. Common actions include:

  • Amazon SNS notifications
  • Lambda function invocation
  • EC2 stop, terminate, reboot, or recover actions
  • Auto Scaling actions
  • Systems Manager OpsItem or Incident Manager actions
  • CloudWatch investigations where supported

The CloudWatch API supports up to five action ARNs in an alarm-action list for a state. Treat this as a per-alarm configuration limit, not as the total number of alarm actions that an account can perform.

If more than five downstream responses are required, use a fan-out design such as SNS subscribers, EventBridge rules, or a Lambda dispatcher instead of trying to attach every action directly to one alarm.

Metrics in an alarm expression

An alarm based on a metric-math expression can reference a maximum of 10 metrics. AWS documents this as a hard limit. If the logic needs more inputs:

  • Use a Metrics Insights query when the metrics fit the same query model.
  • Pre-aggregate the values into a custom metric.
  • Split the calculation across multiple alarms.
  • Combine alarms with a composite alarm.

This is a classic example of a per-resource hard limit: creating more alarms does not allow one metric-math alarm to reference more than the fixed number of metrics.

Metrics Insights alarm limits

Metrics Insights has its own limits. AWS currently documents a default of 200 Metrics Insights alarms per account per Region, along with limits on metrics matched, time series returned, and contributors in the ALARM state. These are different from the classic metric-math limit and should not be mixed together.

Dashboards

Dashboards have both account-level and per-dashboard limits.

Number of dashboards
→ Account or Region quota; commonly adjustable

Widgets in one dashboard
→ Per-dashboard functional limit; redesign if reached

The commonly memorised values are 500 dashboards per Region and 500 widgets per dashboard, but quotas and feature behavior can change. Confirm the current quota table and API documentation before relying on a number.

If one dashboard becomes too large, split it into service, team, or environment dashboards. A dashboard hierarchy or links between focused dashboards is usually easier to operate than one huge page.

Metrics and API request rates

CloudWatch separates the number of metrics from the rate at which an API can read or write data.

Custom metrics

Custom metric quotas are account and Region related and may be adjustable. Do not treat a commonly quoted custom-metric number as universal; the current quota depends on the CloudWatch feature, account, Region, and metric model.

API throttling

CloudWatch API calls such as these have request-rate quotas:

  • PutMetricData
  • GetMetricData
  • GetMetricStatistics
  • PutMetricAlarm
  • PutDashboard
  • Metric-stream operations

Many request-rate quotas are adjustable, but not all are. If an application is throttled, first determine whether the issue is an API rate quota, request payload size, datapoint quota, or a hard query limitation. Then apply retries with backoff, batching, caching, or a quota increase where appropriate.

CloudWatch Logs

CloudWatch Logs contains several important per-log-group limits.

Log groups

The number of log groups per account per Region is a quota and is currently listed as adjustable in the CloudWatch Logs quota documentation. A large organisation can request more capacity when the quota is adjustable, but should still establish log-retention and naming policies.

Metric filters: 100 per log group

CloudWatch Logs supports a maximum of 100 metric filters associated with one log group. AWS documents this as a non-adjustable quota.

Metric filters turn matching log events into CloudWatch metrics:

Application logs

Metric filter

CloudWatch custom metric

CloudWatch alarm

If one log group already has 100 filters, do not request a quota increase. Instead:

  • Consolidate related patterns.
  • Move workloads into separate log groups where appropriate.
  • Use CloudWatch Logs Insights for interactive queries.
  • Use a central log-processing pipeline.
  • Generate fewer, more useful metrics.

Be careful with high-cardinality dimensions in metric filters. They can create many custom metrics and unexpected charges.

Subscription filters

Subscription filters route log events to destinations such as Kinesis Data Streams, Firehose, Lambda, or OpenSearch Service. The commonly tested per-log-group limit is two subscription filters.

If more destinations are required, send the stream to a fan-out or delivery service rather than adding unlimited direct filters. Check the current CloudWatch Logs quota and destination behavior for the Region and architecture.

Regular-expression filter quotas

Filter patterns have their own constraints. For example, AWS documents limits on the number of regular-expression patterns in a filter and per log group. These are separate from the number of metric filters or subscription filters.

Contributor Insights and anomaly detection

Contributor Insights rules and anomaly-detection models also have quotas. The current CloudWatch quota documentation lists a default of 100 Contributor Insights rules per Region and marks that quota adjustable.

Anomaly detection has feature-specific quotas and API-rate limits. Do not assume that the number of anomaly detectors is the same as the number of alarms or custom metrics. Check the feature-specific row in the current quota table.

Hard versus soft comparison

CloudWatch resource or limitScopeTypical response
Number of alarmsAccount/RegionCheck for adjustable quota and request increase
Number of dashboardsAccount/RegionCheck quota; request increase if adjustable
Widgets in one dashboardOne dashboardSplit dashboard if fixed limit is reached
Metrics in one metric-math alarmOne alarm expressionUse query, aggregation, multiple alarms, or composite alarm
Actions in one alarm stateOne alarmFan out through SNS/EventBridge/Lambda if needed
Metric filtersOne log groupConsolidate or split log groups
Subscription filtersOne log groupFan out through a delivery architecture
API request rateAccount/Region/APIRetry, batch, throttle, or request increase if adjustable
Contributor Insights rulesAccount/RegionRequest increase if current quota is adjustable

The exact default values can change. The adjustable column in AWS’s current quota page is the source of truth.

The exam pattern: count versus attachments

A useful memory rule is:

How many resources can the account create?
→ Often an account/Region service quota
→ May be adjustable

How many things can one resource contain or reference?
→ Often a functional hard limit
→ Redesign may be required

This rule is not universal, but it helps interpret questions:

More CloudWatch alarms needed
→ Check Service Quotas

One alarm needs more metric-math inputs
→ Aggregate or split the design

One log group needs more metric filters
→ Consolidate or split the log groups

How to request an adjustable quota increase

For a quota marked adjustable:

  1. Identify the account and Region where the quota is reached.
  2. Open the Service Quotas console.
  3. Select Amazon CloudWatch or CloudWatch Logs.
  4. Find the exact quota, not just a similarly named quota.
  5. Check whether the quota is adjustable.
  6. Request the required value with a reasonable justification.
  7. Monitor the request and update deployment automation after approval.

If the quota is not available through Service Quotas, follow the AWS documentation’s Support process. A support case cannot override a documented hard functional limit.

Common exam questions

The account needs more CloudWatch alarms than the current quota. What should you do?

Check the adjustable service quota and request an increase.

A metric-math alarm needs more than 10 metrics. What should you do?

Do not request a quota increase for that hard limit. Use Metrics Insights, aggregate metrics, split alarms, or use a composite alarm.

A log group already has 100 metric filters. What should you do?

Redesign the filters or split/consolidate log groups; the per-log-group quota is not adjustable.

A dashboard needs more widgets than one dashboard allows.

Split the dashboard into focused dashboards rather than assuming an account quota increase will solve a per-dashboard limit.

What is the difference between a quota and a hard functional limit?

A quota may be adjustable for the account or Region. A hard functional limit cannot be increased by a customer and requires a design change.

Final memory sheet

Adjustable quota
→ Service Quotas / AWS Support

Hard limit
→ Redesign

Alarms, dashboards, log groups, metrics
→ Often account or Region quotas

Alarm actions, metrics in one expression,
metric filters per log group, subscription filters
→ Per-resource limits; verify whether fixed

Remember the most useful hard-limit examples: 10 metrics in a metric-math alarm, 100 metric filters per log group, and the commonly tested two subscription filters per log group. For changing account-level numbers, always verify the current AWS quota page instead of relying on an old cheat sheet.

Sources

Back to the journal