Technical Debt in IaC:
A case study might be a great introduction to this
subject. A team in an enterprise wanted
to set up a new network in compliance with the security standards of the
organization and migrate resources from the existing network to the new one.
When they started out allocating subnets from the virtual network address space
and deploying the first few resources such as an analytical workspace and its
dependencies, they found that the exact same method provisioning for the old
network did not create a resource that was at par with the functionality of the
old one. For example, a compute instance could not be provisioned into the
workspace in the new subnet because there was an error message that said,
“could not get workspace info, please check the virtual network and associated
rules”. It turned out that subnets were created with an old version of its
definition from the IaC provider and lacked the new settings that were
introduced more recently and were required for compatibility with the recent
workspace definitions also published by the same IaC provider. The
documentation on the IaC provider’s website suggests that the public cloud that
provides those resources had introduced breaking changes and newer versions
required newer definitions. This forced the team to update the subnet
definition in its IaC to the most recent from the provider and redo all the allocations
and deployments after a tear down. Fortunately, the resources introduced to the
new virtual network were only pilots and represented a tiny fraction of the
bulk of the resources supporting the workloads to migrate.
Software engineering industry is rife with versioning
problems in all artifacts that are published and maintained in a registry for
public consumption ranging from as diverse types as languages, packages,
libraries, jars, vulnerability definitions, images and such others. In the IaC,
the challenge is somewhat different because deployments are usually tiered and
the priority and severity of a technical debt differs from case to case with
infrastructure teams maintaining a wide inventory of deployments, their
constituent resources and customers. It just so happens in this example that
the failures are detected early, and the resolutions are narrow and specific,
otherwise rehosting and much less restructuring are not easy tasks because they
require complex deployments and steps.
While cost estimation, ROI and planning are as usual to any software engineering upgrades and project management, we have the advantage of breaking down deployments and their redeployments into contained boundaries so that they can be independently implemented and tested. Scoping and enumerating dependencies come with this way of handling the technical debt in IaC. A graph of dependencies between deployments can be immensely helpful to curate for efforts – both now and in the near future. Sample way of determining this co
No comments:
Post a Comment