Index / Infrastructure as Code

Infrastructure as Code

Abstraction Creative
Index

An application depends on more than its source code. It may need somewhere to run, a database, file storage, network connections, permissions and services that carry out work in the background.

Infrastructure as Code is the practice of defining and maintaining an operating environment through configuration that can be versioned, reviewed and reused. Instead of leaving every important setting inside a provider's dashboard—or inside one person's memory—we create a shared way to describe what should exist and how it should change.

At Abstraction Creative, the value begins with a question: if the person who set this up were unavailable, could someone else understand it well enough to continue responsibly?

That matters to a developer preparing a new environment. It matters to a client planning the next stage of the business. It matters whenever a useful system has to outlast the circumstances in which it was first built.

Give the environment a shared description

An application depends on more than its source code. It may need somewhere to run, a database, file storage, network connections, permissions and services that carry out work in the background.

Infrastructure as Code expresses relevant parts of that arrangement in maintained configuration. The scope depends on the tools and platform: not every setting is necessarily represented, and not every provider gives the same degree of control.

Terraform is one example of a tool that defines infrastructure through reusable configuration. Its workflow separates writing the configuration, reviewing a plan of proposed changes and applying those changes. It illustrates the practice; it is not a requirement that every project use Terraform.

The important distinction is between describing an intention and examining its effect. A configuration change may look small in a file while having a substantial consequence for a running service. Making the change visible gives the team an opportunity to question it before it is applied.

Cloud Infrastructure and Architecture considers which arrangement makes sense. Infrastructure as Code helps express and maintain the chosen arrangement.

Begin with what already exists

For an inherited system, we first need to understand the current environment and who is responsible for it. Which resources support the application? Which are shared with another service? Which settings were changed during an earlier problem? Where is the authoritative record?

Turning an existing environment into code is not permission to rebuild it indiscriminately. Useful resources may contain live data or support work beyond the application we were asked to examine.

We can define an appropriate boundary, compare the documented intention with the actual environment and decide how to bring selected resources into a managed workflow. That may happen gradually. The first useful step could be making one difficult part understandable rather than attempting to automate the whole estate.

The client's team and specialist collaborators often hold knowledge that the dashboard cannot explain. A seemingly unusual setting may exist for a good reason. We want to find that reason before deciding whether to preserve or change it.

The review environment that is almost the same

With a rental team changing its booking application, we can define a review environment that lets staff examine the new availability rules without affecting live reservations. We make both the intended similarities and the necessary differences explicit.

Someone duplicates much of the setup manually. The application starts, but a background task cannot reach its test storage. Another setting still points toward the live notification service. The environment resembles production visually while differing in ways that matter.

A maintained infrastructure definition could make the intended arrangement explicit: the resources involved, their connections and permissions, and which values must differ for review. It could also make the next proposed change easier for another contributor to examine.

The goal would not be a perfectly identical copy of production. Test credentials, notification destinations, access and capacity may need deliberate differences. Those differences should be known, while the behavior under examination remains sufficiently representative.

After applying the configuration, the team would still need to verify the result. Can the background task complete its intended work? Are notifications contained within the test arrangement? Does the application use the expected data? A successfully created environment does not answer those questions by itself.

Now imagine an urgent correction was later made directly in the provider's console but never reflected in the shared definition. The next change could reintroduce the old problem unless that discrepancy is understood.

The definition remains useful through review, verification and continued care—not simply because someone wrote a setup file once.

Review consequences, not just syntax

Before applying a change, we want to understand what it proposes to create, modify, replace or remove. We also need to understand dependencies and the effect on the people using the system.

Would a replacement interrupt a service? Does a storage change affect retained information? Is a permission broader than the task requires? Will an additional resource incur an ongoing cost? What would need to be true before the change proceeds?

The review should connect those consequences to the agreed purpose. The tool's plan can inform the decision, but it cannot know every business dependency or substitute for appropriate expertise.

