Full Stack Release using Terraform

This approach implements the Autonomous Development, Authoritative Release principle, to orchestrate a full stack release, i.e. the automated coordination of Infrastructure as Code, Configuration Management and Application deployment.

This is an alternative implementation to How to Helm, using Terraform instead of Helm, but with the same core principles of runtime versioning and desired state, and the inclusion of the Kubernetes Infrastructure as Code, using a single language, i.e. Terraform.

The Application Stack can be defined once, and deployed many times into separate namespaces, e.g. development, test and production.

graph TD subgraph k8s["Kubernetes"] subgraph ns1["Dev namespace"] ns1-ingress["ingress"] subgraph ns1-pod-1["Pod"] ns1-con-a["container"] end subgraph ns1-pod-2["Pod"] ns1-con-b["container"] ns1-con-c["container"] end end subgraph ns2["Test namespace"] ns2-ingress["ingress"] subgraph ns2-pod-1["Pod"] ns2-con-a["container"] end subgraph ns2-pod-2["Pod"] ns2-con-b["container"] ns2-con-c["container"] end end subgraph ns3["Production namespace"] ns3-ingress["ingress"] subgraph ns3-pod-1["Pod"] ns3-con-a["container"] end subgraph ns3-pod-2["Pod"] ns3-con-b["container"] ns3-con-c["container"] end end end client --> ns1-ingress --> ns1-con-a ns1-ingress --> ns1-con-b --> ns1-con-c client --> ns2-ingress --> ns2-con-a ns2-ingress --> ns2-con-b --> ns2-con-c client --> ns3-ingress --> ns3-con-a ns3-ingress --> ns3-con-b --> ns3-con-c classDef external fill:lightblue class client external classDef dashed stroke-dasharray: 5, 5 class ns1,ns2,ns3 dashed classDef dotted stroke-dasharray: 2, 2 class ns1-pod-1,ns1-pod-2,ns2-pod-1,ns2-pod-2,ns3-pod-1,ns3-pod-2 dotted