Cloud Architecture Strategy

Managed Services Strategy

A framework for deciding when to use managed cloud services versus self-hosted infrastructure, weighing operational burden reduction against vendor dependency, feature parity, and total cost of ownership.

⏱ 10 min read

What it is

Managed services are cloud provider-operated versions of infrastructure components: Amazon RDS and Aurora instead of self-hosted MySQL/PostgreSQL on EC2; Amazon MSK or Confluent Cloud instead of self-hosted Kafka on EC2; Amazon ElastiCache instead of self-hosted Redis; Amazon OpenSearch Service instead of self-managed Elasticsearch. The provider handles provisioning, patching, automated backups, HA failover, scaling, monitoring, and in some cases, schema migrations. The customer pays a premium (typically 2–4× the EC2 cost of self-hosting) in exchange for dramatically reduced operational responsibility.

The "build vs buy" decision for infrastructure is distinct from the software equivalent. When Amazon offers a managed MySQL-compatible database (Aurora), the question is not about software ownership but operational ownership: does your organisation have the expertise, on-call rotation, tooling, and willingness to wake up at 3 AM to diagnose a Kafka broker failure, or would that engineering capacity be better spent on the product? For most product-focused engineering teams, the answer skews heavily toward managed services — unless the workload has characteristics (extreme performance, unique customisation, regulatory constraints, cost at scale) that the managed service cannot accommodate.

Why it exists

Operating distributed infrastructure is genuinely hard. Running a production Kafka cluster requires understanding replica reassignment, broker upgrades with zero downtime, ISR (in-sync replica) shrinkage, disk capacity planning, consumer group lag monitoring, and TLS certificate rotation. Amazon MSK handles all of this. The fully-loaded engineering cost of one experienced Kafka operator (salary + benefits + overhead) is approximately $200–300K/year; MSK for a production 3-broker cluster with 1 TB storage is ~$800–1,500/month. The TCO favours MSK significantly until your Kafka cluster is large enough that the MSK broker premium ($0.21/hour/broker) exceeds the cost of a dedicated platform team.

Lock-in is the genuine concern. Aurora uses a custom storage engine incompatible with vanilla MySQL replication tools; migrating off Aurora to self-hosted MySQL requires a logical dump-and-restore (potentially days of downtime or complex CDC migration for large databases). ElastiCache Redis cluster mode configurations differ from OSS Redis in replication topology. The managed service may lag behind the open-source project on features: ElastiCache Redis was on Redis 6.x for years while OSS Redis shipped 7.x. Understand the lock-in surface before committing, and verify that the feature parity gap does not affect your use case.

When to use

  • Your team lacks deep operational expertise in the technology (e.g., a startup using Kafka without Kafka specialists on staff).
  • The operational overhead of the self-hosted version would require dedicated headcount that would exceed the managed service premium cost.
  • High-availability requirements demand features the managed service provides natively (automated multi-AZ failover, automated backups, point-in-time recovery) that would require significant engineering to replicate self-hosted.
  • The technology is undifferentiated infrastructure — a PostgreSQL database, a Redis cache, an SMTP relay — where custom configuration or performance tuning provides no competitive advantage.
  • Compliance requirements (SOC2, PCI-DSS) make it advantageous to rely on the provider's compliance certifications rather than audit self-hosted infrastructure independently.

When not to use

  • Extreme cost at scale: At large volume (e.g., hundreds of TB on RDS, thousands of Kafka partitions), the managed service premium becomes the dominant cost line; self-hosting with a dedicated platform team becomes economically justified.
  • Feature parity gaps: If your use case requires a specific Kafka feature (KRaft mode without ZooKeeper, Tiered Storage), ElasticSearch feature (newer vector search API), or Redis module (RedisGraph, RedisBloom) that the managed service does not support on the current version.
  • Regulatory data residency: Some highly regulated industries require infrastructure operated entirely within the customer's VPC with no data plane access by the provider — managed services do not satisfy this requirement.
  • Hybrid or on-premises workloads: Managed cloud services cannot be deployed on-premises; if part of your workload must remain in a data centre (latency, sovereignty), self-hosted infrastructure is required for consistency.

Typical architecture

Managed Services Decision Matrix
─────────────────────────────────────────────────────────
Component         Managed Option         Self-Hosted Risk
─────────────────────────────────────────────────────────
Kafka             MSK / Confluent Cloud   Broker failover
                                          Partition rebalance
                                          Disk ops
PostgreSQL        RDS / Aurora            HA setup, patching
                                          Backup/restore
Redis cache       ElastiCache             Cluster mode config
                                          Sentinel setup
Search engine     OpenSearch Service      Shard rebalancing
                                          Version upgrades
Data warehouse    Redshift / BigQuery     Vacuum, analyse ops

TCO Framework (simplified)
─────────────────────────────────────────────────────────
  Self-hosted TCO = EC2 cost
                  + engineering time (ops hours × rate)
                  + incident cost (MTTR × engineer rate)
                  + tooling / monitoring
                  + capacity over-provisioning buffer

  Managed TCO    = Service fee (typically 2-4× EC2 cost)
                  + learning curve (one-time)

  Break-even: managed is cost-efficient until:
  (Service premium / hourly eng cost) > ops hours saved/month

Pros and cons

