Vortos
AWS SES

Rate Limits, Failover, Observability

Production tuning for SES throughput, multi-region fallback, logs, metrics, and tracing.

Rate Limits, Failover, Observability

Rate Limits

SES accounts have send-rate quotas. Configure Vortos to match your account instead of discovering the limit through throttling.

config/aws_ses.php
$config->rateLimit()
    ->maxSendRate(14)
    ->burst(14)
    ->waitTimeoutMs(5000);

Check provider quota:

php bin/console vortos:ses:quota

Best practices:

  • Start with one relay worker.
  • Match maxSendRate() to the lowest SES quota across active regions.
  • Increase worker count only after observing database locks, outbox lag, provider throttles, and application metrics.
  • Treat throttling as a capacity signal, not a normal control loop.

Multi-Region Failover

Set a fallback SES region:

$config
    ->region('us-east-1')
    ->fallbackRegion('us-west-2');

The circuit breaker prevents repeated attempts against a failing region:

$config->circuitBreaker()
    ->failureThreshold(5)
    ->resetTimeoutSeconds(60);

Verify identities in every sending region

SES identity verification, DKIM, configuration sets, and production access are region-specific. A fallback region that is not fully configured is not a real fallback.

Observability Defaults

The package integrates with the framework logger, tracing, and metrics packages. All are enabled by default at the SES package level.

$config->observability()
    ->logging(true)
    ->tracing(true)
    ->metrics(true);

Global opt-out:

$config->observability()
    ->logging(false)
    ->tracing(false)
    ->metrics(false);

Section-level opt-out:

use Vortos\AwsSes\Config\AwsSesObservabilitySection;

$config->observability()
    ->disableLoggingFor(AwsSesObservabilitySection::RateLimit)
    ->disableTracingFor(AwsSesObservabilitySection::Webhook)
    ->disableMetricsFor(AwsSesObservabilitySection::Audit);

Typed sections:

  • Send
  • Outbox
  • Webhook
  • Suppression
  • RateLimit
  • Audit

Operational Signals

Track at least:

  • Outbox pending count.
  • Oldest pending outbox age.
  • Relay success and failure counts.
  • Provider throttles.
  • Suppressed recipient rejections.
  • Bounce and complaint counts.
  • Send latency by driver and region.

Privacy

Email addresses are personal data. Keep logs and traces high-signal but avoid putting full message bodies or sensitive payloads into log lines. Use IDs, hashes, or domain-level counters where possible.

On this page