A startup in the Renewable Energy sector had already started the process of moving Software systems to the cloud from machines hosted on-premises when they engaged us.
Two web services were being hosted in AWS but we observed that the deployment process was completely manual, error prone and often resulted in drift across test and production environments.
As part of a wider engagement with the company, we proposed the introduction of Infrastructure-as-Code (IaC).
IaC is a methodology that allows the setup of cloud services and their infrastructure in a declarative way, and to deploy them in a repeatable fashion.
Based on our previous experience with IaC tools like CloudFormation, CDK and Pulumi, we recommended the use of Pulumi.
Before proposing Pulumi, we considered the areas of strength within the Engineering team.
The team had a strong background in Python software development but seemingly not as strong in DevOps and common IaC tools.
The most common among these tools is Terraform, with its own configuration description language, HCL, and we decided against Terraform because of the additional learning curve required to use it, and the lack of specialization within the team.
There is a place for the use of Terraform but we already had seen a case where the tool turned out to be a poor fit for a small startup team without specialized Ops skills.
We started the process by setting up existing services and common infrastructure (like VPCs and ECS cluster) using Pulumi.
And the team was then able to quickly ramp up with the IaC approach and set up additional web services.
To the point that a team member went above and beyond and started abstracting common patterns into reusable components.
And for completeness, after our engagement ended, the team briefly considered a migration to Terraform but in a vote of confidence decided against it.
The choice of Pulumi proved to be a wise decision.
The team has been able to:
There is a further potential advantage of Pulumi that we haven’t tested yet, but are eager to.
The tool supports multiple programming languages (Python, TypeScript, Go, C# and Java) and can thus be applied to match the existing skills of a variety of teams.
We’ll keep you posted.