Cách xuất toàn bộ chuỗi khối Ethereum sang CSV trong 2 giờ với giá 10 đô la

Trong bài viết trước của tôi Xuất khẩu và phân tích Ethereum Blockchain, tôi đã giới thiệu công cụ Ethereum ETL và cung cấp các hướng dẫn từng bước để xuất dữ liệu Ethereum sang tệp CSV và phân tích nó trong Amazon Athena và QuickSight (cũng đọc Ethereum Blockchain trên Google BigQuery).

Trong bài viết này tôi sẽ chỉ cho bạn cách sử dụng AWS Data Pipeline và AWS AutoScaling để song song hóa quá trình xuất thành hàng chục và hàng trăm trường hợp và giảm thời gian xuất xuống hàng giờ hoặc thậm chí vài phút, trong khi vẫn giữ chi phí thấp nhờ vào EC2 Spot Instances.

Toàn bộ quá trình được chia thành 4 bước:

  • Tăng giới hạn AWS
  • Chuẩn bị một AMI tùy chỉnh
  • Tạo một đường ống dữ liệu
  • Tạo nhóm tự động mở rộng

Tăng giới hạn AWS

AWS duy trì giới hạn dịch vụ cho từng tài khoản để giúp đảm bảo tính khả dụng của tài nguyên AWS, cũng như để giảm thiểu rủi ro thanh toán cho khách hàng mới. Một số giới hạn dịch vụ được tăng tự động theo thời gian khi bạn sử dụng AWS, mặc dù hầu hết các dịch vụ AWS đều yêu cầu bạn yêu cầu tăng giới hạn theo cách thủ công. Quá trình này có thể mất một vài giờ hoặc vài ngày.

Đối với nhiệm vụ này, bạn sẽ cần phải tăng:

  • Các đối tượng trên mỗi giới hạn đường ống trong đường ống dữ liệu: 1000. Bạn chỉ cần tăng nó nếu bạn muốn xuất hơn 4 triệu khối trong một đường ống.
  • EC2 Spot Instances: 100. Nếu tài khoản của bạn mới, họ sẽ chỉ tăng nó lên 20 hoặc thấp hơn lúc đầu.

Bạn có thể tìm thấy hướng dẫn chi tiết về cách tăng giới hạn tại đây https://docs.aws.amazon.com/general/latest/gr/aws_service_limits.html

Chuẩn bị một AMI tùy chỉnh

Các yêu cầu đối với AMI tùy chỉnh cho Đường ống dữ liệu được liệt kê tại đây https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-custom-ami.html:

Nếu bạn đang chạy Ubuntu, bạn sẽ cần tạo một tài khoản có tên người dùng ec2 bằng cách làm theo các hướng dẫn sau https://aws.amazon.com/premiumsupport/ledgeledge-center/new-user-accounts-linux-instance/.

Bạn cũng sẽ cần thêm người dùng ec2 vào tập tin sudoers. Mở cửa sổ terminal và gõ:

sudo visudo

Trong phần dưới cùng của tệp, nhập như sau:

người dùng ec2 ALL = (ALL) NOPASSWD: ALL

Một vài kiểm tra liên quan đến Ethereum ETL:

  • Đảm bảo python 3.5 trở lên được cài đặt trên hệ thống và nhị phân python3 nằm trong PATH.
  • nhân bản Ethereum ETL sang / home / ec2-user / ethereum-etl
> git clone https://github.com/medvedev1088/ethereum-etl
> cd ethereum-etl
> cài đặt pip3 -r yêu cầu.txt
  • Đảm bảo geth đã tải xuống các khối bạn muốn xuất:
> đính kèm
> eth.syncing
{
  khóa hiện tại: 5583296,
  cao nhất Khóa: 5583377,
  đã biếtStates: 65750401,
  pullStates: 65729512,
  startBlock: 5268399
}
  • Hãy chắc chắn rằng geth được khởi chạy khi khởi động. Cách đơn giản nhất là thêm nó vào crontab:
> tiếng vang "nohup geth --cache = 1024 &"> ~ / geth / start.sh
> crontab -e
@reboot /home/ec2-user/geth/start.sh >> / home / ec2-user / geth / crontab.log 2> & 1
  • Tải xuống và cấu hình DataPipeline TaskRunner. Các hướng dẫn có thể được tìm thấy ở đây https://docs.aws.amazon.com/datapipeline/latest/DeveloperGuide/dp-how-task-runner-user-managed.html

Sau khi bạn đã tải xuống tệp jar, hãy tạo tệp ~ / task-runner / start.sh với nội dung sau:

nohup java -jar / home đông-1 --logUri = s3: //  / task-runner / log - nhiệm vụ 1 &

Tệp certs.json phải chứa quyền truy cập và khóa bí mật của bạn cho tài khoản có quyền truy cập vào nhóm S3:

