Managing cloud infrastructure

Managing cloud infrastructure

We are building our upcoming online database manager SQL Studio SQL App on cloud infrastructure. Currently we use Amazon Web Services (AWS) as primary cloud provider and plan to expand to Microsoft Azure and Google Cloud Platform.

Pulumi proved to be invaluable to us. It is a platform for cloud software development designed for developers and DevOps teams to build and manage cloud native software and many existing services using one consistent approach. The familiar concept of infrastructure-as-code allows for much more expressiveness to achieve “desired state configuration” than YAML or JSON in CloudFormation scripts.

In our case, we use TypeScript for Pulumi programs. Other currently supported languages are Go, JavaScript and Python. Other languages are also on their roadmap.

Many underlying AWS services are components of the final application. From a developer’s point of view, each service might require substantial amount of time to get acquainted with, let alone use it in the efficient way.

Pulumi has a nice higher level abstraction “component” that internally compose lower level infrastructural elements with sane defaults according to the best practices of each cloud service. You can start using built-in components, and then later, when you learn details of lower level building blocks, build your own components.

The command line interface workflow is one of the most intuitive I have seen. The project that you create in some folder allows you to manage multiple stacks, for example, development and production. You can then preview what resources would have been created, updated or removed by your program, should you run the pulumi update command. The resources are cleanly displayed as a hierarchy with each node containing current status of the operations that run in parallel.

The cool thing is that stack updates are incremental – resources that were previously created are detected and not touched in the next update run. This greatly reduces time when performing subsequent updates of the stack, since creating some of the cloud resources is anything but fast.

Each stack update provides you with a link to the latest update run, where each team member can see the logs and overview of the cloud resources in a list or graphical representation with further links to the each actual resource in the AWS web management console.

Log viewing in near real-time is convenient – you can just run the pulumi log command with the -f or --follow parameter. The aggregated logs of the complete stack will be shown.