At Neocrym, we write a lot of Python code that we want to go really fast.. and we typically have a great many CPU cores available to us. And we wrote a new Python library to help make it happen.
At Neocrym, we use Amazon Web Services pretty heavily to run distributed web crawling and terabyte-scale machine learning.
We build all of our AWS infrastructure using HashiCorp Terraform. We love Terraform because it is declarative. Instead of describing the steps to build our infrastructure, we describe our destination state and the Terraform runtime calculates how to get there from the infrastructure we already have in production.
But Terraform is also very low-level, and building complicated infrastructure can quickly get very verbose.
We got tired of writing redundant Terraform, so we wrote Provose--a Terraform module that creates a high-level abstraction over AWS. You just describe to Provose the EC2 instances, containers, databases, and filesystems that you want to deploy, and then Provose will automatically create:
- Virtual Private Cloud (VPCs) and subnets
- Route 53 DNS rules
- AWS Certificate Manager TLS certificates
- Application Load Balancers
- Security Groups
- IAM roles, policies, and instance profiles
- Elastic Container Service clusters, services, and task definitions
- ...and more.
Below is an example where we run the NGINX "Hello World" container on ten AWS Fargate instances behind a load balancer at https://fargate.example.com. You can read more about this configuration in the
containers section of the Provose documentation.
We have found that configurations with Provose are typically 10x shorter than the equivalent Terraform configuration.
Provose 2.0 is the current stable version, with 3.0 currently in beta. Below are some Provose 3.0 documentation links explaining how to quickly set up:
- Containers--supporting EC2, Fargate, Fargate Spot, and AWS Batch.
- Distributed filesystems, supporting AWS Elastic File System and the high-performance AWS FSx Lustre filesystem.
- Relational databases, supporting AWS Aurora MySQL and AWS Aurora PostgreSQL.
- Other databases, like AWS ElastiCache Redis and Elasticsearch.