Running Bitcoin Nodes in AWS in 2024

Cost and best practices for running Bitcoin nodes in AWS in 2024!

Running a full Bitcoin node in AWS will cost about $3.70/day. A pruned Bitcoin node will cost about $0.93/day. The cost consists of EC2 instance costs (about $0.93/day), EBS volume costs ($0.06/day for pruned node and $2.58/day for full), and network egress fees (from $0.00/day to more than $30/day depending on configuration).

For additional analysis, see our 2023 edition What Does It Cost To Run a Bitcoin Node In AWS?.

Best Practices

A Bitcoin node consists of three core billable components in AWS: An EC2 Instance, an EBS Volume, and potential bandwidth fees (which can be significant).

Use Graviton (ARM) Instance Types

The best balance of cost and performance is found in AWS’s Graviton instance types. We recommend using the latest generation compute optimized Graviton medium instance type for both full and pruned Bitcoin nodes.

The c7g.medium provides enough dedicated CPU and Memory that regardless of what is happening on the Bitcoin network, it will be able to keep up and have capacity to spare for additional workloads and RPC API traffic.

The cost of a c7g.medium will vary by region and discount agreements, but is typically about $0.87 per day.

A medium size is sufficient to fully participate in the Bitcoin network, but if additional usage of the node is expected, consider moving to c7g.large, c7g.xlarge, etc as needed while staying in the c7g instance family. Each additional size is approximately double the cost and double the capacity of the previous.

Use gp3 EBS Volumes

gp3 is the latest generation of EBS volume offered by AWS which means that it is the most performant and the least expensive general purpose volume type. Pricing is $0.08/GB/mo.

A pruned node only needs a 20GB disk, which comes out to about $0.06/day.

A full node, however, requires a large disk. As of January 25, 2024, the on-disk size of the blockchain with indexes and mempool is 632GB. Using a 1000GB disk puts our usage at about 66% which affords us a two year runway until the disk size will need to be increased.

The following shell output from a Syntactic Engineering Full Bitcoin Node shows the disk usage of the bitcoin directory, the disk usage of the system, and Bitcoin blockchain information.

$ du -hsx /var/lib/bitcoin
632G    /var/lib/bitcoin
$ df -h .
Filesystem      Size  Used Avail Use% Mounted on
/dev/root       969G  634G  336G  66% /
$ bitcoin-cli -rpccookiefile=/var/lib/bitcoin/.cookie getblockchaininfo
{
  "chain": "main",
  "blocks": 827330,
  "headers": 827330,
  "bestblockhash": "0000000000000000000174a7a9555f9aa1c4a3a3cde9f3975b652bcb8f101e5b",
  "difficulty": 70343519904866.8,
  "time": 1706199860,
  "mediantime": 1706197545,
  "verificationprogress": 0.9999998673209406,
  "initialblockdownload": false,
  "chainwork": "0000000000000000000000000000000000000000671cc90153396e844113c7dc",
  "size_on_disk": 617541469986,
  "pruned": false,
  "warnings": ""
}

The growth rate of the Bitcoin blockchain is about 10GB/month and can be seen at blockchain.com.

Beware of the Bandwidth Trap

AWS is notorious for bandwidth charges - they do not charge for inbound traffic but they do charge a base rate of $0.09/GB for outbound traffic. When new Bitcoin nodes perform their Initial Block Download (IBD), they download all historical blocks from other full nodes on the network. This usage can cause a huge amount of outbound bandwidth, depending on how busy the network is.

It is best practice to allow unlimited uploads, and the health of the Bitcoin network depends on nodes providing historical blocks. However, given AWS’s unreasonable bandwidth charges, it may be prudent to limit block uploads and effectively control the amount of upload (charged) bandwidth that a node uses.

To limit upload bandwidth used by a Bitcoin node, set the configuration option maxuploadtarget to the number of blocks (which is roughly the number of MBs) to serve in a day.

For example, to limit it to 1440 blocks, set the following in bitcoin.conf. This will effectively cap your bandwidth costs to about $0.25/day.

maxuploadtarget=1440M # Limit upload bandwidth to 1440MB per day

Without a limit in place, bandwidth costs in AWS can exceed $30 per day.

Full Node Example

Let’s look at some numbers and metrics when running a Syntactic Engineering Full Bitcoin Node which implements all of these best practices.

CPU

This is a typical week of CPU usage for running a full up-to-date Bitcoin node. During an initial full block download, CPU usage will be higher.

Full Bitcoin Node CPU Usage in AWS

Cost With Unlimited Block Uploads

When running a Bitcoin node with unlimited uploads, daily costs will vary widely due to upload bandwidth usage. In the following graph, we can see the daily cost for a full Bitcoin node, broken down by usage type.

Full Bitcoin Node Running Costs in AWS Breakdown

Cost With Block Upload Limit

This is the cost of running a full Bitcoin node but with bitcoin.conf config option maxuploadtarget=1440M set. We can see that with upload bandwidth controlled, AWS daily usage costs are stable and consistent.

Full Bitcoin Node Limited Upload Running Costs in AWS Breakdown

Pruned Node Example

The daily AWS cost of a pruned Bitcoin node using our best practices is shown below, broken down by usage type. This node is configured with the following non-default settings in bitcoin.conf:

prune=550  # Limit to 550 most recent blocks
maxuploadtarget=1440M  # Limit upload bandwidth to 1440MB per day

It is configured with a 20GB gp3 EBS disk and running on a c7g.medium instance type.

Pruned Bitcoin Node Running Costs AWS Breakdown