The relevant client decisions and technical permissions remain distinct. Reviewing a proposal does not grant standing authority for every future change. We agree who reviews, who can apply it and how exceptions are handled.

CI/CD Implementation can provide a repeatable route for checks and approvals. The appropriate level of automation follows the situation, rather than making unattended changes the default goal.

Keep the description and the environment in conversation

Infrastructure can change outside its intended workflow. An emergency adjustment, another tool or a provider-side change can leave the declared configuration and actual environment out of alignment.

That difference is often called drift. HashiCorp's drift guidance distinguishes observing changes from reconciling them with the maintained configuration. The appropriate response requires understanding which state is actually wanted.

In the rental example, the console correction may be a legitimate improvement that belongs in the shared definition. Another unexpected change might need to be reversed. Automatically forcing one to match the other without investigation could preserve the wrong thing.

We want a process for noticing discrepancies, understanding their origin and resolving them deliberately. If an urgent change was necessary, the follow-up should bring the record and agreed configuration back into a useful relationship.

The configuration is a living description, not a historical souvenir of the day the environment was created.

Protect the records that can change the system

The files used to define infrastructure are only part of the arrangement. Tools may also maintain state that connects those definitions to real resources, along with plans and logs used during changes.

Those records can be consequential and sensitive. Terraform's documentation on sensitive data explains that secrets can be stored in state and plan files; hiding a value in ordinary output does not necessarily prevent its storage.

We therefore consider access, storage, collaboration and handling of credentials as part of the implementation. An infrastructure repository should not become a convenient place to collect live passwords. Diagnostic output should help investigation without casually exposing secrets.

Identity and Access Management connects here. Someone who can edit a proposal need not have the same permissions as the process that applies it. The client also needs to know how legitimate access can continue when team members change.

The exact controls depend on the chosen tooling and risks. Having configuration in version control is useful, but it is not a complete security arrangement.

A repeatable environment is not a recovered business

Recreating infrastructure and recovering its contents are different tasks. A definition may help establish a database service without restoring the customer's orders. It may recreate file storage without supplying the documents that belong there.

Application deployment, data recovery and connections to external systems need their own coordinated consideration. Database Design and Development helps explain the information the application depends on; infrastructure definitions do not replace that understanding.

Likewise, reverting a configuration file does not guarantee that an applied change can be reversed safely. A resource may have been removed, data may have changed, or another system may now depend on the new arrangement.

Deployment and Release Management provides the wider context for sequencing, verification and recovery decisions. We plan for consequences rather than treating version history as an undo button for the world outside the file.

Leave the next person more than a repository

A useful handoff explains the environment's purpose, what the configuration covers, what remains outside it, how changes are reviewed and which knowledge is needed to operate the workflow.

It can include a readable system map, ownership, meaningful settings, dependency requirements and guidance for interpreting a proposed change. Living workbooks help keep that knowledge available to the people who need it. They should explain why important choices were made, not merely which command was used.

Abstraction defines and maintains infrastructure configuration directly and alongside specialist partners. We can work with the people already responsible for the environment, preserving useful conventions and deciding together where a more repeatable approach would help. The scope should include the effort needed to maintain that approach, not only introduce it.

DevOps connects this technical practice to the continuing collaboration around the software. Within our wider process, it participates in the adaptable cycle:

Discover → Define → Explore → Design / Develop / Market → Learn → Advance → Discover

We discover the actual arrangement, define what needs to be understood, explore an appropriate boundary and develop the configuration and review process. What happens when the team uses it informs the next improvement.

If your environment works but nobody can quite explain how—or each new setup seems to rediscover the same missing details—we can start there. You do not need a preferred infrastructure tool before beginning the conversation. You need a clearer relationship between what the system requires and what the people maintaining it can confidently understand.

Contact Us

Start a conversation.

Tell us what you’re working toward and where you could use help. We’ll reply by email.

Tell us a little about yourself or your organization, what you’re trying to accomplish and what’s getting in the way.