Terraform import
Brought the existing Azure resources (container apps, static web apps, networking, Key Vault, storage and the PostgreSQL database) into Terraform without rebuilding them.
The platform had grown one portal click at a time, with no record of how it was set up. We imported every resource into Terraform, put the public apps behind Cloudflare and closed the database to everyone except approved users. The business kept the platform it had and can now rebuild, review and change it safely.
A cloud platform built one resource at a time in the Azure portal can run happily for years. What it doesn’t have is a written record of what’s there and why each setting is the way it is, so every change, audit question or rebuild starts with someone clicking through the portal and trying to remember.
Resources were added by hand over the years. A simple question about the setup means opening each one in the portal, and an audit request turns into an afternoon of clicking.
Small differences build up between environments. A release that passed in test breaks in production, and the fix is another manual change that nobody writes down.
The engineer who set it up is the only one who knows why things are the way they are. When they’re on leave or move on, changes stop or get guessed.
Network access was opened for a quick fix and never closed again. The database that holds your customers’ data is one leaked password away from a breach.
With no firewall in front, scans, bots and junk traffic go straight to your apps, and your servers carry the load and the risk.
If an environment breaks or gets deleted, getting it back means clicking it together again, with no way to check it came back the same.
The setup lives in the portal and in one or two people’s heads, and every change is a gamble on what they remember.
Flip the switch to see the estate before and after the work.
A platform that lives in the portal and in one person’s memory.
An estate written down in code, behind proper access controls.
Click through each step to see it working.
We wrote Terraform for each resource that was already running (container apps, static web apps, networking, Key Vault, storage and the PostgreSQL database) and imported it. Importing reads a resource into Terraform’s state without changing it, so a plan afterwards shows whether the code matches what’s live.
Terraform’s state sits in a storage account, so every change runs from one source of truth. Production and test each have their own Terraform, so test can be rebuilt to match.
DNS moved to Cloudflare and web application firewall rules went in front of the public apps, so traffic is filtered before it reaches them.
The PostgreSQL database sits behind a Cloudflare Tunnel. Approved people get in through Zero Trust access, and the database is no longer reachable over the network.
Brought the existing Azure resources (container apps, static web apps, networking, Key Vault, storage and the PostgreSQL database) into Terraform without rebuilding them.
Set up Terraform state in a storage account, so changes run from one source of truth.
Each environment has its own Terraform, so the test setup can be rebuilt to match.
Moved DNS to Cloudflare and added web application firewall rules for the public apps.
Put the PostgreSQL database behind a Cloudflare Tunnel, so only approved people get in.
A detailed report on what we found in the estate, with performance recommendations, measured against CBOS’s own infrastructure guidelines.
Hover over a card for more.
An engineer edits the Terraform, reads the plan and applies it, so what’s about to change is visible before it happens.
Test has its own definition, so getting it back after it breaks means applying that definition again.
Anyone on the team can read how the estate is built, in code that’s versioned with every change.
Approved people reach the database through Zero Trust access, and nobody else reaches it at all.
We go through your estate and write up what we find against our own infrastructure guidelines, with performance recommendations.
We import what’s running into Terraform, set up shared state and give each environment its own definition.
Cloudflare DNS and firewall rules in front of your public apps, and Zero Trust access to the database.
No. Terraform can import resources that already exist, so they come under code where they stand. That’s how this project brought in the existing container apps, static web apps, networking, Key Vault, storage and database.
Importing reads a resource into Terraform’s state and doesn’t change it. Anything that would change shows up in the plan first, so you decide when it happens.
You can still look at everything in the portal. If someone changes a setting there, the next Terraform plan shows the difference, so it gets caught and either written into code or put back.
Approved people keep their access through a Cloudflare Tunnel with Zero Trust. What goes away is access for anyone else on the network.
With a review. On this project that was a detailed findings report, measured against CBOS’s own infrastructure guidelines, with performance recommendations.
Tick what sounds familiar.
Your infrastructure sounds well managed. A short review can still confirm nothing has drifted from what you think is running.
There are gaps worth closing before they cause an outage or a breach. We can review your estate and tell you which ones to fix first.
Your estate is in the state this project started from. We can bring it into code and lock it down without rebuilding your platform.
Tell us what you run in Azure today and we’ll tell you what it would take to get it into code and behind proper access controls.
The platform had grown one portal click at a time, with no record of how it was set up. We imported every resource into Terraform, put the public apps behind Cloudflare and closed the database to everyone except approved users. The business kept the platform it had and can now rebuild, review and change it safely.
A cloud platform built one resource at a time in the Azure portal can run happily for years. What it doesn’t have is a written record of what’s there and why each setting is the way it is, so every change, audit question or rebuild starts with someone clicking through the portal and trying to remember.
Resources were added by hand over the years. A simple question about the setup means opening each one in the portal, and an audit request turns into an afternoon of clicking.
Small differences build up between environments. A release that passed in test breaks in production, and the fix is another manual change that nobody writes down.
The engineer who set it up is the only one who knows why things are the way they are. When they’re on leave or move on, changes stop or get guessed.
Network access was opened for a quick fix and never closed again. The database that holds your customers’ data is one leaked password away from a breach.
With no firewall in front, scans, bots and junk traffic go straight to your apps, and your servers carry the load and the risk.
If an environment breaks or gets deleted, getting it back means clicking it together again, with no way to check it came back the same.
The setup lives in the portal and in one or two people’s heads, and every change is a gamble on what they remember.
Flip the switch to see the estate before and after the work.
A platform that lives in the portal and in one person’s memory.
An estate written down in code, behind proper access controls.
Click through each step to see it working.
We wrote Terraform for each resource that was already running (container apps, static web apps, networking, Key Vault, storage and the PostgreSQL database) and imported it. Importing reads a resource into Terraform’s state without changing it, so a plan afterwards shows whether the code matches what’s live.
Terraform’s state sits in a storage account, so every change runs from one source of truth. Production and test each have their own Terraform, so test can be rebuilt to match.
DNS moved to Cloudflare and web application firewall rules went in front of the public apps, so traffic is filtered before it reaches them.
The PostgreSQL database sits behind a Cloudflare Tunnel. Approved people get in through Zero Trust access, and the database is no longer reachable over the network.
Brought the existing Azure resources (container apps, static web apps, networking, Key Vault, storage and the PostgreSQL database) into Terraform without rebuilding them.
Set up Terraform state in a storage account, so changes run from one source of truth.
Each environment has its own Terraform, so the test setup can be rebuilt to match.
Moved DNS to Cloudflare and added web application firewall rules for the public apps.
Put the PostgreSQL database behind a Cloudflare Tunnel, so only approved people get in.
A detailed report on what we found in the estate, with performance recommendations, measured against CBOS’s own infrastructure guidelines.
Hover over a card for more.
An engineer edits the Terraform, reads the plan and applies it, so what’s about to change is visible before it happens.
Test has its own definition, so getting it back after it breaks means applying that definition again.
Anyone on the team can read how the estate is built, in code that’s versioned with every change.
Approved people reach the database through Zero Trust access, and nobody else reaches it at all.
We go through your estate and write up what we find against our own infrastructure guidelines, with performance recommendations.
We import what’s running into Terraform, set up shared state and give each environment its own definition.
Cloudflare DNS and firewall rules in front of your public apps, and Zero Trust access to the database.
No. Terraform can import resources that already exist, so they come under code where they stand. That’s how this project brought in the existing container apps, static web apps, networking, Key Vault, storage and database.
Importing reads a resource into Terraform’s state and doesn’t change it. Anything that would change shows up in the plan first, so you decide when it happens.
You can still look at everything in the portal. If someone changes a setting there, the next Terraform plan shows the difference, so it gets caught and either written into code or put back.
Approved people keep their access through a Cloudflare Tunnel with Zero Trust. What goes away is access for anyone else on the network.
With a review. On this project that was a detailed findings report, measured against CBOS’s own infrastructure guidelines, with performance recommendations.
Tick what sounds familiar.
Your infrastructure sounds well managed. A short review can still confirm nothing has drifted from what you think is running.
There are gaps worth closing before they cause an outage or a breach. We can review your estate and tell you which ones to fix first.
Your estate is in the state this project started from. We can bring it into code and lock it down without rebuilding your platform.
Tell us what you run in Azure today and we’ll tell you what it would take to get it into code and behind proper access controls.
Interested in building a smarter, more connected operation? Contact us to discuss how AI can support your business goals.
We use cookies to provide you a better user experience on this website. Cookie Policy