Hello all!
Welcome to the next issue of the Tidy Cloud AWS newsletter! In this issue, I talk a bit about the terms infrastructure as code, infrastructure as software, and a relatively new term infrastructure from code.
Enjoy!
Managing and surviving infrastructure
In this newsletter, I often cover matters related to infrastructure as code, and sometimes also refer to infrastructure as software.
Infrastructure as code often uses text-based, machine-readable descriptions and version control solutions to manage changes.
That is pretty much as far as the common description and understanding of the term goes. Other software engineering principles are often neglected. This can include things such as modular design, test driven design, test automation, refactoring.
Part of the reason is that some tools are not so well adapted for this, and part of it may be a lack of insight on how to apply such principles to infrastructure.
Infrastructure as software is a way to distinguish it as a form of software engineering, not just simply apply some software-related tools. It has also been used by Pulumi to describe infrastructure as code, but with regular programming languages. (https://www.pulumi.com/what-is/what-is-infrastructure-as-software/).
It’s more important to understand software engineering principles and methods rather than specific languages..
…and now, infrastructure from code
A relatively new term that has popped up is infrastructure from code. The general idea here is that the infrastructure is derived from the application code, or that application and infrastructure code are the same.
There are multiple approaches here. These include: - added annotations in the code for the infrastructure - SDKs and frameworks - new languages and environments built to abstract away the complexities of infrastructure.
The goals are like what proponents of serverless were talking about almost a decade ago - simplify handling of the underlying infrastructure so developers can focus on building applications.
A few players in this space include:
Wing and Dark are new languages, which can be a challenge to get adopted. Wing seems, though, that it should be able to leverage the Node.js ecosystem to some extent.
Some of these tools will generate infrastructure code for other tools, such as Terraform, AWS CDK and Pulumi, under the hood.
Reflections
The infrastructure from code tools are next generation serverless tools, more so than next generation infrastructure as code, in my mind. So I think the term infrastructure from code is misleading.
If you are in a position where you handle both application code and infrastructure code, and run in the cloud, then these tools make sense for some use cases.
Existing infrastructure as code tools will remain useful. Good software engineering practices will help them thrive. To me, that aspect is key more than specific implementation details on how the infrastructure code is generated.
If you want to read more extensive coverage on this topic, there are a few blog posts that are worth reading:
- Adam Ruka, former team member of the AWS CDK team, talks about different generations of infrastructure as code tools.
- Ala Shiban from Klotho talks about state of infrastructure from code 2023.
- Yehuda Cohen has written an extensive post exploring different cloud development tools.
You can find the contents of this bulletin and older ones, and more at Cloudgnosis.org. You will also find other useful articles around AWS automation and infrastructure-as-software.
Until next time,
/Erik