{"id":2942,"date":"2024-08-24T14:46:46","date_gmt":"2024-08-24T13:46:46","guid":{"rendered":"https:\/\/contentlabstudy.com\/soft\/?p=2942"},"modified":"2026-09-24T21:16:02","modified_gmt":"2026-09-24T20:16:02","slug":"deployment-infrastructure","status":"publish","type":"post","link":"https:\/\/contentlabstudy.com\/soft\/deployment-infrastructure\/","title":{"rendered":"Deployment Infrastructure"},"content":{"rendered":"<p><strong>Deployment infrastructure<\/strong> is everything that must exist for a build to become a running service: compute, network, identity, data stores, DNS, TLS. If it is not in code (or a documented exception), it will drift.<\/p>\n<h2>Layers<\/h2>\n<ul>\n<li><strong>Identity and secrets:<\/strong> managed identities, vaults. No long-lived keys in pipelines if the platform can issue short-lived ones.<\/li>\n<li><strong>Network:<\/strong> private data plane, public edge, TLS termination, allow-lists. Do not confuse \u201cVNet\u201d with security by itself.<\/li>\n<li><strong>Compute:<\/strong> VMs, App Service, containers, functions. Pick one default per workload class.<\/li>\n<li><strong>Data:<\/strong> backups, restore tested, migration path. A disk is not a backup.<\/li>\n<li><strong>Observability:<\/strong> logs and metrics leave the box. See <a href=\"\/soft\/software-metrics-monitoring\/\">metrics<\/a>.<\/li>\n<\/ul>\n<h2>IaC<\/h2>\n<p>Bicep, Terraform, Pulumi, or cloud-native stacks \u2014 the tool matters less than: reviewable diffs, a state store you trust, and no click-ops in prod. Bootstrap the state backend once; do not chicken-egg it every time.<\/p>\n<h2>Example<\/h2>\n<p>The app uses a managed identity to read secrets from the vault. The pipeline identity can deploy this app and cannot read the whole subscription.<\/p>\n<h2>What breaks it<\/h2>\n<p>The connection string, password included, is in the pipeline file in git.<\/p>\n<pre><code>variables:\n  ConnectionStrings__Db: Server=prod.example;User Id=app;Password=stored-in-git<\/code><\/pre>\n<h2>Pitfalls<\/h2>\n<ul>\n<li>Prod only exists as a VM someone named <code>web1<\/code> in 2019.<\/li>\n<li>Staging is a quarter the size and a different SKU, then you are surprised.<\/li>\n<li>Shared \u201cdev\u201d database for all pipelines.<\/li>\n<\/ul>\n<p>Local stand-ins: <a href=\"\/soft\/local-kubernetes\/\">local Kubernetes<\/a>. Principles: <a href=\"\/soft\/deployment-principles\/\">deployment principles<\/a>.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Deployment infrastructure is everything that must exist for a build to become a running service: compute, network, identity, data stores, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[13],"tags":[],"class_list":["post-2942","post","type-post","status-publish","format-standard","hentry","category-software-deployment"],"_links":{"self":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2942","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/comments?post=2942"}],"version-history":[{"count":4,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2942\/revisions"}],"predecessor-version":[{"id":3239,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/posts\/2942\/revisions\/3239"}],"wp:attachment":[{"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/media?parent=2942"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/categories?post=2942"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/contentlabstudy.com\/soft\/wp-json\/wp\/v2\/tags?post=2942"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}