Pros

  • Eliminates entire categories of operational work: patching, backup validation, HA failover testing, certificate rotation.
  • Provider SLAs (RDS 99.95%, MSK 99.9%) come with financial credits — self-hosted SLAs are constrained by your team's on-call capability.
  • Native integration with IAM, CloudTrail, CloudWatch, VPC — security posture and observability are significantly easier than for self-hosted equivalents.
  • Enables rapid scaling without pre-provisioning — Aurora storage grows automatically, ElastiCache nodes can be added within minutes.
  • Reduces cognitive load on development teams who should focus on product, not infrastructure.

Cons

  • Vendor lock-in: migration away from Aurora, MSK, or DynamoDB requires significant re-engineering and downtime risk.
  • Feature lag: managed versions typically trail the open-source project by 6–18 months on major version upgrades.
  • Limited customisation: kernel parameters, storage engine settings, and advanced configuration options available in self-hosted are restricted or unavailable.
  • Premium pricing: managed services cost 2–4× the equivalent EC2 capacity; at large scale this can be tens of thousands of dollars per month.
  • Reduced control over maintenance windows: provider-scheduled maintenance can cause brief disruptions even when configured for preferred windows.

Implementation notes

Before selecting a managed service, build a lock-in risk matrix: identify which proprietary features you plan to use (Aurora Global Database, MSK Tiered Storage, DynamoDB Streams), and verify what migration path exists if you need to move away. For databases, the migration path from Aurora to self-hosted is a logical pg_dump + pg_restore with CDC replay for near-zero-downtime migrations — document this and test it before you have 10 TB in Aurora, not after. Consider the open-source bridge options: Amazon MSK is standard Kafka wire protocol-compatible — your consumers and producers work without modification on self-hosted Kafka if you need to migrate. ElastiCache Redis is protocol-compatible with OSS Redis — the migration path is a DUMP/RESTORE or active-active replication using Redis replication.

For total cost of ownership, include fully-loaded engineering cost in the calculation. Track ops toil hours per infrastructure component via a simple on-call rotation log: if your team spends 20 hours/month on Kafka operations and your blended engineering rate is $200/hour, that's $4,000/month of hidden cost for self-hosted Kafka. MSK for equivalent capacity at $1,200/month is the clearly superior option. Re-evaluate TCO annually as the workload scales — decisions that are correct at $10K/month cloud spend may need revisiting at $1M/month.

Common failure modes

  • Lock-in discovered too late: A feature is used that is not available on the open-source equivalent (e.g., Aurora Fast Cloning, DynamoDB TTL with Streams) making migration prohibitively expensive; evaluate portability before committing to proprietary features.
  • Managed version too far behind: Selecting ElastiCache or RDS assuming it will keep pace with open-source — then discovering a critical security fix or feature requires a version not yet available in the managed service.
  • Cost shock at scale: MSK broker costs ($0.21/hour × 3 brokers × 720 hours = $453/month) seem reasonable at design time; after a year of organic data growth, 20 broker instances cost $3,000+/month; no capacity model was built because "managed = automatic."
  • Maintenance window surprises: RDS applies minor version upgrades during the specified maintenance window, which includes brief failovers even for Multi-AZ deployments — applications must handle connection resets gracefully.
  • Security misconfiguration: RDS instances created with publicly accessible endpoints; MSK clusters with no encryption in transit; always enforce VPC-private endpoints and encryption-in-transit as a baseline.

Decision checklist

  • Have you calculated the fully-loaded TCO for both managed and self-hosted options, including engineering hours for operations and incident response?
  • Have you verified that the managed service version supports the specific features your use case requires?
  • Have you documented the migration exit path from the managed service and tested it in a lower environment?
  • Are encryption in transit and at rest enabled, with endpoints restricted to VPC-internal access only?
  • Have you reviewed the managed service SLA and ensured application retry/failover logic handles provider-initiated failovers?
  • Is a cost alerting threshold set to detect unexpected scaling events in the managed service?

Example use cases

  • Series B startup choosing Kafka: Engineering team of 12 with no Kafka expertise; Confluent Cloud at $500/month replaces the need for a $250K/year Kafka specialist hire; team ships event-driven features 3 months earlier; revisit at Series D when Kafka spend exceeds $8K/month.
  • Enterprise migrating Redis to ElastiCache: Self-hosted Redis cluster across 3 on-premises VMs requires manual Sentinel configuration, backup scripting, and nightly patching; migration to ElastiCache (Redis 7.x) takes 2 weeks, eliminates 8 hours/month of ops toil, and provides native CloudWatch metrics and automated failover within 60 seconds.
  • Large-scale analytics reverting to self-hosted: Redshift at $100K+/month for a petabyte-scale analytics workload; organisation hires 2 data platform engineers, migrates to self-hosted Trino + Iceberg on EMR/S3 at $30K/month; 3-year TCO saving of $2.5M justifies the migration and team investment.
  • Cloud Cost Optimization — managed service premiums are a major cost driver; Reserved Instances and Savings Plans apply to many managed services.
  • Multi-Cloud Strategy — managed service lock-in compounds multi-cloud complexity; cloud-agnostic tooling reduces this.
  • Internal Developer Platform — the platform team is often responsible for curating which managed services are approved for use within the organisation.

Further reading