Infrastructure as Code & Cloud Automation
Cloud infrastructure defined in Terraform, so you can review, repeat and rebuild it
We define your networks, clusters, databases, permissions and DNS in Terraform, run every change through a pull request with a visible plan, and catch drift before it causes an incident. Staging matches production by design, and a new environment becomes a pipeline run rather than a fortnight of console work.
Cloud & DevOps
What is infrastructure as code?
Infrastructure as code (IaC) is the practice of defining cloud and server resources, such as networks, compute, databases, permissions and DNS, in version-controlled configuration files instead of creating them by hand. Tools such as Terraform compare that code with what actually exists and apply only the changes needed, so environments are reviewable, repeatable, auditable and can be rebuilt from the repository.
Most cloud estates start in the console. A database is created during a late-night fix, a load balancer is added for a supplier demo and left running, and staging is assembled from memory. Months later nobody can say why a resource exists, whether production still matches staging, or how long a rebuild would take after a serious mistake.
Infrastructure as code replaces that with a reviewable process. Every resource is declared in Terraform, stored in Git and changed through a pull request that shows the exact plan, who approved it and when it was applied. Reusable modules carry your standards for networking, tagging, encryption and access, so each new environment inherits them without anyone having to remember.
We pair the code with the automation around it: pipelines that format, validate, scan and plan every change, remote state with locking, scheduled drift detection, policy checks that block risky configuration, and scripted routines for scaling, backups and patching. On AWS, Microsoft Azure or Google Cloud, the test is the same: an engineer who did not write the code can read a plan, predict the change and apply it.
Challenges
The problems we are usually brought in to solve
Click-ops environments nobody can reproduce
Resources created by hand in the console have no history, no reviewer and no reliable way to recreate them after an accident or in a new region.
Environment differences nobody chose
Small manual variations in instance sizes, network rules or permissions accumulate between environments, so nobody can say which differences are deliberate and which are accidents.
Console hotfixes that Terraform later reverts
Fixes applied directly in the cloud during an incident are rarely copied back into code, so the next Terraform run either undoes them or fails at the worst moment.
Terraform that grew without structure
One huge state file, copied blocks instead of modules, hard-coded values and secrets in plain text make every change slow and nerve-racking.
Changes with no author or reason
When an outage traces back to a widened firewall rule or a resized database, console history rarely shows who made the change, what else it touched or why.
A rebuild nobody has ever tried
Recovery plans assume the platform can be recreated in another region, but with half the resources undocumented, nobody knows how long that would take or what would be missed.
Capabilities
What the service covers
Terraform foundations
Accounts, subscriptions or projects, networking, identity and shared services defined in Terraform, with a clear layout of root configurations per environment.
Reusable module libraries
Versioned modules for common building blocks such as networks, clusters, databases and queues, encoding your naming, tagging, encryption and access rules.
Pull-request infrastructure workflow
Pipelines in GitHub Actions or GitLab CI that format, validate and plan every change, post the plan for review and apply only after approval.
Remote state and environment layout
Encrypted remote state with locking, separate state per environment and component, and access controls that keep production changes restricted.
Drift detection and reconciliation
Scheduled plans that compare code with live infrastructure, alert on differences and route each one to be either codified or reverted.
Importing existing infrastructure
Bringing hand-built resources under Terraform management without recreating them, so older estates gain version history and review without a rebuild.
Plan guardrails
Automated checks on each Terraform plan that stop unapproved deletion or replacement of databases and storage, enforce naming and tagging, and flag changes that add expensive resources.
Terraform and provider version management
Terraform, provider and module versions pinned and then upgraded through planned pull requests, with changelogs read and plans checked for unexpected replacements before anything is applied.
Cloud automation beyond provisioning
Scheduled scaling, out-of-hours shutdown for non-production, certificate renewal, backup verification and patching run from pipelines instead of by hand.
Our process
How an engagement runs
Every engagement has a named lead, a written scope and working software to review every one to two weeks.
- 01
Estate audit
We inventory what runs in each cloud account, what is already in code, where state is stored and which resources were created by hand.
- 02
Structure and standards
We agree repository layout, module boundaries, naming and tagging rules, state strategy and the approval model for each environment.
- 03
Codify and import
Existing resources are imported into Terraform or rebuilt from modules, starting with lower environments, until a plan shows no unexpected changes.
- 04
Automate the workflow
Plan, policy and apply stages are added to the pipeline, drift detection is scheduled, and alerts go to the channel your team already watches.
- 05
Pair on live changes
Your engineers make real changes through the new workflow with us alongside, and we document modules, runbooks and how to add a new environment.
Technology
Technology we use
Chosen per project for fit, maintainability and your team's ability to own it.
Provisioning and runtime
- Terraform
- Docker
- Kubernetes
- Helm
Pipelines
- GitHub Actions
- GitLab CI
- Jenkins
Clouds and hosts
- AWS
- Microsoft Azure
- Google Cloud
- Linux
Use cases
Where it makes the biggest difference
Account vending for new teams
Creating a new AWS account, Azure subscription or Google Cloud project for each team or product from a pipeline, with baseline networking, logging and access already applied.
Environments that match by design
Building development, staging and production from the same modules with different variables, so every difference is intentional and visible in code.
New region or client environment from a pipeline
Creating a complete, consistent copy of a platform for a new country or enterprise customer by running a pipeline instead of starting a manual project.
Disaster recovery you can rehearse
Using the same code to rebuild infrastructure in another region during a recovery exercise, with data restored from tested backups.
DNS, certificates and edge settings in code
Managing DNS zones, TLS certificates and CDN rules in Terraform beside the cloud resources they point to, so a domain change is planned and reviewed like any other change.
Industries
Industries we apply this to
Why Softweb Planet
Why teams choose us for this work
Terraform written by DevOps and SRE engineers
Modules are written by our DevOps and SRE engineers, whose wider work includes upgrading and troubleshooting AWS, Google Cloud and Kubernetes environments, so each module is shaped by how infrastructure behaves in operation.
Import before rebuild
We bring existing resources under code in place wherever we can, because recreating a working production database or network just to make the code tidy adds risk without adding value.
Changes you can see before they happen
Every change we make goes through a plan you can read, and a named lead shows applied, working infrastructure every one to two weeks against the written scope.
Infrastructure and release path together
Module outputs such as database endpoints, queue names and secret references feed straight into your CI/CD and Kubernetes configuration, so a new service gets its infrastructure and its deployment in one change.
What you can expect
- Every infrastructure change reviewed, planned and recorded in Git
- Environments that can be recreated on demand from the repository
- Drift spotted and resolved before it breaks a release
- Every resource traceable to an owner, a pull request and a reason
Infrastructure as Code & Cloud Automation FAQ
Frequently asked questions
Terraform provisions infrastructure, while Ansible and similar tools mainly configure software on servers that already exist. Terraform declares resources such as networks, databases and clusters and works out what to create, change or delete. Configuration tools install packages and manage files on machines. In container-based platforms much of that configuration moves into Docker images and Kubernetes manifests, so Terraform with containers often covers most needs.
Terraform works across AWS, Microsoft Azure, Google Cloud and many other services with one language and one workflow, which matters when your estate spans more than one provider or includes DNS, monitoring and SaaS tools. Native tools such as AWS CloudFormation or Azure Bicep are reasonable choices for single-cloud teams already invested in them, and they need no separate state file to manage. We default to Terraform for new work, and we do not recommend rewriting working native templates unless there is a clear trigger, such as adding a second provider.
Infrastructure drift is any difference between what your code declares and what actually exists in the cloud, usually caused by manual console changes or emergency fixes. We detect it by running Terraform plans on a schedule against each environment and alerting when a plan is not empty. Each drift item is then either written back into code, if the change was intended, or reverted through the normal reviewed workflow.
Yes. Terraform can import existing resources into its state so they are managed by code without being recreated. We write the matching configuration, import in small batches starting with non-production, and continue until a plan shows no unexpected changes. Resources that are badly configured are flagged and corrected afterwards through reviewed pull requests, rather than altered silently during the import itself.
We keep Terraform state in encrypted remote storage, such as an S3 bucket, an Azure Storage account or a Google Cloud Storage bucket, with locking so two changes cannot run at the same time. State is split by environment and component to limit the impact of any mistake. Access is restricted to the pipeline and a small group of named engineers, and versioning lets us recover an earlier state if needed.
We keep secrets out of the repository and, as far as possible, out of Terraform state, because state records resource attributes in plain text. Marking a variable as sensitive only hides it from command output. Where we can, the secret store generates the password itself, in AWS Secrets Manager, Azure Key Vault or Google Secret Manager, and we use ephemeral values and write-only arguments where recent Terraform versions support them. Anything left in state is encrypted and access-restricted, and pipelines use short-lived federated credentials.
An engineer edits the Terraform code on a branch and opens a pull request. The pipeline formats and validates it, runs security and policy checks, and posts a plan showing exactly which resources will be created, changed or destroyed. A reviewer approves, the change merges, and the pipeline applies it to each environment in order, with production normally requiring an extra approval step before anything runs.
Yes, it produces change-control evidence as a by-product of normal work. Each change has a pull request with an author, a reviewer, the saved plan output and a pipeline run showing when it was applied and by which identity. When only the pipeline holds permission to change production, console edits become exceptions that drift detection reports. That evidence supports an audit, but it does not certify anything by itself, and we can work within the controls your compliance lead defines.
Either can work, and the choice is mostly about licensing and governance rather than features. OpenTofu is an open-source fork created after HashiCorp moved Terraform to the Business Source Licence in 2023, and it keeps the same configuration language and a very similar workflow. Some organisations prefer it for that reason. Existing Terraform code can usually move across with limited changes, and the modules, pipelines and review process we set up are designed to run on either tool.
That depends mainly on how many accounts, environments and hand-built resources you have, and how consistent they are today. Codifying one well-understood environment with a review pipeline can often be done within a few weeks of discovery. Larger or older estates are handled in phases, usually starting with shared networking and non-production, so each phase leaves you with reviewable code you can use straight away.
Pricing depends mainly on the size and condition of your current estate: how many accounts and environments you run, how many resources must be imported rather than rebuilt, how far they have drifted, and whether you also want plan guardrails and scheduled drift detection. We start with a discovery call and an audit of what exists, then send a written proposal with a fixed quote for the agreed scope. Cloud running costs are separate and are paid directly to your provider under your own account.
Yes, and we design for that from the first module. We use clear structure, documented variables, consistent naming and a working example for each module, and we avoid abstractions only their author understands. Before handover your engineers make real changes through the pipeline with us reviewing, and they receive written guidance on adding environments, upgrading providers and dealing with drift.
Keep exploring
Related services and solutions
Start your project
Tell us what you're building.
Share the problem, the systems involved and where you want to be. A senior engineer replies with honest advice on scope, architecture and the fastest safe path to production.