Nov 13, 2023
Today, the ability to offload database management has completely changed how businesses and developers operate. If you ever looked for a fully managed PostgreSQL database, AWS's Relational Database Service (RDS) has probably stood out as one of the options for hosting databases in the cloud. However, with its numerous features and services (and the frequent and infamous AWS gotchas), accurately estimating RDS costs can take time and effort.
To avoid breaking the bank while trying to scale your RDS for PostgreSQL database, you need to dig deep into the facets of RDS pricing and how they can be effectively managed. Before migrating to Timescale, most of our clients struggled with this, so we’ve gathered quite a lot of information on the topic.
In this blog post, we share our knowledge with you, together with some advice on improving the performance and price of your managed PostgreSQL database.
Before starting up an RDS cluster, there are many decisions to make—including whether you should even use RDS. While it's possible to host PostgreSQL on AWS using EC2, using a managed implementation of PostgreSQL like Amazon's RDS can truly pay off down the line due to the enhanced functionality and reduced administrative overhead.
Managed solutions like RDS make scaling easier, avoiding you the manual work of provisioning your instance. But beyond scalability, RDS and other managed PostgreSQL databases (like Timescale) come with essential reliability features like replication and backup, which are often tedious and time-consuming for teams. Replication ensures your data is copied and accessible from different regions for high availability, while backups are crucial for disaster recovery.
RDS also supports advanced deployment strategies such as blue/green deployments. These strategies provide a way to release application updates with zero downtime, increasing the resilience and reliability of your application.
As we've read before, estimating RDS costs can be complex. The process is about more than just the upfront costs of instances and storage. It includes many factors that, when forgotten or underestimated, can lead to significant cost overruns in your cloud budget. You should know these challenges as you map out your infrastructure plans.
One critical aspect that teams often overlook is data transfer costs. This is made more complex since AWS does not charge for inbound data transfers; they only charge for outbound data transfers.
Charges include data transfer between regions and out to the public Internet, billed per GB transferred. It might seem trivial initially, but as your data needs grow, especially if you operate in a multi-region setup for disaster recovery or high availability, these costs can quickly accumulate and surprise you.
Another common pitfall in estimating RDS costs comes from inaccurate usage estimates. It's easy to underestimate the volume of data your application will handle, particularly when considering the number of users, activity levels, data retention policies, and audit logging requirements. If you're not careful, these underestimations can lead to significant cost overruns once your application moves into production.
To accurately estimate RDS costs from the outset, the following steps can guide you through the process:
When it comes to estimating RDS costs, AWS provides a potent tool: the AWS Pricing Calculator. This intuitive calculator eliminates guesswork, allowing developers to predict their RDS costs more accurately.
It provides a robust framework that prompts you to consider the essentials, such as compute resources, storage, data transfer, backup requirements, and additional feature costs. In the same estimate, you can also calculate other aspects of your infrastructure, providing a whole picture of what your architecture may cost.
One of the main factors that affect your RDS costs is the capacity of your instances, primarily determined by your memory and processing power requirements. More robust instances equate to a higher price.
AWS offers two payment options: on-demand and reserved instances. On-demand instances provide flexibility as you pay for what you use, but they can quickly add up if your usage is high or consistent.
On the other hand, reserved instances involve upfront payment or commitment for a fixed term, generally one or three years. This model can result in substantial savings in the long term, especially for predictable, steady workloads.
RDS supports different types of storage, each with its unique cost implications. It's crucial to understand your storage needs, which, along with your budget, will dictate the kind of storage you choose.
General Purpose (SSD) storage is typically sufficient for most use cases. However, for mission-critical applications that demand high transactional reliability, Provisioned IOPS could be the better choice, despite the higher cost.
Additionally, even within the General Purpose category, there are multiple types, each with its own costs and performance considerations. Usually, gp3 is the more cost-efficient and performant option. The RDS User Guide includes more details on these choices.
You also need to consider all the data you'll need to store, including user, logging, audit, and other data your application requires. There are a lot of questions in this category that are difficult to answer. How much data will you store per user, and how many users do you expect to have? What is your projected data growth over the next year?
As you develop and ship code, you’ll better understand these numbers, but having an educated guess supported by evidence from the start is a great start. Remember that increased user activity will lead to more logging and auditing data. Having a good understanding of your planned schema is an excellent start to answering these questions.
It's important to mention that not all data needs to live in your RDS instance. Depending on the value and usage of the data, you can use cheaper storage solutions for some of it. For example, you can offload some or most of your logging data to AWS S3 or Glacier, resulting in considerable cost savings. But this, too, comes with costs, as we will see later.
One critical aspect of understanding your RDS costs revolves around data transfer. It's essential to comprehend the traffic patterns within your architecture. Identify what data will move between regions and what will be communicated to the public Internet. Data transfer between Availability Zones (AZs) within a single region is free, which can influence how you design your infrastructure.
If your application is hosted in one region and your database in another, you'll pay for the data transferred between these regions. Similarly, any data sent from your RDS instance to users over the Internet incurs costs.
It's essential to keep in mind that it's not only about your current data transfer needs. As your user base and application usage grows, the amount of data transferred will likely increase. Estimating this growth and planning for it in your RDS budget is crucial.
In the world of cloud databases, backup strategies are critical. AWS RDS provides a mechanism for creating automated backups and database snapshots for your RDS instance. However, understanding the costs of these backups can be tricky.
First, determine the frequency of your backups. How often will you back up your data? Daily, weekly, or monthly? This directly affects how much storage you'll use for backups and, therefore, the costs. It's also crucial to decide how many backups you'll keep at a time and for how long. Each backup requires storage space; the longer you keep a backup, the more it costs.
AWS offers backup storage equivalent to the size of your database (100 % of your DB) at no extra charge. However, if your backup storage exceeds the size of your database or you retain backups beyond the retention period, you will incur additional costs.
Additionally, you may choose to export RDS snapshots to S3 for long-term archiving. Doing so incurs both S3 storage costs and data transfer charges. Make sure to factor in these costs when estimating your total RDS backup expenses.
While calculating the RDS costs, it's crucial to recognize the potential costs associated with AWS's additional features. These features, while providing enhanced functionality, also add to the total cost of your RDS deployment.
One such feature is the RDS Proxy, a fully managed, highly available database proxy for Amazon RDS. RDS Proxy makes applications more scalable, resilient to database failures, and secure. It establishes a database connection pool to improve efficiency and supports IAM authentication for enhanced security.
However, these features come at an additional cost directly correlating to the database size and amount of time the proxy is running per month, so make sure to factor in the RDS Proxy charges when estimating the overall cost.
Another feature to consider is Aurora Global Database, which allows a single Aurora database to span multiple AWS regions. This feature significantly improves disaster recovery capabilities and enables low-latency global reads.
Enhanced monitoring via Performance Insights can be invaluable to troubleshooting a particularly costly query, but pricing beyond the free tier is complicated. Consider only enabling this on databases critical for your application, such as production databases.
Finally, you might require bastion hosts to access your RDS instances over the Internet securely. The creation, complexity, and maintenance of these bastion hosts incur costs that should be included in your cost calculations.
No matter how well-designed and meticulously planned your system is, there's always a possibility that you might encounter issues that necessitate professional assistance. Amazon provides comprehensive support plans, and while it's an added cost, it's a worthy investment to ensure your database runs smoothly.
Support costs range from $100 monthly for business support and starting between $5,500 and $15,000 monthly for enterprise support. Enterprise support includes 24/7 access to a team of support engineers, infrastructure event management, and prioritized support.
Given its potential impact on your budget, you should factor support costs into your RDS pricing calculations. At Timescale, we revolutionize database support by providing expert support at no additional charge.
After gathering a detailed understanding of your RDS pricing, it's a valuable exercise to reassess your architecture to optimize costs. For instance, offloading non-relational data or logs to a cost-effective storage service like S3 can significantly reduce your expenses (which is why Timescale also offers the possibility of tiering data to a low-cost object storage tier). Disabling features you may not need in non-production environments and enabling auto-scaling are other beneficial cost-saving measures.
And remember to look at your data transfer habits. Cross-region and Internet data transfers can add up quickly. If possible, architect your application to minimize these wherever possible. With a clearer picture of your RDS cost structure, you can make informed decisions to fine-tune your infrastructure and have a more effective architecture.
Timescale offers a PostgreSQL-compatible hosted database solution optimized for time-series data. In most time-series use cases, Timescale can save you 95 % on storage costs over RDS while achieving better performance and allowing you to scale PostgreSQL efficiently.
With a pay-for-what-you store model and free technical support, sign up for a free 30-day Timescale trial before spending money on other well-known databases that offer none of Timescale’s scalability and simplified billing. Yes, with Timescale, you will only be billed for two elements: compute and storage. Try it out—we don’t think you’ll regret it!