Sunday, January 21, 2024

 

This is a continuation of the listing of design choices for infrastructure consolidation that fall into well-known patterns. These include the following patterns:   

11.   Securing perimeter: Some of the security concerns are about opening up ip addresses and port to the public internet. Web API requests are notorious for various kinds of exploits and proper hardening involves using a firewall to route all the requests. This pattern manifests as a central resource that has an attached firewall for all the web applications and services hosted on different hosts.  

12.   Deployment of dashboards and application insights: While technically not deemed a requirement, it is always useful to add anything that helps with the continuous monitoring of the deployed resources to the point that troubleshooting can be done by anyone merely by glancing at the dashboards. This kind of infrastructure deployment maturity is essential for large teams and infrastructure because it offloads the maintenance.

13.   Dependency chaining – Most infrastructure is deployed with their dependencies independently so there is usually not a case of dependencies blocking another deployment. That said, it might take multiple times for a pipeline to run before all the dependencies and the dependent resources are created. Sometimes this might take several deployments if the generated resource identifiers or guids must be passed in manually to other resources or their configurations. If dependencies are deployed together for the same business purpose, it might even be beneficial to use the same user managed identity for all of the associated resources.

14.   Redeployment – All dependencies and their access control identities must be in sync for the whole deployment to work together. Sometimes, this gets broken when identities change, or dependencies are replaced. Even creating one by the same name and different principal_ids can cause disruptions. It is best to remove and add back the entities by the same names so that the associations can be refreshed, and they don’t use the stale identifiers that they relied upon. Redeployment does not get captured in IaC but it is a pattern one cannot do without.

15.   Policy compliance – Almost all resource types have their best practices and recommended settings. Compliance of resources to these policies is equally important as it safeguards the resources and assures overall safety. The type of effect a policy has depends on its settings, so they might selectively apply across resource types and span different resource and infrastructure grouping. Having a common module where the policies can be enforced as a one-point maintenance is not only a good thing but also time-saving. Since the common module can be versioned, instance can still point to older versions if they must.

16.   Metadata – The state stored for an IaC is sometimes referred to as the metadata of a resource to which it must be synchronized whenever there is a drift. However, state is as scoped as the infrastructure groupings and can be somewhat disparate making it necessary to locate the state before it can be interpreted. Since state is usually comprised of json with entries each for different resources or modules as listed in the infrastructure, it is easy to view these collectively as a key-value pair where the keys are the references to the resources in the Portal and the values are their json descriptions.   

Previous articles: IaCResolutionsPart65.docx 

 

No comments:

Post a Comment