This Guidance helps you set up Ethereum nodes on AWS while optimizing the initial synchronization times. Many customers build applications integrated with the Ethereum blockchain and choose to run their own nodes to achieve more granular operational control and functionality that they can't find with serviced node providers. To help these customers, this Guidance proposes running nodes on AWS to speed up the initial sync process, which is the most time-consuming part of the setup. The reference architecture helps customers address operational problems by showing how to scale nodes and manage updates with minimal downtime.
Please note: [Disclaimer]
The sync node and Remote Procedure Call protocol (RPC) nodes, powered by Amazon Elastic Compute Cloud (Amazon EC2), synchronize their state with other nodes on the Ethereum blockchain network.
The Amazon EC2 sync node periodically copies node state snapshot data to an Amazon Simple Storage Service (Amazon S3) bucket to provision new Amazon EC2 RPC nodes.
When RPC nodes within an Amazon EC2 Auto Scaling Group start for the first time, they automatically download node state snapshot data from the S3 bucket.
The AWS Well-Architected Framework helps you understand the pros and cons of the decisions you make when building systems in the cloud. The six pillars of the Framework allow you to learn architectural best practices for designing and operating reliable, secure, efficient, cost-effective, and sustainable systems. Using the AWS Well-Architected Tool, available at no charge in the AWS Management Console, you can review your workloads against these best practices by answering a set of questions for each pillar.
The architecture diagram above is an example of a Solution created with Well-Architected best practices in mind. To be fully Well-Architected, you should follow as many Well-Architected best practices as possible.
The deployment is fully automated with infrastructure as code (IaC). IaC allows you to define your entire workload as code, helping you to automate procedures, quickly implement changes, and consistently respond to events.
You can use security groups on AWS to control traffic to associated resources. The solution uses a default VPC but creates new security groups, limiting Internet access only to the ports required for peer-to-peer communication. These security groups help ensure that only specific instances on AWS can access the JSON RPC ports on Ethereum nodes.
The sync node is periodically stopped to copy data to an S3 bucket. In case the RPC nodes in the EC2 Auto Scaling group fails, it can use the most recent copy of the data to restore the latest state and avoid a long sync time for data recovery.
Because Ethereum nodes run stateful, long-running and monolithic software, EC2 instances are the optimal choice for compute. Amazon Elastic Block Store (Amazon EBS) gp3 volumes use higher than standard IOPS and throughput to provide better response times. An Application Load Balancer ensures requests are spread across a highly available EC2 instances running RPC nodes.
Use instances powered by Graviton2 and Graviton3 instance types with lower specifications for sync nodes. You need only one node to stay in sync. The RPC nodes usually require more resources, so using instances powered by Graviton 3 processers are more preferrable. All RPC nodes are also inside an Autoscaling Group, which allows RPC nodes to scale according to the demand. Use Compute Optimizer to verify the initial choice.
A detailed guide is provided to experiment and use within your AWS account. Each stage of building the Guidance, including deployment, usage, and cleanup, is examined to prepare it for deployment.
The sample code is a starting point. It is industry validated, prescriptive but not definitive, and a peek under the hood to help you begin.
The sample code; software libraries; command line tools; proofs of concept; templates; or other related technology (including any of the foregoing that are provided by our personnel) is provided to you as AWS Content under the AWS Customer Agreement, or the relevant written agreement between you and AWS (whichever applies). You should not use this AWS Content in your production accounts, or on production or other critical data. You are responsible for testing, securing, and optimizing the AWS Content, such as sample code, as appropriate for production grade use based on your specific quality control practices and standards. Deploying AWS Content may incur AWS charges for creating or using AWS chargeable resources, such as running Amazon EC2 instances or using Amazon S3 storage.