InfraWeave is an cloud-native control plane designed to minimize the gap between infrastructure as code (IaC) and the developer teams. With InfraWeave, you can simplify development of infrastructure templates, managing, updating, deploying it swiftly, easy and cost-effectively.
Key features of InfraWeave include:
-
🚀 Multi-Deploy Support: Define your infrastructure using GitOps, CLI commands, Python scripts, or Kubernetes manifests, catering to diverse workflows.
-
⚙️ Terraform Engine: Harness the reliability and flexibility of Terraform, a battle-tested tool for infrastructure provisioning.
-
🔗 Seamless Integrations: Fully integrates with the Backstage Developer Portal and offers an API for custom integrations.
-
👩💻 Platform-Friendly: Enables platform teams to publish, test, and upgrade existing Terraform modules effortlessly.
-
💡 Developer-First Deployment: Simplifies infrastructure deployment for developers using prebuilt, reusable modules.
-
📄 Code-Coupled Documentation: Ensures documentation stays accurate and aligned by directly integrating it with Terraform code and module/stack manifests.
-
🤝 Collaborative Stacks: Facilitate collaboration by building tailored stacks for teams, ensuring safe and seamless upgrades.
-
🛠️ Minimal Maintenance: Leverages a minimal set of managed services to significantly reduce operational overhead.
-
📈 Scalable by Design: Built to scale seamlessly with cloud infrastructure, supporting everything from small projects to enterprise-level deployments.
-
💸 Cost-Efficient: Optimized for usage, typically costing only a few dollars per month, making it accessible for teams of all sizes.
-
🌟 Open Source: Join a thriving community to shape the future of infrastructure together—let’s build it collaboratively! 🎉
View the features and documentation.
To read the up-to-date documentation, please check out our documentation
The project is currently in preview 👀
To bootstrap your cloud, set up the central and workload modules for your desired cloud provider, find them here.
You need to set up:
- central - storage and databases required by the control plane
- workload - runtime environments which should be deployed per project (e.g. AWS Account/Azure Subscription)
It all starts with you having a Terraform module available that you want to deploy.
- Have a terraform module ready (including the lockfile
.terraform.lock.hcl
).
terraform {
required_providers {
aws = {
source = "hashicorp/aws"
version = "~> 5.0"
}
}
}
resource "aws_s3_bucket" "example" {
bucket = var.bucket_name
tags = var.tags
}
variable "bucket_name" {
type = string
}
variable "tags" {
type = map(string)
default = {
Owner = "John Doe"
Department = "Platform"
}
}
- Define a
module.yaml
apiVersion: infraweave.io/v1
kind: Module
metadata:
name: s3bucket # The name of the module you define
spec:
moduleName: S3Bucket # metadata.name cannot have any uppercase, which is why we need this
version: 0.0.11-dev # The released version to use
description: "This module deploys an S3 bucket in AWS" # Supports markdown
reference: https://github.com/your-org/s3bucket # The URL to the module's source code
- Publish it! (to dev-track)
infraweave module publish dev .
Let’s look at four different ways to deploy this module:
- GitOps
- CLI
- Kubernetes
- Python
For the first three options, you will use a manifest like this:
apiVersion: infraweave.io/v1
kind: S3Bucket
metadata:
name: my-s3-bucket
namespace: default
spec:
moduleVersion: 0.0.11-dev # The released version to use, must match the version in the module.yaml
region: us-west-2
variables:
bucketName: my-unique-bucket-name-32142j
tags:
Name234: my-s3bucket
Environment43: dev
- GitOps
Given that it is configured, simply push the claim to your repository, that’s it! 🎉
- CLI
In case you want to set something up quick and dirty from your local computer, this is easy:
Using the same manifest file as above
infraweave apply <some-namespace-here> s3_manifest.yaml
- Kubernetes
Given you have installed the operator you might want to create an S3 Bucket next to your application in a Kubernetes cluster, this is as simple as this:
kubectl apply -f s3_manifest.yaml
- Python
Use python to set up you infrastructure readily available from the platform.
from infraweave import S3Bucket, Deployment
bucket_module = S3Bucket(
version='0.0.11-dev',
track="dev"
)
bucket1 = Deployment(
name="bucket1",
namespace="playground",
module=bucket_module,
region="us-west-2"
)
with bucket1:
bucket1.set_variables(
bucket_name="my-bucket12347ydfs3"
)
bucket1.apply()
# Run some tests here
# bucket1.destroy() is automatically called when finished (or on error)
This can also be used to create integration tests with multiple modules or stacks
Join our growing community around the world, for help, ideas, and discussions regarding InfraWeave.
- Chat live with us on Discord
We would ❤️ for you to get involved with InfraWeave development! If you wish to help, you can learn more about how you can contribute to this project in the contribution guide.
For security issues, kindly email us at opensource@infraweave.com instead of posting a public issue on GitHub.
Source code for InfraWeave is released under the Apache Licence 2.0.