{"id-access": "MyAccessKeyID", "private-key": "MySecretAccessKey"}

Thêm nó vào crontab:

crontab -e
@reboot /home/ec2-user/task-runner/start.sh >> / home / ec2-user / task-runner / crontab.log 2> & 1
  • Tạo một AMI mới và ghi nhớ ID của nó. Nó sẽ được sử dụng trong bước tiếp theo.

Tạo một đường ống dữ liệu

Để tạo đường ống, tôi đã sử dụng Troposphere https://github.com/cloudtools/troposphere, đây là một thư viện Python để tạo các mô tả AWS CloudFormation.

  • Bản sao đường ống xuất khẩu Ethereum:
> git clone https://github.com/medvedev1088/ethereum-export-pipeline
> cd ethereum-export-pipe
  • Chỉnh sửa tập tin config.py và sửa đổi phạm vi khối mà bạn muốn xuất. Theo mặc định, 5 triệu khối đầu tiên sẽ được xuất:
  • Tạo tệp mẫu CloudFormation:
> python3 created_export_pipeline_template.py - xuất khẩu export_pipeline.template
  • Đăng nhập vào bảng điều khiển CloudFormation trong khu vực N.Virginia https://console.aws.amazon.com/cloudif/home?region=us-east-1
  • Tạo một ngăn xếp mới bằng cách chỉ định tệp export_pipeline.template được tạo. Bạn sẽ cần thay đổi tên nhóm trong đó các tệp CSV sẽ được tải lên. Theo tùy chọn, bạn có thể tùy chỉnh trường Lệnh, ví dụ: bạn có thể xóa các phần của tập lệnh nếu bạn chỉ cần xuất khối, giao dịch hoặc chuyển ERC20.
  • Đăng nhập vào bảng điều khiển Đường ống dữ liệu trong N.Virginia https://console.aws.amazon.com/datapipeline/home và đảm bảo đường ống được tạo. Bạn có thể nhìn thấy nó trong Architect View.

Sau khi bạn tạo ra đường ống của mình, nó sẽ đợi nhân viên bắt đầu chạy các hoạt động.

Tạo nhóm tự động mở rộng

  • Đăng nhập vào bảng điều khiển AutoScaling trong khu vực của bạn https://console.aws.amazon.com/ec2/autoscaling/home
  • Tạo cấu hình khởi chạy:
  • Chọn AMI mà bạn đã tạo ở bước trước.
  • Chọn loại ví dụ t2.medium. .
  • Trên trang Chi tiết cấu hình, chọn hộp Yêu cầu tại chỗ Yêu cầu và chỉ định mức giá tối đa bạn có thể trả. Nó cũng cho bạn thấy giá giao ngay hiện tại cho loại thể hiện đã chọn. Giá giao ngay thấp hơn 3 lần so với giá theo yêu cầu tại thời điểm tôi tạo ASG.
  • Chọn Nhóm bảo mật và tiến hành với trình hướng dẫn tạo.
  • Tạo một nhóm tự động mở rộng:
  • Chọn Cấu hình khởi chạy mà bạn đã tạo ở bước trước.
  • Chỉ định kích thước nhóm - có bao nhiêu trường hợp bạn muốn xuất CSV song song.
  • Tiến hành với trình hướng dẫn.

Sau khi ASG được tạo, bạn có thể thấy nó khởi chạy các phiên bản mới trong tab Lịch sử hoạt động:

Bạn có thể kiểm tra Đường ống dữ liệu của mình để bắt đầu chạy các hoạt động trên các phiên bản trong trang Chi tiết thực thi trong bảng điều khiển Đường ống dữ liệu, cung cấp cho bạn tất cả các chi tiết và nhật ký:

Mỗi phiên bản sẽ chạy 10 hoạt động cùng một lúc, thật không may con số này không thể tùy chỉnh.

Các tệp CSV sẽ nằm trong nhóm S3 mà bạn đã chỉ định khi tạo đường ống.

Bạn sẽ cần xóa thủ công nhóm Tự động nhân rộng và Ngăn xếp đường ống dữ liệu sau khi quá trình kết thúc.

Bạn có thể muốn chuyển đổi CSV sang Parquet để tối ưu hóa hiệu suất truy vấn. Bạn có thể tìm thấy các hướng dẫn ở đây: Chuyển đổi các tệp Ethereum ETL sang Parquet

Cũng đọc:

  • Cách truy vấn số dư cho tất cả các địa chỉ Ethereum trong BigQuery
  • Thông báo Ethereum thời gian thực cho mọi người miễn phí
  • Ethereum trong BigQuery: cách chúng tôi xây dựng bộ dữ liệu này
  • Theo dõi chúng tôi trên Twitter: https://twitter.com/EthereumETL