﻿<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Packt CloudPro]]></title><description><![CDATA[ Our mission is to bring you the freshest updates in Cloud, Identity and Access Management, CI/CD, DevSecOps, Cloud Security, and adjacent domains. ]]></description><link>https://packtcloudpro.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!V0WJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fad549-0ede-4d6f-b58f-17cb8c61d2e8_500x500.png</url><title>Packt CloudPro</title><link>https://packtcloudpro.substack.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 15 Jun 2026 05:49:55 GMT</lastBuildDate><atom:link href="https://packtcloudpro.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Packt]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[packtcloudpro@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[packtcloudpro@substack.com]]></itunes:email><itunes:name><![CDATA[Packt]]></itunes:name></itunes:owner><itunes:author><![CDATA[Packt]]></itunes:author><googleplay:owner><![CDATA[packtcloudpro@substack.com]]></googleplay:owner><googleplay:email><![CDATA[packtcloudpro@substack.com]]></googleplay:email><googleplay:author><![CDATA[Packt]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[AI Infrastructure & Agentic Workflows Start with Better Engineering]]></title><description><![CDATA[Three hands-on sessions for platform, network, and Linux teams trying to make agentic workflows useful without making them reckless.]]></description><link>https://packtcloudpro.substack.com/p/ai-infrastructure-and-agentic-workflows</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/ai-infrastructure-and-agentic-workflows</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Wed, 10 Jun 2026 16:15:10 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hzxr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi!</p><p>In this issue, I want to point you toward three sessions worth your time if you work near platforms, networks, Linux, automation, or incident response. They are connected by one theme: <em><strong>AI in operations is only useful when the boundaries are engineered first</strong></em><strong>.</strong></p><p>That has been the thread running through recent CloudPro issues, even when the topics looked unrelated. In the last few issues, we&#8217;ve kept coming back to the same engineering instinct: slow down, separate the moving parts, and understand what should happen before you let anything change. Whether we were talking about broken containers, MCP design, or admin rights, the point was never just the tool. It was the discipline around the tool.</p><p>AI does not remove that habit. It raises the cost of skipping it. The teams that get value from agents will not be the ones that connect the most tools. They will be the ones that know what the agent can see, what it can change, when it must stop, and how a human verifies the next step.</p><p>Taken together, these sessions give you a practical way to think about AI where it actually shows up in your work: inside the platform, inside network operations, and at the Linux command line.</p><h1 style="text-align: center;"><strong>FINAL CALL - Building AI-Native Platform Engineering Systems<br>Last 24 hours!</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/building-ai-native-platform-engineering-systems-tickets-1987132120665?aff=CloudproNLJune10&amp;discount=FINAL50" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hzxr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 424w, https://substackcdn.com/image/fetch/$s_!hzxr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 848w, https://substackcdn.com/image/fetch/$s_!hzxr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 1272w, https://substackcdn.com/image/fetch/$s_!hzxr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hzxr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Build AI Native Platform Engineering Systems&quot;,&quot;title&quot;:&quot;Build AI Native Platform Engineering Systems&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/building-ai-native-platform-engineering-systems-tickets-1987132120665?aff=CloudproNLJune10&amp;discount=FINAL50&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Build AI Native Platform Engineering Systems" title="Build AI Native Platform Engineering Systems" srcset="https://substackcdn.com/image/fetch/$s_!hzxr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 424w, https://substackcdn.com/image/fetch/$s_!hzxr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 848w, https://substackcdn.com/image/fetch/$s_!hzxr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 1272w, https://substackcdn.com/image/fetch/$s_!hzxr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3f9331e4-b661-4ff2-94aa-3867906a9b2e_1920x960.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Start at the platform layer.</p><p>If you run an internal platform, you&#8217;ve probably felt the pressure: AI in the developer portal, agents that explain failures, golden paths that do more than point to templates.</p><p>The challenge is that platform agents need context, telemetry, policy, safe actions, approvals, and clear trust boundaries. AI can&#8217;t just be bolted on.</p><p>That&#8217;s why <em><strong>Building AI-Native Platform Engineering Systems</strong></em> stands out. It covers Backstage, OpenChoreo, CI/CD, golden paths, control planes, policy-as-code, observability, guardrails, and platform intelligence - with AI treated as part of the architecture, not an afterthought.</p><p>A solid read for platform engineers, DevOps engineers, SREs, architects, and engineering leaders asking:</p><p><em>&#8220;Can we make our platform AI-native?&#8221;</em></p><p>The answer may be yes, but only with the right control surfaces.</p><p><strong>Use code FINAL50 to get 50% off</strong></p><p><strong><a href="https://www.eventbrite.co.uk/e/building-ai-native-platform-engineering-systems-tickets-1987132120665?aff=CloudproNLJune10&amp;discount=FINAL50">BOOK YOUR SEAT NOW</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!451M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!451M!,w_424,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 424w, https://substackcdn.com/image/fetch/$s_!451M!,w_848,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 848w, https://substackcdn.com/image/fetch/$s_!451M!,w_1272,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 1272w, https://substackcdn.com/image/fetch/$s_!451M!,w_1456,c_limit,f_webp,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!451M!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif" width="320" height="106.66666666666667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:94,&quot;width&quot;:282,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;packt&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="packt" title="packt" srcset="https://substackcdn.com/image/fetch/$s_!451M!,w_424,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 424w, https://substackcdn.com/image/fetch/$s_!451M!,w_848,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 848w, https://substackcdn.com/image/fetch/$s_!451M!,w_1272,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 1272w, https://substackcdn.com/image/fetch/$s_!451M!,w_1456,c_limit,f_auto,q_auto:good,fl_lossy/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3a16c876-fac5-4a20-873b-30bb1ecaedbf_282x94.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The session is on June 11, i.e., 24 hours from now, and you can use the discount code FINAL50 when booking.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/engineering-agentic-network-operations-tickets-1986521758054?aff=CloudproNLJune10&amp;discount=SPECIAL50" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Xwp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 424w, https://substackcdn.com/image/fetch/$s_!1Xwp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 848w, https://substackcdn.com/image/fetch/$s_!1Xwp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 1272w, https://substackcdn.com/image/fetch/$s_!1Xwp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Xwp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Engineering Agentic Network Operations&quot;,&quot;title&quot;:&quot;Engineering Agentic Network Operations&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/engineering-agentic-network-operations-tickets-1986521758054?aff=CloudproNLJune10&amp;discount=SPECIAL50&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Engineering Agentic Network Operations" title="Engineering Agentic Network Operations" srcset="https://substackcdn.com/image/fetch/$s_!1Xwp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 424w, https://substackcdn.com/image/fetch/$s_!1Xwp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 848w, https://substackcdn.com/image/fetch/$s_!1Xwp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 1272w, https://substackcdn.com/image/fetch/$s_!1Xwp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0013f3ef-9315-4391-9fd7-4efc9544abca_1920x960.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Engineering Agentic Network Operations</strong></p><p>Once platform boundaries are in place, the next challenge is network operations, where many AI demos fall apart.</p><p>It&#8217;s easy to build an agent that summarizes data or suggests a config. It&#8217;s much harder to build one that works within real constraints, recovers from failures, and knows when to hand control back to a human.</p><p>That&#8217;s the focus of <em><strong>Engineering Agentic Network Operations.</strong></em></p><p>The workshop covers MCP, OpenClaw, NetClaw, FastMCP, Containerlab, Arista cEOS, and more. But the real value is learning how to design agentic workflows with clear scope, guardrails, recovery paths, and human oversight.</p><p>For network automation, SRE, platform, and infrastructure teams, those questions matter long before an agent is trusted with production operations.</p><p><strong>Use code SPECIAL50 to get 50% off</strong></p><p><strong><a href="https://www.eventbrite.co.uk/e/engineering-agentic-network-operations-tickets-1986521758054?aff=CloudproNLJune10&amp;discount=SPECIAL50">BOOK YOUR SEAT NOW</a></strong></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.co.uk/e/agentic-linux-from-commands-to-ai-agents-tickets-1990630834412?aff=CloudproNLJune10&amp;discount=EARLY40" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S3Qc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 424w, https://substackcdn.com/image/fetch/$s_!S3Qc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 848w, https://substackcdn.com/image/fetch/$s_!S3Qc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 1272w, https://substackcdn.com/image/fetch/$s_!S3Qc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S3Qc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/061345f6-03de-403d-a136-47f0547eae16_1920x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AI-Powered Platform Engineering &#8212; Cohort 2&quot;,&quot;title&quot;:&quot;AI-Powered Platform Engineering &#8212; Cohort 2&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.eventbrite.co.uk/e/agentic-linux-from-commands-to-ai-agents-tickets-1990630834412?aff=CloudproNLJune10&amp;discount=EARLY40&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI-Powered Platform Engineering &#8212; Cohort 2" title="AI-Powered Platform Engineering &#8212; Cohort 2" srcset="https://substackcdn.com/image/fetch/$s_!S3Qc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 424w, https://substackcdn.com/image/fetch/$s_!S3Qc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 848w, https://substackcdn.com/image/fetch/$s_!S3Qc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 1272w, https://substackcdn.com/image/fetch/$s_!S3Qc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F061345f6-03de-403d-a136-47f0547eae16_1920x960.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Agentic Linux &#8211; From Commands to AI Agents</strong></p><p>Then there&#8217;s the base layer.</p><p>No matter how advanced the platform, a lot of real work still ends up in Linux - reading logs, checking services, fixing permissions, troubleshooting errors, and deciding whether a generated command is actually safe to run.</p><p>That&#8217;s why <em><strong>Agentic Linux &#8211; From Commands to AI Agents</strong></em> is a useful third piece.</p><p>The workshop covers ChatGPT CLI, Shell Genie, Aider, Goose CLI, Bash scripting, troubleshooting, automation, and system administration tasks. What I like is that it treats AI as an assistant, not a replacement for judgment.</p><p>Generating a command is easy. Knowing whether it&#8217;s safe, spotting destructive actions before they run, and keeping humans in the approval loop is the hard part.</p><p>For Linux administrators, DevOps engineers, SREs, and IT professionals, it&#8217;s a practical look at using AI at the command line without turning the shell into a roulette wheel.</p><p><strong>Use code EARLY40 to get 40% off</strong></p><p><strong><a href="https://www.eventbrite.co.uk/e/agentic-linux-from-commands-to-ai-agents-tickets-1990630834412?aff=CloudproNLJune10&amp;discount=EARLY40">BOOK YOUR SEAT NOW</a></strong></p><div><hr></div><h1 style="text-align: center;"><strong>A few books to keep beside these sessions</strong></h1><p>One more thing worth mentioning: these sessions pair well with a few books from our list if you want to go deeper after the labs.<br><br>For the first workshop, I&#8217;d start with <em>Platform Engineering for Architects</em><strong>,</strong> which is especially relevant because attendees of Building AI-Native Platform Engineering Systems get the book for free. <em>Mastering Enterprise Platform Engineering</em> is the natural follow-up if you&#8217;re thinking about platform engineering, delivery workflows, and generative AI at enterprise scale. For the network operations side, <em>AI Networking Cookbook</em> fits neatly with the agentic network operations session. And if the Linux workshop is closer to your day-to-day work,<em>The Ultimate AI Guide for Linux Engineers</em> is a good companions for thinking about what AI-generated commands are actually touching underneath.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.amazon.com/Ultimate-Guide-Linux-Engineers-environments/dp/1806664232/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!og0A!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 424w, https://substackcdn.com/image/fetch/$s_!og0A!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 848w, https://substackcdn.com/image/fetch/$s_!og0A!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!og0A!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!og0A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg" width="200" height="246" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:246,&quot;width&quot;:200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;The Ultimate AI Guide for Linux Engineers&quot;,&quot;title&quot;:&quot;The Ultimate AI Guide for Linux Engineers&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.amazon.com/Ultimate-Guide-Linux-Engineers-environments/dp/1806664232/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="The Ultimate AI Guide for Linux Engineers" title="The Ultimate AI Guide for Linux Engineers" srcset="https://substackcdn.com/image/fetch/$s_!og0A!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 424w, https://substackcdn.com/image/fetch/$s_!og0A!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 848w, https://substackcdn.com/image/fetch/$s_!og0A!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!og0A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03fbe370-8519-425f-98f8-2492e5f82837_200x246.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>The Ultimate AI Guide for Linux Engineers</strong></p><p><strong><a href="https://www.amazon.com/Ultimate-Guide-Linux-Engineers-environments/dp/1806664232/">BUY NOW ON AMAZON</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.amazon.com/Mastering-Enterprise-Platform-Engineering-high-performance/dp/B0F99BZTT5" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xPfu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xPfu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xPfu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xPfu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xPfu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg" width="200" height="246" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:246,&quot;width&quot;:200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Mastering Enterprise Platform Engineering&quot;,&quot;title&quot;:&quot;Mastering Enterprise Platform Engineering&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.amazon.com/Mastering-Enterprise-Platform-Engineering-high-performance/dp/B0F99BZTT5&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Mastering Enterprise Platform Engineering" title="Mastering Enterprise Platform Engineering" srcset="https://substackcdn.com/image/fetch/$s_!xPfu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xPfu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xPfu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xPfu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F072cf7db-282b-4ff1-b15c-03c1265bf1b3_200x246.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Mastering Enterprise Platform Engineering</strong></p><p><strong><a href="https://www.amazon.com/Mastering-Enterprise-Platform-Engineering-high-performance/dp/B0F99BZTT5">BUY NOW ON AMAZON</a></strong></p><p><strong>AI Networking Cookbook</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.amazon.com/Networking-Cookbook-AI-assisted-automation-development/dp/1805807994/" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X_Ye!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X_Ye!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X_Ye!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X_Ye!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X_Ye!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg" width="212" height="261.5054945054945" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:212,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;AI Networking Cookbook&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.amazon.com/Networking-Cookbook-AI-assisted-automation-development/dp/1805807994/&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="AI Networking Cookbook" title="AI Networking Cookbook" srcset="https://substackcdn.com/image/fetch/$s_!X_Ye!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 424w, https://substackcdn.com/image/fetch/$s_!X_Ye!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 848w, https://substackcdn.com/image/fetch/$s_!X_Ye!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!X_Ye!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1cc4ebc4-8e9b-4a9d-aa65-985b8c708c43_2250x2775.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.amazon.com/Networking-Cookbook-AI-assisted-automation-development/dp/1805807994/">BUY NOW ON AMAZON</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.amazon.com/Platform-Engineering-Architects-Max-K%C3%B6rb%C3%A4cher/dp/1836203594" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gnve!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gnve!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gnve!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gnve!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gnve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg" width="202" height="249.17032967032966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1796,&quot;width&quot;:1456,&quot;resizeWidth&quot;:202,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Platform Engineering for Architects&quot;,&quot;title&quot;:&quot;Platform Engineering for Architects&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://www.amazon.com/Platform-Engineering-Architects-Max-K%C3%B6rb%C3%A4cher/dp/1836203594&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Platform Engineering for Architects" title="Platform Engineering for Architects" srcset="https://substackcdn.com/image/fetch/$s_!Gnve!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gnve!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gnve!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gnve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6bc13f43-42c9-46ae-8836-2482b274cee0_2250x2775.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Platform Engineering for Architects<br></strong></p><p><strong><a href="https://www.amazon.com/Platform-Engineering-Architects-Max-K%C3%B6rb%C3%A4cher/dp/1836203594">BUY NOW ON AMAZON</a></strong></p><p>The useful question is not whether AI can be added to these workflows. It can, and most teams are already experimenting with it somewhere. The harder question is whether the workflow still makes sense once AI is inside it. Can the team understand what happened? Can they review the output? Can they stop a bad change before it lands? Can they trust the system more after adding AI, not less?</p><p>That is the thread running through all three sessions. They are not about chasing the newest tool. They are about taking the work many of us already do across platforms, networks, and Linux environments, and asking what has to change when AI becomes part of that work.</p><p>That is what makes these sessions useful. They are not abstract AI talks. They sit close to the places many of us actually work: the platform layer, network operations, and the Linux command line.</p><p>I&#8217;ll be in attendance as well, because these are exactly the conversations CloudPro needs to keep having: what is useful, what is unsafe, what is ready, and what still needs a human in the loop.</p><p>This is time-sensitive. The first session is on June 11, and the other two follow later this month. If one of these areas is on your roadmap, I would not skip it.</p><p>Cheers,</p><p>Apramit</p><p>Editor-in-Chief</p>]]></content:encoded></item><item><title><![CDATA[Most "I Need Intune Admin Rights" Requests Aren't About Admin Rights]]></title><description><![CDATA[A clean way to decide when users need elevation, and when they just need the right app delivery.]]></description><link>https://packtcloudpro.substack.com/p/most-i-need-intune-admin-rights-requests</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/most-i-need-intune-admin-rights-requests</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 27 Apr 2026 12:19:28 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!9g4H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi!</p><p>Local intune admin rights are one of those problems every Windows shop runs into eventually, and EPM is usually the first answer that comes up. But how you roll it out, and who you actually license for it, makes a real difference to both your security posture and your budget. Today&#8217;s CloudPro issue is adapted from <strong><a href="https://www.packtpub.com/en-us/product/mastering-endpoint-management-using-microsoft-intune-suite-9781806021949">Mastering Endpoint Management using Microsoft Intune Suite</a></strong> by Saurabh Sarkar and Rahul Singh, and it lays out a clean way to think through the decision.</p><p>Cheers,</p><p>Shreyans Singh</p><p>Editor-in-Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/most-i-need-intune-admin-rights-requests?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/most-i-need-intune-admin-rights-requests?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h1 style="text-align: center;">CloudPro #124: Most &#8220;I Need Intune Admin Rights&#8221; Requests Aren&#8217;t About Admin Rights</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9g4H!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9g4H!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 424w, https://substackcdn.com/image/fetch/$s_!9g4H!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 848w, https://substackcdn.com/image/fetch/$s_!9g4H!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!9g4H!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9g4H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png" width="1456" height="1092" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/deb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:131522,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/195619889?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9g4H!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 424w, https://substackcdn.com/image/fetch/$s_!9g4H!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 848w, https://substackcdn.com/image/fetch/$s_!9g4H!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 1272w, https://substackcdn.com/image/fetch/$s_!9g4H!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdeb17327-7642-4543-b318-bd8baedd91fe_1800x1350.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Every security team eventually gets there: local admin rights have to go. Fair enough- they&#8217;re a known weakness, and leaving users as admins on their own machines isn&#8217;t defensible anymore. So you start looking at EPM, and the easiest thing to do is buy licenses for everyone, turn on self-elevation, and call it solved. Pause before you do that. You&#8217;ll spend more than you need to and you&#8217;ll be using the tool for something it isn&#8217;t really designed for.</p><p>EPM gets pitched, and often understood, as &#8220;the safe way to give users admin rights.&#8221; That framing is the source of most of the trouble. EPM isn&#8217;t an admin-rights replacement and it isn&#8217;t an app delivery mechanism. It&#8217;s elevation control. It lets a specific application run with admin privileges in a specific moment, under a rule you&#8217;ve defined. That&#8217;s a much narrower job than &#8220;make this user an admin,&#8221; and once you see the difference, the licensing decision gets a lot easier.</p><p>Start with app delivery, because most &#8220;I need admin&#8221; requests aren&#8217;t actually about admin. They&#8217;re about getting an app installed. If you push your common business apps via Intune as Required, they install in the system context and the user doesn&#8217;t need elevation at all. For the long tail of apps where you&#8217;re not sure who needs what, make them Available through Company Portal. The user installs them on demand, still in system context, still without elevation. Get this layer right and a huge chunk of the supposed &#8220;need for admin rights&#8221; disappears.</p><p>What&#8217;s left after that is the actual EPM territory. Someone needs to install something niche that isn&#8217;t in your catalog and never will be. A support engineer needs to run ProcMon elevated to debug a real issue. A developer needs an elevated PowerShell window. A user needs to restart a stuck service. These are the cases EPM was built for: controlled, rule-based elevation for specific apps and specific moments. Worth assigning a license for. Worth setting up properly.</p><p>One distinction worth being clean about: EPM is not application control. If your goal is to stop certain apps from running on your devices, EPM doesn&#8217;t do that. It decides what gets elevated, not what gets to run in the first place. App Control for Business is the right tool for that, and conflating the two leads to policies that don&#8217;t do what you think they do.</p><p>Which brings the licensing piece into focus. EPM licensing is per-user, and the population that genuinely runs elevated workloads is almost always a fraction of your fleet: engineers, IT support, certain power users. The rest of your users get their apps through Required and Available and never hit an elevation prompt. Licensing everyone &#8220;just in case&#8221; is the most common way teams overspend on the Intune Suite, and it usually happens because the team skipped the app-delivery question and went straight to the elevation question.</p><p>Get the delivery layer right first. EPM is for what&#8217;s left over.</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/most-i-need-intune-admin-rights-requests?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/most-i-need-intune-admin-rights-requests?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Three Rules for Designing an MCP Server You Won't Regret]]></title><description><![CDATA[Split read and write. Build specific tools. Validate locally.]]></description><link>https://packtcloudpro.substack.com/p/three-rules-for-designing-an-mcp</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/three-rules-for-designing-an-mcp</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 20 Apr 2026 16:14:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!jOSC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>There&#8217;s a decent chance you&#8217;re about to build an MCP server for your observability platform, or your team just shipped one. Before it becomes the thing everyone depends on, three design choices will save you a rewrite later.</p><p>This matters because once agents start relying on your MCP server, the contract gets sticky. You can change the implementation, but renaming tools or restructuring scopes breaks every instruction file and agentic workflow already pointing at them. The first version tends to become the permanent version.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jOSC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jOSC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!jOSC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!jOSC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!jOSC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jOSC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2331963,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/194800088?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jOSC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!jOSC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!jOSC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!jOSC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdbb26a1f-3587-4a71-8b52-f5b438de3484_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p><strong>Rule one: don&#8217;t mix read and write.</strong></p><p>It&#8217;s tempting to expose everything from a single server: get_logs and list_problems alongside the handy create_workflow and send_notification stuff. Don&#8217;t. Put read-only data access in one server and anything that modifies state or triggers actions in a second, separately installed one.</p><p>Two reasons. The obvious one is accidental writes. The less obvious but bigger one is prompt injection. If an agent is connected to both, a poisoned log line or a malicious doc in your RAG pipeline can talk the agent into calling an admin action it had no business calling. Splitting servers shrinks that attack surface. And yes, the MCP spec lets users disable individual tools, but realistically most people leave everything on.</p><p><strong>Rule two: don&#8217;t ship only a generic execute_query tool</strong></p><p>Every observability backend has a query language: NRQL, DQL, PromQL, whatever yours is. You could expose just execute_query and let the agent figure out the syntax. It&#8217;ll work, but badly. The agent guesses, gets a syntax error, retries, refines, retries again. Every round-trip costs API calls, tokens, and latency.</p><p>Build purpose-specific tools for your top use cases alongside the generic one. A get_logs tool taking a timespan and workload identifier will run a clean, optimized query on the first try. No guessing.</p><p>Don&#8217;t overcorrect though. get_logs_from_k8s, get_logs_from_hosts, get_logs_from_apps: now you&#8217;re maintaining ten tools and the agent picks the wrong one half the time anyway. Aim for the middle.</p><p><strong>Rule three: validate locally before hitting the backend</strong></p><p>When the agent sends a query, check it inside the MCP server first. Is the syntax valid? Does the caller actually have permission to access that data? These are cheap checks and they kill the trial-and-error loop at the source. Without them, every bad query becomes a billable backend call.</p><p>Instrument your MCP server and you&#8217;ll see the pattern fast: most failures are the same two or three mistakes. Catch them locally.</p><p>These aren&#8217;t the only mistakes you can make, but they&#8217;re the ones that compound quietly until you&#8217;re rebuilding the server at version two. Worth getting right the first time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>This article was adapted from <a href="https://www.packtpub.com/en-us/product/observability-in-the-ai-native-era-9781806389582">Observability in the AI-Native Era.</a></p><p>Cheers,</p><p>Shreyans Singh</p><p>Editor-in-Chief</p><div><hr></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/three-rules-for-designing-an-mcp?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/three-rules-for-designing-an-mcp?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p>]]></content:encoded></item><item><title><![CDATA[Still Using DeploymentConfig? Here's Why It's Time to Move On]]></title><description><![CDATA[Learn OpenShift 4]]></description><link>https://packtcloudpro.substack.com/p/still-using-deploymentconfig-heres</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/still-using-deploymentconfig-heres</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Fri, 06 Mar 2026 17:16:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aicL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;ve been running OpenShift for a few years, you almost certainly have DeploymentConfigs somewhere in your cluster. They work fine. They&#8217;ve always worked fine.</p><p>But they&#8217;ve been officially deprecated since OpenShift 4.14, and it&#8217;s worth understanding why. Not just because Red Hat says so, but because the underlying technology has genuinely moved on.</p><p>Some context. When OpenShift 3 shipped back in 2015, Kubernetes didn&#8217;t have great deployment management. DeploymentConfig filled that gap: lifecycle hooks, image change triggers, custom rollout strategies. It was ahead of its time, honestly.</p><p>But Kubernetes caught up. Deployments now do automated rollbacks, HPA-based autoscaling, pause and resume during rollouts. And they&#8217;re built on ReplicaSets, not ReplicationControllers. That bit matters because ReplicationController development has stopped upstream entirely. The foundation DeploymentConfig sits on isn&#8217;t getting any love anymore.</p><p>There&#8217;s a design difference worth knowing about too. DeploymentConfig leans toward consistency: if the node running your deployer pod dies, it just waits. Waits for the node to recover, or for someone to manually step in. Deployments lean toward availability: the controller manager runs across multiple masters, so another one picks up the work. In production, you usually want that.</p><p>The other thing is portability. DeploymentConfigs only exist in OpenShift. Deployments are standard Kubernetes. If you ever need to move workloads between clusters or providers, that distinction starts to matter a lot.</p><p>And by sticking with DeploymentConfig, you&#8217;re also cutting yourself off from tooling. No Argo Rollouts for canary or blue-green. No native HPA. No automated rollback. Manual scaling, manual rollback. It&#8217;s fine until you&#8217;re doing it at 2am during an incident and wishing you weren&#8217;t.</p><p>Nobody&#8217;s flipping a switch on you tomorrow. DeploymentConfigs still run. But &#8220;it still works&#8221; isn&#8217;t really a strategy. If you haven&#8217;t started thinking about this, now&#8217;s a good time.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iemS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iemS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 424w, https://substackcdn.com/image/fetch/$s_!iemS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 848w, https://substackcdn.com/image/fetch/$s_!iemS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 1272w, https://substackcdn.com/image/fetch/$s_!iemS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iemS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png" width="629" height="225" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:225,&quot;width&quot;:629,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64617,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/190125530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iemS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 424w, https://substackcdn.com/image/fetch/$s_!iemS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 848w, https://substackcdn.com/image/fetch/$s_!iemS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 1272w, https://substackcdn.com/image/fetch/$s_!iemS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F699e7cf5-6f47-4877-95a3-c95e245cbaca_629x225.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><div><hr></div><p>This article was adapted from <a href="https://www.packtpub.com/en-us/product/learn-openshift-9781835882412">Learn OpenShift.</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aicL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aicL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!aicL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!aicL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!aicL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aicL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png" width="1200" height="600" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:348731,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/190125530?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aicL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 424w, https://substackcdn.com/image/fetch/$s_!aicL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 848w, https://substackcdn.com/image/fetch/$s_!aicL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 1272w, https://substackcdn.com/image/fetch/$s_!aicL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffd724f65-fef0-405d-8462-d15a57fd884c_1200x600.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p>]]></content:encoded></item><item><title><![CDATA[Your Container Just Broke. Here's How to Make the Right Call.]]></title><description><![CDATA[A simple framework for making the right call under pressure]]></description><link>https://packtcloudpro.substack.com/p/your-container-just-broke-heres-how</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/your-container-just-broke-heres-how</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 23 Feb 2026 13:50:16 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a2dc6ca5-36fa-43b1-9493-f98736600092_548x228.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your container is acting up. Do you restart it or rebuild the whole image?</p><p>I&#8217;ve seen engineers waste hours on this because they defaulted to one or the other without thinking it through. So here&#8217;s how I think about it.</p><p><strong>It comes down to one question: is the problem in how the container is running, or in what was built?</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p>If it&#8217;s a runtime issue: the app got stuck, a config change hasn&#8217;t taken effect, something just needs a kick, restart. That&#8217;s the fastest path back to normal and there&#8217;s nothing wrong with it.</p><p>If the image itself might be the problem, restart won&#8217;t help. You&#8217;ll just redeploy the same broken thing. You need to rebuild.</p><p>Sounds simple, but the tricky part is knowing which situation you&#8217;re in. Here&#8217;s how I usually work through it.</p><p>Config, env vars, or secrets changed? Restart the service. New values get picked up at runtime. No need for a new image.</p><p>Base image tag or digest changed? Rebuild. Even if your code is the same, the stuff underneath it isn&#8217;t. Your dependencies have moved.</p><p>You built with <code>latest</code> or your Dockerfile pulls in dynamic dependencies? Rebuild. You don&#8217;t really know what&#8217;s inside that image anymore. Something upstream could have shifted without anyone noticing.</p><p>Application code changed? Obviously rebuild. New code needs a new artifact.</p><p>Container is misbehaving but the image checks out- tag is right, digest matches, nothing has moved upstream? Restart. The image is fine, the container just needs a fresh start.</p><p>Not sure what version is even running? Don&#8217;t do anything yet. Inspect first. Check your image labels, check the digest. Then decide. Guessing under pressure is how you make things worse.</p><p>One small thing that helps a lot: bake a build timestamp into every image. A label, an env var, whatever. It takes seconds to add during the build and it means you can always verify what&#8217;s actually running where. Saves a ton of time when you&#8217;re half-awake and troubleshooting.</p><p>Here&#8217;s the whole thing as a quick reference:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qjv_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qjv_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 424w, https://substackcdn.com/image/fetch/$s_!qjv_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 848w, https://substackcdn.com/image/fetch/$s_!qjv_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 1272w, https://substackcdn.com/image/fetch/$s_!qjv_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qjv_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png" width="548" height="228" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/823956af-ca29-49a3-b04d-66b566633b73_548x228.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:228,&quot;width&quot;:548,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55803,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/188900426?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!qjv_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 424w, https://substackcdn.com/image/fetch/$s_!qjv_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 848w, https://substackcdn.com/image/fetch/$s_!qjv_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 1272w, https://substackcdn.com/image/fetch/$s_!qjv_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F823956af-ca29-49a3-b04d-66b566633b73_548x228.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p><em>This article is adapted from <a href="https://www.packtpub.com/en-us/product/mastering-docker-on-windows-9781836640509">Mastering Docker on Windows</a> by <a href="https://www.linkedin.com/in/peripheralmike/">Michael D. Smith.</a></em></p>]]></content:encoded></item><item><title><![CDATA[How to Build Always-On Applications on Azure]]></title><description><![CDATA[By Stephane Eyskens]]></description><link>https://packtcloudpro.substack.com/p/how-to-build-always-on-applications</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/how-to-build-always-on-applications</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Fri, 13 Feb 2026 11:38:39 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ROeG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today&#8217;s CloudPro Expert Article comes from <strong><a href="https://www.linkedin.com/in/stephane-eyskens/">St&#233;phane Eyskens</a></strong>, a Microsoft Azure MVP and seasoned solution architect with over a decade of experience designing enterprise-scale cloud systems. St&#233;phane is the author of <strong><a href="https://www.packtpub.com/en-us/product/the-azure-cloud-native-architecture-mapbook-9781805805045">The Azure Cloud Native Architecture Mapbook (2nd Edition)</a></strong>, a comprehensive guide featuring over 40 detailed architecture maps that has earned 5.0 stars on Amazon and become an essential resource for cloud architects and platform engineers. </p><p>In the article below, St&#233;phane tackles one of the most challenging aspects of Azure architecture: building truly resilient multi-region systems, with concrete examples using Azure SQL, Cosmos DB, and Azure Storage, complete with code samples and Terraform scripts you can adapt for your own DR testing.</p><p>Happy reading!</p><p>- Shreyans Singh</p><p>Editor-in-Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ROeG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ROeG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ROeG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ROeG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ROeG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ROeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3993778,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ROeG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!ROeG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!ROeG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!ROeG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b152b79-c52b-4a68-a0af-7d8bae71b412_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I like to say that Azure is simple&#8230; until you go multi-region. The transition from a well-designed single-region architecture to a truly resilient multi-region setup is where simplicity gives way to nuance. Concepts that seemed abstract (high availability versus disaster recovery, failover semantics, DNS behavior, data replication guarantees) suddenly become very real, very concrete, and sometimes painfully operational. </p><p><strong>This article is written for architects and senior platform engineers, who already understand the fundamentals but are required to build solutions that must remain available despite regional outages, service failures, or infrastructure-level incidents.</strong> The scope is intentionally narrowed to <strong>Recovery Time Objective (RTO)</strong>. Data corruption, ransomware, and backup-based recovery are explicitly out of scope. Instead, the focus is on how applications and data services behave during <em>live failover scenarios</em>, and how architectural decisions, sometimes subtle ones, can make the difference between a seamless transition and a prolonged outage.</p><p>Through concrete examples using <strong>Azure SQL</strong>, <strong>Cosmos DB</strong>, and <strong>Azure Storage</strong>, this article explores how replication models, DNS design, private endpoints, and SDK behavior interact at runtime, and what architects must do to ensure their applications remain functional when regions fail.</p><p>Rather than focusing on theoretical patterns, the goal here is pragmatic&#8212;minimizing downtime and operational friction when things <em>do</em> go wrong. You&#8217;ll see diagrams, Terraform and deployment scripts, plus .NET code samples you can adapt for your own DR tests and game days.</p><p>Before getting into the details, let&#8217;s briefly revisit the difference between high availability (HA) and disaster recovery (DR).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p>HA and DR exist on a spectrum, with increasing levels of resilience depending on the type of failure you want to withstand:</p><ul><li><p><strong>Application-level failures</strong>: In some cases, you may simply want to tolerate application bugs&#8212;for example, a memory leak introduced by developers. Running multiple instances of the application on separate virtual machines, even on the same physical host, can already prevent a full outage when one instance exhausts its allocated memory. That is for instance, what you would get if you spin up 2 instances of an Azure App Service within the same zone (no zone redundancy).</p></li><li><p><strong>Hardware failures</strong>: To handle hardware failures, workloads should be distributed across multiple racks. That is what you would get if you&#8217;d host virtual machines on availability sets.</p></li><li><p><strong>Data centre&#8211;level outages</strong>: To withstand more severe incidents, workloads should be spread across multiple data centers, such as by deploying them across multiple availability zones. You can achieve this by turning on zone-redundancy on Azure App Service or use zone-redundant node pools in AKS. With such a setup, you should survive a local disaster such as fire, flooding, etc.</p></li><li><p><strong>Regional outages</strong>: Finally, to survive major outages, such as a major earthquake, a country-level power supply issue, etc., workloads must be deployed across geographically distant data centers. You can achieve this by deploying workloads across multiple Azure regions in active/active or active/passive mode.</p></li></ul><p>Looking at Azure SQL</p><p>Let&#8217;s first analyse the different data replication possibilities with Azure SQL. <em>Table 1</em> summarizes the different capabilities.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6HGy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6HGy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 424w, https://substackcdn.com/image/fetch/$s_!6HGy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 848w, https://substackcdn.com/image/fetch/$s_!6HGy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 1272w, https://substackcdn.com/image/fetch/$s_!6HGy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6HGy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png" width="765" height="286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:286,&quot;width&quot;:765,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:55274,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6HGy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 424w, https://substackcdn.com/image/fetch/$s_!6HGy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 848w, https://substackcdn.com/image/fetch/$s_!6HGy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 1272w, https://substackcdn.com/image/fetch/$s_!6HGy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d39afe1-4215-44d7-9e76-30d77b7d1618_765x286.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Table 1 &#8211; Replication capabilities</em></p><p>We&#8217;ll set aside named replicas and geo-restore, as the former does not contribute to disaster recovery and the latter is likely to introduce significant downtime and potential data loss. This leaves geo-replication as the remaining option. As you might have understood by now, using Azure SQL&#8217;s built-in capabilities, you cannot achieve a full ACTIVE/ACTIVE setup since it doesn&#8217;t support multi-region writes. This means that you can only have one read-write region and the secondary region(s) are read only.</p><p><em>Table 2</em> outlines the two available geo-replication techniques.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F9JS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F9JS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 424w, https://substackcdn.com/image/fetch/$s_!F9JS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 848w, https://substackcdn.com/image/fetch/$s_!F9JS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 1272w, https://substackcdn.com/image/fetch/$s_!F9JS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F9JS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png" width="838" height="245" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:245,&quot;width&quot;:838,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24090,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F9JS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 424w, https://substackcdn.com/image/fetch/$s_!F9JS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 848w, https://substackcdn.com/image/fetch/$s_!F9JS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 1272w, https://substackcdn.com/image/fetch/$s_!F9JS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73add42d-aae0-442b-bc21-e7d15ebc93e3_838x245.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Table 2 &#8211; Geo replication options</em></p><p>Active geo-replication may require updates to connection strings or DNS records to point to the new primary after a failover. That said, the actual impact depends on where (*) the client application is located as well as how you deploy to both regions. Let&#8217;s look at this in more detail. <em>Figure 1</em> illustrates an active geo-replication setup between Belgium Central and France Central.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1MSB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1MSB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 424w, https://substackcdn.com/image/fetch/$s_!1MSB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 848w, https://substackcdn.com/image/fetch/$s_!1MSB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 1272w, https://substackcdn.com/image/fetch/$s_!1MSB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1MSB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png" width="980" height="770" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:770,&quot;width&quot;:980,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82913,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1MSB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 424w, https://substackcdn.com/image/fetch/$s_!1MSB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 848w, https://substackcdn.com/image/fetch/$s_!1MSB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 1272w, https://substackcdn.com/image/fetch/$s_!1MSB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc774e9fe-0b4b-44d2-a52a-a51fabd6ee6e_980x770.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 1 &#8211; SQL geo replication with active geo replication</em></p><p>In such a setup, under normal circumstances:</p><ul><li><p>Workloads in the primary region (Belgium Central) can connect to the primary server in read/write mode</p></li><li><p>Workloads in the primary region can perform read-only activities against the secondary replica, providing they tolerate the extra latency incurred by the roundtrip to the remote region (France Central).</p></li><li><p>Workloads in the secondary region (if any), can perform read-only operations against the read replica with no extra latency.</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p>The configuration shown in <em>Figure 1</em> supports a <strong>database-only failover</strong>. Both regions expose private endpoints to <strong>both SQL servers</strong> and rely on <strong>region-scoped DNS zones</strong>.</p><p>Although Private DNS zones are global by design, keeping them regional allows each region to resolve both the primary and secondary servers. This requires <strong>four DNS records</strong> in total&#8212;primary and secondary endpoints registered in each regional zone.</p><p>With a single shared DNS zone, this would not be possible: while all four private endpoints could be deployed, only <strong>two DNS records</strong> would be registered, since the endpoints map to just two FQDNs (primary and secondary). While this approach works, it keeps the regions siloed and prevents any cross-region traffic. From a resilience standpoint, it is preferable to provide as many fallback paths as possible.</p><p>Moreover, as we will see later, with other resources such as Storage Accounts, a single DNS zone would force us to update the DNS records upon failover, causing a minimal downtime. Bottom line: using multiple DNS zones prevents issues during failover.</p><p>Back to active geo replication! In case of failover, SQL servers switch roles: the primary becomes secondary and vice versa. This concretely means that the connection string primary.database.windows.net targets the read/write region in a normal situation but a read-only or unavailable one after failover. Workloads using this connection string would either stop working (if the regional outage persist), either talk to a read-only database instead of a read-write one, once the failover completed. Similarly, the connection string secondary.database.windows.net usually targeting the read-only region under normal circumstances now targets the read-write one after failover.</p><p>Knowing this, a few options exist:</p><ul><li><p>You may choose to fail over everything (database+compute). In that scenario, workloads running in the secondary region can use their default <em>secondary</em> connection string, which will automatically target the new primary after failover. This approach requires the deployment pipeline to be region-aware, detect the target region, and apply the appropriate connection string. When deployed in the primary region, the application should use primary.database.windows.net, while in the secondary region it should already be configured with secondary.database.windows.net. This design eliminates the need for any connection string changes after failover. If your webapps, K8s pods, etc. are already up and running, the only thing you still have to do is route traffic to them. Any other SQL client not running in the secondary region (eg: on-premises), would have to update its connection string to target the new primary.</p><p></p></li><li><p>You may choose to redeploy the compute infrastructure (web apps, etc.) to the secondary region only in case of regional outage. This approach is cheaper but risky as you&#8217;re not guaranteed to have the available capacity and it is causing a significant downtime. However, such an approach allows you to adjust your pipelines, specify the right connection string and simply redeploy your infrastructure and/or application package. <br></p></li><li><p>If you want to deploy the application with the exact same settings in both regions, you&#8217;ll need to update the connection string used by workloads in the secondary region, since primary.database.windows.net will now resolve to an unavailable server after failover. If the original primary later comes back online, it will return as a secondary (read-only) replica, which would not support write operations. You can as well make your application failover aware (**).<br></p></li></ul><p>You can&#8217;t simply update DNS, meaning making secondary target primary and vice versa, because the FQDN (primary-or-secondary.database.windows.net) is validated by the target server, and the names must match&#8212;so redirecting it to a different server would simply fail.</p><p>In conclusion, when using active geo-replication as the replication technique, you should make your applications failover-aware (**) and pre-provision both connection strings and implement the failover/retry logic in the application code itself. You may wrap your Entity Framework context into a <strong>factory</strong> to abstract away the retry logic. Given we typically use a <strong>scoped</strong> lifetime, you may expect some HTTP requests to fail (in case of an API) but new instances targeting the right server would ultimately succeed without having to restart the application. You may as well use a geo-redundant Azure App Configuration and failover it along SQL, then switch the primary server connection string after failover. The SDK allows you to monitor a sentinel key and to reload the configuration without having to restart the application:</p><pre><code>configBuilder.AddAzureAppConfiguration(options =&gt;

{

options.Connect(new Uri(&#8221;&lt;your-app-config-endpoint&gt;&#8221;), new DefaultAzureCredential())

// Load all keys that start with `TestApp:` and have no label

.Select(keyFilter: &#8220;TestApp:*&#8221;, labelFilter: LabelFilter.Null)

.ConfigureRefresh(refreshOptions =&gt;

{

// Trigger full configuration refresh only if the `SentinelKey` changes.

refreshOptions.Register(&#8221;SentinelKey&#8221;, refreshAll: true);

});

});</code></pre><p>More on App Configuration and the sentinel key <a href="https://learn.microsoft.com/en-us/azure/azure-app-configuration/howto-best-practices?tabs=dotnet">https://learn.microsoft.com/en-us/azure/azure-app-configuration/howto-best-practices?tabs=dotnet</a></p><p>Upon failover, you would update the sentinel key, modify connection strings in App Configuration or tell the apps that they failed over, letting them pick the new configuration without the need to restart them.</p><p>As an alternative to active geo-replication, you can use <strong>failover groups</strong>, which allow one or more databases to fail over together to another server. A key benefit of failover group compared to active geo-replication, is the presence of two stable listeners: one for <strong>read-only</strong> traffic and one for <strong>read/write</strong> operations. These listeners remain constant and always point to the current primary and secondary servers. During a failover, applications continue connecting through the listeners rather than connecting directly to a specific SQL server, eliminating the need for connection string changes.</p><p><em>Figure 2</em> illustrates the situation when the primary region is working fine.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nbkz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nbkz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 424w, https://substackcdn.com/image/fetch/$s_!nbkz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 848w, https://substackcdn.com/image/fetch/$s_!nbkz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 1272w, https://substackcdn.com/image/fetch/$s_!nbkz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nbkz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png" width="902" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:902,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:80875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nbkz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 424w, https://substackcdn.com/image/fetch/$s_!nbkz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 848w, https://substackcdn.com/image/fetch/$s_!nbkz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 1272w, https://substackcdn.com/image/fetch/$s_!nbkz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb5fc7faf-d537-4395-8485-1f772fc7ccb1_902x761.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 2 &#8211; Failover group before failover</em></p><p>We see that clients connect to listener endpoints. The failover group comes with two endpoints:</p><ul><li><p>&lt;failovergroupname&gt;.database.windows.net</p></li><li><p>&lt;failovergroupname&gt;.secondary.database.windows.net</p></li></ul><p>These public DNS records are managed by Microsoft and they work with aliases pointing to the replicated servers. The read-write endpoint will always target the server that has the primary role. In <em>Figure 2</em>, it currently points to primary.database.windows.net, our server in Belgium Central.</p><p><em>Figure 3</em> shows the situation after failover</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wgs-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wgs-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 424w, https://substackcdn.com/image/fetch/$s_!Wgs-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 848w, https://substackcdn.com/image/fetch/$s_!Wgs-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 1272w, https://substackcdn.com/image/fetch/$s_!Wgs-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wgs-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png" width="954" height="803" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:803,&quot;width&quot;:954,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76873,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wgs-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 424w, https://substackcdn.com/image/fetch/$s_!Wgs-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 848w, https://substackcdn.com/image/fetch/$s_!Wgs-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 1272w, https://substackcdn.com/image/fetch/$s_!Wgs-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33383906-21ed-4cf2-8fb0-2d21c0368691_954x803.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 3 &#8211; Failover group after failover</em></p><p>We see that this time, the read/write endpoint points to secondary.database.windows.net, our server in France Central, which has become the new primary. Failover groups greatly simplify client connectivity: when private endpoints and DNS zones are properly configured, the failover is completely transparent to connected clients.</p><p>To help you test this, I have created a GitHub repo <a href="https://github.com/stephaneey/azure-and-k8s-architecture/tree/main/availability-samples/sql">https://github.com/stephaneey/azure-and-k8s-architecture/tree/main/availability-samples/sql</a> where you can find both a sample console application and some Terraform code. The solution is a simplified setup but let&#8217;s you grasp how failover groups work. You can find the explanations on how to deploy and test this in the repo itself.</p><p>Next, let&#8217;s look at how to maximize availability using Cosmos DB.</p><h1>Looking at Cosmos DB</h1><p>As of January 2026, Cosmos DB is the only Azure service that supports true active/active read-write deployments through its multi-region writes capability. For scenarios that do not rely on relational models or strict referential integrity&#8212;and where eventual consistency (most commonly session consistency) is acceptable&#8212;Cosmos DB is the preferred choice.</p><p><em>Figure 4</em> represents an API platform spanning two continents (Europe and US) and leveraging the multi-region writes feature.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tX7O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tX7O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 424w, https://substackcdn.com/image/fetch/$s_!tX7O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 848w, https://substackcdn.com/image/fetch/$s_!tX7O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 1272w, https://substackcdn.com/image/fetch/$s_!tX7O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tX7O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png" width="1038" height="755" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d22c9142-bbfd-4314-a990-bdc025435608_1038x755.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:755,&quot;width&quot;:1038,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83836,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tX7O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 424w, https://substackcdn.com/image/fetch/$s_!tX7O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 848w, https://substackcdn.com/image/fetch/$s_!tX7O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 1272w, https://substackcdn.com/image/fetch/$s_!tX7O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd22c9142-bbfd-4314-a990-bdc025435608_1038x755.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 4 &#8211; Leveraging Cosmos DB multi-region writes for a global API platform</em></p><p>Note 1: the raw diagram, extracted from my book, is available here <a href="https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook-Second-Edition/blob/main/Chapter03/diagrams/diagrams.vsdx">https://github.com/PacktPublishing/The-Azure-Cloud-Native-Architecture-Mapbook-Second-Edition/blob/main/Chapter03/diagrams/diagrams.vsdx</a></p><p>Note 2: I delivered a 25-minute live demo of the above setup during a Microsoft API Management event (</p><div id="youtube2-dbwvhGVV3mU" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;dbwvhGVV3mU&quot;,&quot;startTime&quot;:null,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/dbwvhGVV3mU?rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><p> starting at minute 53 of the recording). Microsoft slightly fast-forwarded the video, so the pace is a bit quicker, but it remains possible to follow if you stay focused &#128522;.</p><p>In a nutshell, US callers are sent to the US backend and EU callers to the EU backend. What is interesting in this architecture is that every layer is failure-resistant.</p><p>The entry point, Front Door uses geo-proximity by default but is able to send US callers to EU and vice versa in case the regional backend is unhealthy. API Management&#8217;s regional gateways forward to their regional backends.</p><p>Each of the backends hosted on app services is leveraging the Cosmos DB SDK, which is smart enough to detect whether the corresponding Cosmos DB region is available or not. The API will seamlessly switch to the available region in case of a regional failure impacting only Cosmos DB. That&#8217;s what I&#8217;m going to focus on in this article.</p><p><em>Figure 5</em> focuses on the backend part.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C-KW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C-KW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 424w, https://substackcdn.com/image/fetch/$s_!C-KW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 848w, https://substackcdn.com/image/fetch/$s_!C-KW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 1272w, https://substackcdn.com/image/fetch/$s_!C-KW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C-KW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png" width="1210" height="652" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:652,&quot;width&quot;:1210,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:56466,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C-KW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 424w, https://substackcdn.com/image/fetch/$s_!C-KW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 848w, https://substackcdn.com/image/fetch/$s_!C-KW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 1272w, https://substackcdn.com/image/fetch/$s_!C-KW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5c6c942-feed-4f8d-9ea4-cc1a4e822d7b_1210x652.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gE3m!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gE3m!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 424w, https://substackcdn.com/image/fetch/$s_!gE3m!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 848w, https://substackcdn.com/image/fetch/$s_!gE3m!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 1272w, https://substackcdn.com/image/fetch/$s_!gE3m!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gE3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png" width="1144" height="645" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebf87923-d07d-4a55-977a-26dc1e311989_1144x645.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:645,&quot;width&quot;:1144,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:69932,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gE3m!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 424w, https://substackcdn.com/image/fetch/$s_!gE3m!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 848w, https://substackcdn.com/image/fetch/$s_!gE3m!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 1272w, https://substackcdn.com/image/fetch/$s_!gE3m!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf87923-d07d-4a55-977a-26dc1e311989_1144x645.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 5 &#8211; focusing on backend</em></p><p>My US and EU app services talk respectively to their regional Cosmos DB endpoint under normal circumstances. Note that each region has three private endpoints (one for each region plus the non-regional endpoint), which makes it possible from EU to go to the US and vice versa through the private endpoint plumbing. If, for some reason, the EU backend cannot talk to the EU Cosmos endpoint, it will take the US path. Of course, there is an impact on latency but the solution keeps working and the application doesn&#8217;t even need to be restarted. In case of a full regional outage (say entire EU is down), Front Door would direct all API calls to the US backend.</p><p>This architecture can resist to both local outages and full regional ones.</p><p>To help you test this built-in resilience using Cosmos, I have developed a sample API along with the Terraform bits that deploy a simplified setup shown in <em>Figure 6</em>. The repo is available here</p><p><a href="https://github.com/stephaneey/azure-and-k8s-architecture/tree/main/availability-samples/cosmos">https://github.com/stephaneey/azure-and-k8s-architecture/tree/main/availability-samples/cosmos</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Sz8k!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Sz8k!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 424w, https://substackcdn.com/image/fetch/$s_!Sz8k!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 848w, https://substackcdn.com/image/fetch/$s_!Sz8k!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 1272w, https://substackcdn.com/image/fetch/$s_!Sz8k!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Sz8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png" width="809" height="631" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:631,&quot;width&quot;:809,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:54428,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Sz8k!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 424w, https://substackcdn.com/image/fetch/$s_!Sz8k!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 848w, https://substackcdn.com/image/fetch/$s_!Sz8k!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 1272w, https://substackcdn.com/image/fetch/$s_!Sz8k!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa47efbe8-f8e7-41b4-83f1-67312c3a49d1_809x631.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 6 &#8211; Simplified setup for testing</em></p><p>Here, I&#8217;m not using private endpoints but this is enough to understand the SDK mechanisms. After you have deployed the solution, you should end up with the following resources:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tgyi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tgyi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 424w, https://substackcdn.com/image/fetch/$s_!tgyi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 848w, https://substackcdn.com/image/fetch/$s_!tgyi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 1272w, https://substackcdn.com/image/fetch/$s_!tgyi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tgyi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png" width="1153" height="447" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:447,&quot;width&quot;:1153,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115739,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tgyi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 424w, https://substackcdn.com/image/fetch/$s_!tgyi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 848w, https://substackcdn.com/image/fetch/$s_!tgyi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 1272w, https://substackcdn.com/image/fetch/$s_!tgyi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff16f0e9c-e02c-417e-a8f1-cacde21181be_1153x447.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 7 &#8211; Resources deployed by the sample application</em></p><p>I made sure the webapp&#8217;s managed identities are granted access to Cosmos and I pre-deployed a database and a container.</p><p>Additionally, each web app indicates its preferred region using environment variables to the Cosmos SDK:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!U34Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!U34Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 424w, https://substackcdn.com/image/fetch/$s_!U34Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 848w, https://substackcdn.com/image/fetch/$s_!U34Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 1272w, https://substackcdn.com/image/fetch/$s_!U34Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!U34Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png" width="1138" height="665" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:665,&quot;width&quot;:1138,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121046,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!U34Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 424w, https://substackcdn.com/image/fetch/$s_!U34Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 848w, https://substackcdn.com/image/fetch/$s_!U34Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 1272w, https://substackcdn.com/image/fetch/$s_!U34Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6777413d-f4ed-475a-a214-d3847e9ca35f_1138x665.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 8 &#8211; Cosmos DB settings defined as environment variables</em></p><p>You can directly test the APIs using Postman or Fiddler, by first performing a POST request (<em>Figure 9</em>), to create a document, followed by a GET request (<em>Figure 10</em>):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Mzm2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Mzm2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 424w, https://substackcdn.com/image/fetch/$s_!Mzm2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 848w, https://substackcdn.com/image/fetch/$s_!Mzm2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 1272w, https://substackcdn.com/image/fetch/$s_!Mzm2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Mzm2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png" width="1172" height="323" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:323,&quot;width&quot;:1172,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:132191,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Mzm2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 424w, https://substackcdn.com/image/fetch/$s_!Mzm2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 848w, https://substackcdn.com/image/fetch/$s_!Mzm2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 1272w, https://substackcdn.com/image/fetch/$s_!Mzm2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a6df947-0e23-4e6e-920f-0b82bd5ce62e_1172x323.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 9 &#8211; Sample POST request to create a document</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3XrB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3XrB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 424w, https://substackcdn.com/image/fetch/$s_!3XrB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 848w, https://substackcdn.com/image/fetch/$s_!3XrB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 1272w, https://substackcdn.com/image/fetch/$s_!3XrB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3XrB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png" width="1153" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/acb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:1153,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:152554,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3XrB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 424w, https://substackcdn.com/image/fetch/$s_!3XrB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 848w, https://substackcdn.com/image/fetch/$s_!3XrB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 1272w, https://substackcdn.com/image/fetch/$s_!3XrB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Facb58f75-f8ad-4ef4-a960-729cda209fc8_1153x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 10 &#8211; Sample GET request to get the latest weather forecast</em></p><p>I developed the API in such a way that it indicates which Cosmos region was used by the backend service to perform the operation.</p><p>Now, you can start playing with Cosmos to see how both APIs react. Here are the following things you can test using the Azure Portal or Azure CLI as you wish:</p><ul><li><p>Marking one of the Cosmos regions read only. In such a case, both APIs (Belgium and France) should automatically go to the remaining writable region, but reads (GET queries) would still pick their regional instance.</p></li><li><p>Deleting one of the Cosmos regions. In such a case, both APIs should automatically go to the remaining region for both reads and writes</p></li><li><p>Take a Cosmos region offline. In such a case, an automatic failover should take place to the remaining region. Note that you must create a support ticket to get it back online. Just try this one after having tried the other changes.</p></li></ul><p>Make sure to run both POST and GET request between each steps and check which Cosmos backend instance is used by the API. You&#8217;ll notice that whatever you do at Cosmos level, the backend is smart enough to keep working.</p><p>All the required instructions are provided in the repo.</p><p>Last but not least, let&#8217;s turn to Azure Storage.</p><h1>Looking at Azure Storage</h1><p>Let&#8217;s look at <strong>Azure Storage</strong>, and more specifically at <strong>Blob Storage, Table Storage, and Queue Storage</strong>, which are widely used across all types of applications. A very common scenario involves <strong>Azure Durable Functions </strong>as well as<strong> stateful Logic Apps</strong>, whose default state store is Azure Storage. Because the orchestration state is persisted in Azure Storage, it is essential to understand what happens to this state in the event of a failover.</p><p>For sake of brevity, I will only show how to handle both the blob and table sub resources but the principles are exactly the same with the queue service.</p><p>Here are the replication capabilities of Azure Storage.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fEJX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fEJX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 424w, https://substackcdn.com/image/fetch/$s_!fEJX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 848w, https://substackcdn.com/image/fetch/$s_!fEJX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 1272w, https://substackcdn.com/image/fetch/$s_!fEJX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fEJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png" width="1066" height="620" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:620,&quot;width&quot;:1066,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:123298,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fEJX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 424w, https://substackcdn.com/image/fetch/$s_!fEJX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 848w, https://substackcdn.com/image/fetch/$s_!fEJX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 1272w, https://substackcdn.com/image/fetch/$s_!fEJX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F266ad2f6-cf15-4e6c-96db-315f137cb976_1066x620.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>All the above options are only available in <strong>paired</strong> regions. Additionally, blobs can also be replicated using the <strong>object replication</strong> feature, but this is by no means comparable to the above options.</p><p>Azure Storage replication is rather easy when dealing with internet facing Storage Accounts and public DNS but it gets a bit more complex when using private link.</p><p>A common misunderstanding is the impact of using a single DNS zone for private link, which would automatically incur additional downtime in case of regional outage and storage failover.</p><p><em>Figure 11</em> illustrates the problem:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Yxdp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Yxdp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 424w, https://substackcdn.com/image/fetch/$s_!Yxdp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 848w, https://substackcdn.com/image/fetch/$s_!Yxdp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 1272w, https://substackcdn.com/image/fetch/$s_!Yxdp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Yxdp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png" width="1075" height="763" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:763,&quot;width&quot;:1075,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67520,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Yxdp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 424w, https://substackcdn.com/image/fetch/$s_!Yxdp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 848w, https://substackcdn.com/image/fetch/$s_!Yxdp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 1272w, https://substackcdn.com/image/fetch/$s_!Yxdp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe02eea20-7d42-4dc7-bd08-b16af8ff585e_1075x763.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 11 &#8211; Shared DNS zones</em></p><p>Our shared DNS zones are attached to both virtual networks. From the primary region, I can have two private endpoints, one targeting the primary in West Europe and the other one targeting the secondary in North Europe. Both private endpoints are located in West Europe.</p><p>Because the FQDN of the Storage Account is <code>mystorage.&lt;service&gt;.core.windows.net</code>, I can only have one record at a time in the DNS zone. I could pre-create the private endpoints in the secondary region but not register them in the zone. In case of Storage Account failover, I would need to update the DNS records and put the IPs of the private endpoints in North Europe. Even doing this wouldn&#8217;t work:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9Ztv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9Ztv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 424w, https://substackcdn.com/image/fetch/$s_!9Ztv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 848w, https://substackcdn.com/image/fetch/$s_!9Ztv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 1272w, https://substackcdn.com/image/fetch/$s_!9Ztv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9Ztv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png" width="1060" height="761" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:761,&quot;width&quot;:1060,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:66093,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9Ztv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 424w, https://substackcdn.com/image/fetch/$s_!9Ztv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 848w, https://substackcdn.com/image/fetch/$s_!9Ztv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 1272w, https://substackcdn.com/image/fetch/$s_!9Ztv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61cc5c44-d121-4bee-b8f1-98dabe8daf86_1060x761.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 12 &#8211; Suboptimal setup using shared DNS zone</em></p><p>With a setup as shown in <em>Figure 12</em>, if I have one blob &#8220;test.txt&#8221; in the &#8220;test&#8221; container, the resulting URIs will be:</p><ul><li><p><a href="https://mystorage.blob.core.windows.net/test/test.txt">https://mystorage.blob.core.windows.net/test/test.txt</a> (primary)</p></li><li><p><a href="https://mystorage-secondary.blob.core.windows.net/test/test.txt">https://mystorage-secondary.blob.core.windows.net/test/test.txt</a> (secondary)</p></li></ul><p>The primary URL will be reachable from the VM located in the West Europe VNET but not from the one located in North Europe since mystorage.blob.core.windows.net resolves to 10.0.0.4, meaning the private endpoint of West Europe, which is out of reach from North Europe (in this setup). Of course, you could peer those VNETs or route traffic through hubs but this is typically not what you&#8217;d want.</p><p>Moreover, after failover, you&#8217;d be in a situation as shown in <em>Figure 13</em>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hOMp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hOMp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 424w, https://substackcdn.com/image/fetch/$s_!hOMp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 848w, https://substackcdn.com/image/fetch/$s_!hOMp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 1272w, https://substackcdn.com/image/fetch/$s_!hOMp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hOMp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png" width="1071" height="774" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:774,&quot;width&quot;:1071,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:72868,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hOMp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 424w, https://substackcdn.com/image/fetch/$s_!hOMp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 848w, https://substackcdn.com/image/fetch/$s_!hOMp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 1272w, https://substackcdn.com/image/fetch/$s_!hOMp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F90da5b93-a38f-4742-a072-6fca46763be2_1071x774.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 13 &#8211; Storage account after failover</em></p><p>The primary (West Europe) is gone. Perhaps the entire region is gone, meaning that 10.0.0.4 is lost, so even though you would have routed traffic initially from North Europe to West Europe, it&#8217;d stop working.</p><p>You&#8217;d be left with 10.100.0.4 still targeting the secondary but after failover, there is no more secondary...The failover process converts the Storage Account into a Locally Redundant Storage (LRS), so the notions of primary and secondary do not exist anymore. The North Europe has just become the new primary, making 10.100.0.4 now pointing to an unreachable target.</p><p>The only way to restore access to <a href="https://mystorage.blob.core.windows.net/test/test.txt">https://mystorage.blob.core.windows.net/test/test.txt</a> from North Europe is to create a new private endpoint and update the DNS zone accordingly. You could pre-create the private endpoint prior to a failover but in any case, updating the DNS zone would be required. This would cause an additional short downtime and requires a scripted plan.</p><p>So, with Storage Accounts, you <strong>must</strong> use separate DNS zones if you don&#8217;t want to perform any intervention.</p><p>That is why, the best setup is the one shown in <em>Figure 14</em>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ir2a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ir2a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 424w, https://substackcdn.com/image/fetch/$s_!ir2a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 848w, https://substackcdn.com/image/fetch/$s_!ir2a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 1272w, https://substackcdn.com/image/fetch/$s_!ir2a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ir2a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png" width="1098" height="740" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:740,&quot;width&quot;:1098,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75403,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ir2a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 424w, https://substackcdn.com/image/fetch/$s_!ir2a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 848w, https://substackcdn.com/image/fetch/$s_!ir2a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 1272w, https://substackcdn.com/image/fetch/$s_!ir2a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25f983d3-87d5-406a-8753-27f2443deb11_1098x740.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 14 &#8211; Best setup with Azure Storage using separate DNS zones</em></p><p>Each region has its own private DNS zone and each holds a set of private endpoints targeting both primary and secondary. Now, both mystorage and mystorage-secondary are resolved and routable from both sides. From North Europe, a call to mystorage would go through 10.100.0.4 and hit the West Europe location.</p><p>After full regional outage, West Europe is lost but 10.100.0.4 is still targeting the primary, which means, the promoted North Europe location, while the secondary endpoint is lost again (this is unavoidable). This setup doesn&#8217;t require any intervention other than performing the failover itself. Needless to mention that your application will encounter exceptions while Azure Storage is failing over, so you need to make sure to correctly handle exceptions.</p><p>Coming back to a more concrete example with Durable Functions, you could have an active/passive setup like this one:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1h-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1h-K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 424w, https://substackcdn.com/image/fetch/$s_!1h-K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 848w, https://substackcdn.com/image/fetch/$s_!1h-K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 1272w, https://substackcdn.com/image/fetch/$s_!1h-K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1h-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png" width="1035" height="748" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:748,&quot;width&quot;:1035,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:82633,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1h-K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 424w, https://substackcdn.com/image/fetch/$s_!1h-K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 848w, https://substackcdn.com/image/fetch/$s_!1h-K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 1272w, https://substackcdn.com/image/fetch/$s_!1h-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c081dd8-cde8-4b28-ab34-2ee3a9e3783f_1035x748.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 15 &#8211; Adding the orchestrator to the mix</em></p><p>Where your orchestrator, hosted on an App Service levering VNET integration is getting access to the Storage Account through 10.0.0.4 to persist state. The North Europe version of the orchestrator could already be deployed but stopped to avoid possible interferences.</p><p>In case of regional outage or DR test, you failover the Storage Account and once the failover completed, you start the orchestrator in North Europe that now points to the new primary. Durable functions make mostly use of Queues and Tables to work and persist state. Once the failover completed, you should be able to resume ongoing orchestrations. However, since the data replication process is asynchronous, you may lose some of them.</p><p>To help you test this scenario, I have crafted a very little Durable Function available here <a href="https://github.com/stephaneey/azure-and-k8s-architecture/tree/main/availability-samples/storage">https://github.com/stephaneey/azure-and-k8s-architecture/tree/main/availability-samples/storage</a> that is just waiting for an external event:</p><pre><code>public static async Task RunOrchestrator(

[OrchestrationTrigger] TaskOrchestrationContext context)

{

ILogger logger = context.CreateReplaySafeLogger(nameof(Function1));

logger.LogInformation(&#8221;Waiting for external event&#8221;);

var eventData=await context.WaitForExternalEvent&lt;DateTime&gt;(&#8221;event&#8221;);

logger.LogInformation(&#8221;external event received {0}&#8221;, eventData.ToString());

}

The orchestration is started by this HTTP triggered function:

public static async Task&lt;HttpResponseData&gt; HttpStart(

[HttpTrigger(AuthorizationLevel.Anonymous, &#8220;get&#8221;, &#8220;post&#8221;)] HttpRequestData req,

[DurableClient] DurableTaskClient client,

FunctionContext executionContext)

{

ILogger logger = executionContext.GetLogger(&#8221;Function1_HttpStart&#8221;);

// Function input comes from the request content.

string instanceId = await client.ScheduleNewOrchestrationInstanceAsync(

nameof(Function1));

logger.LogInformation(&#8221;Started orchestration with ID = &#8216;{instanceId}&#8217;.&#8221;, instanceId);

return await client.CreateCheckStatusResponseAsync(req, instanceId);

}</code></pre><p>The idea is to start a new orchestration by calling the HTTP triggered function:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!83ya!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!83ya!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 424w, https://substackcdn.com/image/fetch/$s_!83ya!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 848w, https://substackcdn.com/image/fetch/$s_!83ya!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 1272w, https://substackcdn.com/image/fetch/$s_!83ya!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!83ya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png" width="1218" height="318" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:318,&quot;width&quot;:1218,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:260818,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!83ya!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 424w, https://substackcdn.com/image/fetch/$s_!83ya!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 848w, https://substackcdn.com/image/fetch/$s_!83ya!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 1272w, https://substackcdn.com/image/fetch/$s_!83ya!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6b702d6-60e9-4cee-8500-8a8bda515def_1218x318.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 16 &#8211; Starting a new orchestration</em></p><p>And get the instance ID of the orchestration for later use.</p><p>After this, you can initiate the failover. Once completed, you should raise the external event and see if the orchestrator is able to resume this orchestration:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WHnz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WHnz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 424w, https://substackcdn.com/image/fetch/$s_!WHnz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 848w, https://substackcdn.com/image/fetch/$s_!WHnz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 1272w, https://substackcdn.com/image/fetch/$s_!WHnz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WHnz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png" width="927" height="285" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:285,&quot;width&quot;:927,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:79220,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WHnz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 424w, https://substackcdn.com/image/fetch/$s_!WHnz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 848w, https://substackcdn.com/image/fetch/$s_!WHnz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 1272w, https://substackcdn.com/image/fetch/$s_!WHnz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5050ebfa-7371-4f00-b52a-fe84c8a4301d_927x285.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 17 &#8211; Raising the external event</em></p><p>If everything works fine. The orchestration status should show as completed:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YZb-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YZb-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 424w, https://substackcdn.com/image/fetch/$s_!YZb-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 848w, https://substackcdn.com/image/fetch/$s_!YZb-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 1272w, https://substackcdn.com/image/fetch/$s_!YZb-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YZb-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png" width="1209" height="520" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:520,&quot;width&quot;:1209,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247252,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/187071430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YZb-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 424w, https://substackcdn.com/image/fetch/$s_!YZb-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 848w, https://substackcdn.com/image/fetch/$s_!YZb-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 1272w, https://substackcdn.com/image/fetch/$s_!YZb-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9dd77568-7438-4aa3-b6c1-9ae032b01b74_1209x520.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><em>Figure 18 &#8211; Checking the orchestration status</em></p><p>You can test this easily locally by making sure to:</p><ul><li><p>Use a GRS/GZRS/RA-GRS/RA-GZRS Storage Account</p></li><li><p>Bind your local solution to the Storage Account by assigning the connection string of your Storage Account to the AzureWebJobsStorage setting in local.settings.json</p></li></ul><p>Of course, in this case, we use public DNS and an Internet facing Function App, which is way simpler than the enterprise-grade design I depicted earlier. This is however enough to experiment with a concrete use case.</p><h1>Let&#8217;s wrap it up!</h1><p>Designing for resilience in Azure is less about individual services and more about underlying foundations such as networking and DNS. Working with single or multiple DNS zones already has an impact on downtime.</p><p>As we have seen, Azure services offer powerful built-in capabilities, but they differ from one service to another and we&#8217;ve only seen three of them. Many other services have yet, a different behaviour.</p><p>A recurring theme across all scenarios is that <strong>infrastructure-level redundancy is not enough</strong>. Applications must be designed to tolerate transient failures, retry intelligently, and adapt to changing backend roles, especially in ACTIVE/ACTIVE configurations.</p><p>Ultimately, resilience is not achieved by flipping a single switch. It is the result of deliberate architectural choices, tested failure paths, and an honest acceptance of trade-offs&#8212;latency versus availability, consistency versus survivability, cost versus operational simplicity.</p><p>If there is one takeaway, it is this: <em>multi-region architectures must be designed for failover from day one</em>. When they are, regional outages become operational events rather than existential crises&#8212;and &#8220;always-on&#8221; stops being an aspiration and starts becoming an outcome.</p>]]></content:encoded></item><item><title><![CDATA[AI That Runs Entirely Offline: How to Build an Offline Enterprise Assistant]]></title><description><![CDATA[By Saurabh Shrivastava]]></description><link>https://packtcloudpro.substack.com/p/ai-that-runs-entirely-offline-how</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/ai-that-runs-entirely-offline-how</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Thu, 06 Nov 2025 10:47:43 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eCNy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week&#8217;s CloudPro Special comes from <a href="https://www.linkedin.com/in/saurabhtechleader/">Saurabh Shrivastava</a>, Global Solutions Architect Leader at AWS and author of the bestselling <a href="https://www.packtpub.com/en-us/product/solutions-architects-handbook-9781835084236">Solutions Architect&#8217;s Handbook</a>. With over two decades in the industry, Saurabh has helped shape how enterprises build and secure cloud systems.</p><p>And in today&#8217;s article, he explores a radical idea: <strong>AI that runs entirely offline</strong>. No APIs, no data leaving your network. Just private, local intelligence built for sensitive environments. Sounds interesting? Read on for the full article.<br><br>If you want to learn directly from him, Saurabh is hosting a live <a href="https://www.eventbrite.com/e/aws-certified-solutions-architect-associate-saa-c03-workshop-tickets-1848798659559?aff=oddtdtcreator&amp;discount=CLOUDPRO">AWS Solutions Architect Associate (SAA-C03) Workshop on January 17</a>. Its a hands-on, fast-paced session that strips the exam down to what really matters. CloudPro readers get an exclusive 40% early-bird discount with the code CLOUDPRO. <a href="https://www.eventbrite.com/e/aws-certified-solutions-architect-associate-saa-c03-workshop-tickets-1848798659559?aff=oddtdtcreator&amp;discount=CLOUDPRO">Reserve your seat.</a></p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bj0w!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bj0w!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!bj0w!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!bj0w!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!bj0w!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bj0w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2809690,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/178161338?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bj0w!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!bj0w!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!bj0w!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!bj0w!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c2cb651-e59c-4c5c-8d25-e60848f30f11_2160x1080.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong><a href="https://www.eventbrite.com/e/aws-certified-solutions-architect-associate-saa-c03-workshop-tickets-1848798659559?aff=oddtdtcreator&amp;discount=CLOUDPRO">Early Bird Offer: Get 40% Off</a></strong></p><p>Use code CLOUDPRO</p><h1>AI That Runs Entirely Offline: How to Build an Offline Enterprise Assistant</h1><h3>By Saurabh Shrivastava</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!eCNy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eCNy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!eCNy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!eCNy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!eCNy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eCNy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png" width="1456" height="728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:728,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3938904,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/178161338?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!eCNy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 424w, https://substackcdn.com/image/fetch/$s_!eCNy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 848w, https://substackcdn.com/image/fetch/$s_!eCNy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 1272w, https://substackcdn.com/image/fetch/$s_!eCNy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec3a0e7e-df45-4f7f-8ba3-cbd4c602e280_2160x1080.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Working in defense, finance, law, or a heavily regulated industry means you can&#8217;t just plug into ChatGPT and call it a day. Cloud-based AI tools aren&#8217;t built for environments where data leakage isn&#8217;t just bad.</p><p>It&#8217;s catastrophic.</p><p>You can&#8217;t send classified intel or proprietary financial models to someone else&#8217;s servers. And if you&#8217;re operating in an air-gapped network? Forget about it.</p><p>That&#8217;s the problem this Offline Enterprise Assistant solves.</p><p>It&#8217;s a local AI setup that runs entirely on your own hardware. No cloud dependencies. No API keys. No data leaving your perimeter. You choose a model: LlamaCpp, Ollama, whatever fits your needs, and run it directly on your machine. Every prompt, every response, every log file stays inside your infrastructure.</p><p>This matters when you&#8217;re reviewing sensitive legal contracts, running R&amp;D analyses, or automating workflows that involve confidential information. You get the productivity boost of modern AI without opening the door to external risk. It&#8217;s built for teams that need full control over their tools and can&#8217;t afford to trust a third party with their data.</p><h1><strong>Why This Architecture Stands Out</strong></h1><ol><li><p><strong>Runs Without Internet</strong>: Operates 100% offline, making it ideal for air-gapped networks or classified infrastructure.</p></li><li><p><strong>Keeps Data on Your Device</strong>: Nothing is sent out, nothing is tracked. You stay in control always.</p></li><li><p><strong>Fast and Responsive</strong>: Local inference means no lag, no rate limits, just amazing performance.</p></li><li><p><strong>Built for Sensitive Workflows</strong>: Legal reviews, research, compliance, internal tooling are all handled securely.</p></li></ol><p>Most teams are realizing that AI doesn&#8217;t always belong in the cloud. When you&#8217;re dealing with internal systems, sensitive data, or strict compliance rules, you need something that stays inside your walls. That&#8217;s where a local-first approach makes sense: it gives you the benefits of AI without the exposure.</p><p>This Offline Enterprise Assistant is built around that idea. It&#8217;s your own assistant, running entirely on your hardware, tuned to your environment, and never sending a single request outside your network. You control how it works, how it&#8217;s updated, and what data it touches.</p><p>Let&#8217;s break down how the architecture fits together.</p><h1><strong>Architecture Explanation</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ff7U!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ff7U!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ff7U!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ff7U!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ff7U!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ff7U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg" width="645" height="373" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:373,&quot;width&quot;:645,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Ff7U!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Ff7U!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Ff7U!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Ff7U!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73cb7d03-ebe4-4639-8ae1-0575226e9f5c_645x373.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The offline MCP Client architecture is designed to deliver end&#8209;to&#8209;end private and local AI capability, without any reliance on cloud APIs or outbound network traffic. Here&#8217;s how it works:</p><ol><li><p><strong>Developer</strong>: Prepares prompts or workflows using a local development environment (such as a secure IDE or terminal). All interactions originate and remain on the local device.</p></li><li><p><strong>MCP Client</strong>: Acts as the interface between the developer&#8217;s inputs and the AI model. It routes prompts to the embedded LLM, orchestrates the workflow, and handles results.</p></li><li><p><strong>Offline LLMs (LlamaCpp / Ollama)</strong>: Powerful large language models are loaded and executed directly on the local hardware. No external API calls; all model inference and response generation happen on the device, fully offline.</p></li><li><p><strong>Local SQLite Database</strong>: Stores chat logs, prompts, and results securely and privately. Provides an audit trail and the ability to revisit past interactions, entirely within the local infrastructure.</p></li><li><p><strong>Secure UI/API</strong>: Presents results to the developer via a local web interface or terminal UI. Enables further integration with internal systems while ensuring data never leaves the trusted environment.</p></li></ol><p>Think about it. You don&#8217;t want your data, your prompts, or your workflows slipping out into the cloud. With this architecture, nothing leaves your machine.</p><p>Zero external exposure. No tokens. No API keys. No hidden traffic.</p><p>If you&#8217;re in a regulated industry, whether it&#8217;s defense, legal, healthcare, or any air-gapped environment, this setup checks every box. It keeps you compliant, private, and secure while still giving you the power of modern AI. And here&#8217;s the best part: it&#8217;s extensible by design.</p><p>Want to add another LLM? Done.</p><p>Need to customize workflows? Easy.</p><p>Ready to experiment with agentic AI? Go ahead. You can build without ever breaking the privacy barrier.</p><p>Most importantly, this isn&#8217;t a short-term solution. It&#8217;s future-proof. As on-device AI models become larger and smarter, this architecture will scale with you, handling more automation, more intelligence, and more complexity.</p><p>Now it&#8217;s time to get our hands dirty and implement it.</p><h1><strong>Implementation</strong></h1><p>Using LM Studio, Streamlit, and Python, you&#8217;ll set up and run local open-source models directly on your machine. Unlike online AI assistants like ChatGPT or Google Bard, which constantly need internet connectivity and send data back to external servers, this approach runs completely offline.</p><p>Along the way, you&#8217;ll gain hands-on experience with the full cycle: you&#8217;ll understand how local LLMs really work, set up all the required software and dependencies, download and run an open-source model in LM Studio, and then build a simple yet powerful chat interface using Streamlit. From there, you&#8217;ll integrate your local LLM into the Streamlit app and learn how to store and review chat history using a local database securely. By the end, you&#8217;ll have a</p><p>Before you dive into building your offline Enterprise Assistant, it&#8217;s important to get familiar with a few key concepts.</p><p>At the heart of this setup is the Offline Assistant itself: an AI system that runs entirely on your computer, performing all language model inference locally without ever needing an internet connection.</p><p>Powering this is an LLM (Large Language Model), a type of AI trained on massive datasets to generate human-like text responses.</p><p>To make it simple to use, you&#8217;ll rely on LM Studio, a desktop app that lets you download, run, and serve open-source LLMs on your machine, exposing them through a local API.</p><p>For the interface, you&#8217;ll use Streamlit, a Python framework that makes it easy to build interactive web apps and quickly prototype AI-driven tools.</p><p>And finally, for securely managing chat history, you&#8217;ll work with SQLite, a lightweight local database that keeps all your interactions private and fully stored on your device.</p><p>By the end of this hands-on exercise, you&#8217;ll have your own local Enterprise Assistant running directly in your browser&#8212;powered by an open-source LLM that operates fully offline through LM Studio. You&#8217;ll interact with it using a simple but effective interface built with Streamlit, making your assistant practical and easy to use.</p><p>Most importantly, every conversation will be securely stored as local chat logs in your system, never sent to the cloud, never exposed. By the time you&#8217;re done, you&#8217;ll walk away with a private, offline AI assistant that runs fast and stays entirely under your control.</p><h1><strong>Demo Video and Repo</strong></h1><p><strong><a href="https://vimeo.com/1132943670">Demo Video</a></strong></p><p><strong><a href="https://drive.google.com/drive/folders/1txOCAVrA1bX8rOjMnm91eWfcIlUCXvHb?usp=share_link">Lab guide</a></strong></p><h1><strong>Conclusion</strong></h1><p>Congratulations! You&#8217;ve just built your very own offline Enterprise Assistant, powered entirely by open-source tools and running fully on your machine. Along the way, you learned how to set up LM Studio to run an LLM locally, how to create a lightweight but effective interface with Streamlit, and how to store all your conversations securely using SQLite. Most importantly, you now understand how to put privacy first, keeping every prompt, response, and workflow under your complete control, with no reliance on external servers or cloud APIs.</p><p>This hands-on exercise gave you more than just a working prototype. You gained insight into how local LLMs work, how to integrate them into real-world applications, and how to design AI tools that balance functionality with security. You&#8217;ve also seen the bigger picture: how on-device AI can reshape the way enterprises approach sensitive tasks, from R&amp;D to legal reviews to compliance-heavy workflows.</p><p>But this is only the beginning. You can now extend your Enterprise Assistant with advanced features:</p><ol><li><p>Add a smarter UI with more interactive elements.</p></li><li><p>Try out different open-source models to experiment with speed, accuracy, and capabilities.</p></li><li><p>Layer in analytics and insights to track and optimize your usage.</p></li><li><p>Even push towards agentic AI, giving your assistant the ability to automate tasks and workflows while still running securely offline.</p></li></ol><p>With what you&#8217;ve built, you&#8217;ve proven that you can harness the power of Generative AI <strong>without compromise</strong>: no data leaks, no internet dependency, no loss of control.</p><p>Your private AI journey starts here.</p><p>- Saurabh</p>]]></content:encoded></item><item><title><![CDATA[How MCP Turns Your IDP into an Actual Teammate]]></title><description><![CDATA[Tired of TicketOps? Here&#8217;s how to break free.]]></description><link>https://packtcloudpro.substack.com/p/how-mcp-turns-your-idp-into-an-actual</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/how-mcp-turns-your-idp-into-an-actual</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Tue, 14 Oct 2025 14:45:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!naY_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Your runbooks live in wikis. Your SLOs live in monitoring dashboards. Your approval workflows live in ticketing systems. And you, the developer who actually needs to ship things, you&#8217;re stuck stitching all of this together manually, one step at a time.</p><p>This is where most cloud teams still operate. And it&#8217;s exhausting.</p><p>I realized this after our AI-Powered Platform Engineering workshop last week.</p><p>If you were there, you know it was packed. We had <strong>George Hantzaras</strong> (Director of Engineering, MongoDB) and <strong>Ajay Chankramath</strong> (Founder, Platformetrics)<strong> </strong>up there walking through how AI, golden paths, and internal developer platforms are completely reshaping the way modern teams ship software. The energy in the session was incredible. And the conversations didn&#8217;t stop when the session ended.</p><p>But here&#8217;s the thing that stuck with me the most:</p><p><strong>MCP (Model Context Protocol) turns your platform into something an AI can actually </strong><em><strong>do things with</strong></em><strong>, not just talk about.</strong></p><p>This is the difference between TicketOps and brittle runbooks versus workflows like provisioning, rolling back, and scaling that become assistant-triggered actions with guardrails and full visibility into what&#8217;s happening. Your AI goes from being a really smart search engine to being an actual teammate.</p><p>That&#8217;s the jump I think a lot of us have been waiting for.</p><p>So in this issue, I&#8217;m going to dig into what that actually looks like, and give you a practical starter pack you can adapt to your own stack. Because if you&#8217;ve been wondering how to move from AI as &#8220;a chat window&#8221; to AI as &#8220;a teammate who actually does the work,&#8221; this is a good place to start.</p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><div><hr></div><h1>The Problem We&#8217;re All Facing</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CfCZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CfCZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!CfCZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!CfCZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!CfCZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CfCZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1627111,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/176145328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!CfCZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!CfCZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!CfCZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!CfCZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1916a79-472e-420a-b26e-1930e5888e34_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Let me paint a picture of how most cloud teams still operate today. You write a ticket. You wait for approvals. You hunt through runbooks to find the right commands to copy-paste. You watch CI/CD spin up. You cross your fingers that the safety nets catch anything that could go wrong.</p><p>Documentation and internal portals help you <em>find</em> things, sure. But they rarely <em>do</em> things. That gap, between knowing what to do and actually doing it, creates this constant context switching, slow feedback loops, and inconsistent safety guardrails.</p><p>The result is messy. Really messy. Brittle handoffs. Workflows duplicated across teams. And what should be &#8220;golden paths&#8221; that empower teams end up becoming &#8220;golden cages&#8221; that block velocity instead of enabling it.</p><p>Here&#8217;s what I think is the real core issue: we&#8217;ve separated knowledge from action. Your runbooks live in wikis. Your SLOs live in monitoring dashboards. Your approval workflows live in ticketing systems. And your developers, the people who actually need to ship things, they&#8217;re stuck stitching all of this together manually, one step at a time.</p><p>This friction doesn&#8217;t just slow shipping down. It creates <em>inconsistency</em>. One team deploys with proper approvals; another skips them. One team checks SLO impact before scaling; another scales blind. You end up with fragmented practices across your org, and nobody likes that.</p><p>We need a different model. Instead of &#8220;read the docs, then run the steps,&#8221; we should be asking our systems: &#8220;propose a plan, then execute it with guardrails.&#8221;</p><h1>Here&#8217;s What Changed:</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!naY_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!naY_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!naY_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!naY_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!naY_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!naY_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1612077,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/176145328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!naY_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!naY_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!naY_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!naY_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8de3425c-8e62-4541-9bee-a87d99fb9f62_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The solution rests on two foundational ideas working together, and honestly, the way they complement each other is elegant.</p><p><strong>First: golden paths.</strong> These reduce decision fatigue without sacrificing flexibility. Think of a golden path as an end-to-end workflow with sensible defaults, something like: stateless service &#8594; preview environment &#8594; automated checks &#8594; production. These paths capture your team&#8217;s collective knowledge about how to do things safely. But they&#8217;re not straightjackets. You build in escape hatches for the 20% of cases that don&#8217;t fit the mold. Golden paths let you standardize without fossilizing your processes, and they&#8217;re the antidote to &#8220;TicketOps.&#8221;</p><p><strong>Second: the Model Context Protocol (MCP).</strong> This is the glue that makes it all work. MCP is a standard that exposes your golden paths as tools that an AI assistant can actually call. Think of it as an adapter layer between your assistant and your platform. The assistant can observe your systems: what services exist, what their SLOs are, what incidents are open right now. It can propose a plan (&#8220;I&#8217;ll deploy this to preview, run tests, then promote to prod&#8221;). And it can execute approved actions while logging everything for audit and observability. MCP turns your platform into a set of composable, auditable operations.</p><p>Here&#8217;s what this looks like in the real world. An engineer types: &#8220;Spin up a preview environment and load our staging data.&#8221;</p><p>The assistant gathers context. What&#8217;s the service&#8217;s dependency tree? What are the current SLO baselines? Who owns this service? What recent incidents or postmortems should I know about? It drafts a plan that respects your runbooks and standards. It shows you the diffs and policy checks that apply. Then it either executes immediately (low-risk actions) or routes to the right approver (medium/high-risk actions). Everything gets logged.</p><p>This isn&#8217;t theoretical anymore. It works.</p><h1>How You Actually Build This</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rVa3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rVa3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!rVa3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!rVa3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!rVa3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rVa3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1710712,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/176145328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rVa3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!rVa3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!rVa3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!rVa3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3cdd2d51-3962-4cd5-af4b-a647ef6942c7_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The architecture starts simple: pick one golden path. One high-value workflow, like service deployment, that you want to standardize.</p><p>Next, you build MCP servers that act as adapters to your existing systems. Your runtime layer exposes Kubernetes operations (deploy, scale, health checks) and feature flags as callable tools. Your delivery layer connects to Git, GitHub Actions, or GitLab CI to handle builds, promotions, and canary deployments. Your reliability layer taps into SLO systems, alerting platforms, and observability tools so the assistant can query metrics, create SLOs, and mute alerts with proper context. Your change control layer enforces approvals and integrates with compliance workflows.</p><p>Underneath all of this runs retrieval-augmented generation (RAG). Before the assistant proposes any action, it indexes and searches your runbooks, compliance standards, postmortems, and architectural guidelines. The plan that comes back doesn&#8217;t just say &#8220;deploy the service&#8221;, it references your procedures. &#8220;Deploy using our standard blue-green pattern [link to runbook]. SLO impact: +2% latency at p99 (within budget). Dependencies: notify the data team [link to postmortem]. Policy check: OK, proceed.&#8221;</p><p>Safety gets enforced as policy-as-code, not friction. You define risk tiers: low-risk actions (like querying logs) auto-execute. Medium-risk actions (like scaling a service) require human approval. High-risk actions (like deleting a database) are blocked unless routed through a formal approval path. Standards violations get auto-fixed when confidence is high, or escalated when not. Everything is logged.</p><p>The user experience ties it all together. An engineer uses chat or a slash command to describe what they need. The assistant gathers context from your systems and knowledge base, drafts a plan with full diffs and impact estimates, shows what policy checks apply, and executes: staying in the loop for decisions that matter (approvals, tradeoffs) but handling the rote work. Everything that happened gets logged: the initial request, the plan, who approved it, what actually ran, what the outcome was.</p><h1>The Real Payoff</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!u1OS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u1OS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!u1OS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!u1OS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!u1OS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u1OS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1740308,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/176145328?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!u1OS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!u1OS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!u1OS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!u1OS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97754e5a-c44e-4edf-a006-193e3ecf38ab_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Over time, this architecture unifies your platform. Your internal developer platform (IDP) becomes more than a portal where people click and read documentation. It becomes an <em>actor</em> that moves with your engineers, understanding context, respecting guardrails, and turning workflows into outcomes.</p><p>You measure it differently too. Not by pageviews to your portal, but by lead time to production. By mean time to recovery when things break. By consistency of safety across teams. You tie actions to business impact: AI-assisted scaling and predictive capacity planning can deliver up to <strong>25% cost optimization</strong> while keeping SLOs intact.</p><p>The shift from ticket-based workflows to action-based workflows with AI assistance and policy-driven safety doesn&#8217;t happen overnight. Start with one golden path. Build the MCP adapters for one system at a time. Add guardrails incrementally. But the direction is clear.</p><p>Push intelligence and safety down into your platform so that doing the right thing becomes the easy thing. And the hard work, decision-making, tradeoff analysis, exception handling, stays where it belongs: with your engineers.</p><p>That&#8217;s where we&#8217;re headed. And honestly? I think it&#8217;s going to change how we all work.</p>]]></content:encoded></item><item><title><![CDATA[Batch Scoring on Azure ML]]></title><description><![CDATA[5 Knobs That Save You from Nightly Headaches]]></description><link>https://packtcloudpro.substack.com/p/batch-scoring-on-azure-ml</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/batch-scoring-on-azure-ml</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 08 Sep 2025 15:13:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hHXs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi,</p><p>Today&#8217;s CloudPro is about the five batch-scoring knobs most engineers overlook. If you&#8217;ve ever watched a job stretch from minutes to hours and wondered why, this is where you start.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p>This article is adapted from <strong>Chapter 5 of </strong><em><strong>Hands-On MLOps on Azure</strong></em>. In that chapter, author Banibrata De dives into the gritty details of model deployment: batch scoring, real-time services, and the YAML settings that make the difference between smooth pipelines and midnight firefights.</p><p>(<em>The book goes much further, covering CI/CD pipelines, monitoring, governance, and even LLMOps across Azure, AWS, and GCP. CloudPro readers can grab it at the end of this piece with an exclusive discount.</em>)</p><p>Cheers,</p><p>Shreyans Singh</p><p>Editor in Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.packtpub.com/en-us/product/hands-on-mlops-on-azure-9781836200338&quot;,&quot;text&quot;:&quot;Get The Book&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.packtpub.com/en-us/product/hands-on-mlops-on-azure-9781836200338"><span>Get The Book</span></a></p><div><hr></div><h1>Tuning Batch Jobs on Azure ML: 5 Knobs Every Engineer Should Know</h1><p>It&#8217;s late. The batch run you trusted starts crawling. Dashboards spike, Slack pings light up, and you&#8217;re debating whether to kill the job or ride it out. You don&#8217;t need a re-platform. You need to tune the controls Azure ML already gives you.</p><p>Below are the <strong>five knobs</strong> that tame throughput, flakiness, and costs. They live in your batch deployment YAML, and they work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hHXs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hHXs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hHXs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hHXs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hHXs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hHXs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1997518,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/173075894?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hHXs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hHXs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hHXs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hHXs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe6ac97c-8476-46aa-8dad-09e46470726f_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>1) mini_batch_size: The throttle for your workload</h3><p>Batch jobs in Azure ML process data in chunks. <code>mini_batch_size</code> controls how big each chunk is. Push it too high, and you&#8217;ll hit memory or I/O bottlenecks; keep it too low, and you&#8217;ll waste time on overhead. Think of it like loading a truck: too few boxes and you&#8217;re underutilizing space, too many and you risk breaking the axle. Getting this balance right often cuts hours off long-running jobs.</p><div><hr></div><h3>2) <code>max_concurrency_per_instance</code>: How many cooks in the kitchen</h3><p>Each compute node can process tasks in parallel, but how many at once depends on its resources. <code>max_concurrency_per_instance</code> is that dial. If you pack too much onto a single node, CPU and memory will thrash, and everything slows down. Start low, then gradually raise it while watching system metrics. The goal is steady throughput, not chaos.</p><div><hr></div><h3>3) <code>instance_count</code>: Scale out, don&#8217;t just scale up</h3><p>Even with tuned concurrency, sometimes one node just isn&#8217;t enough. That&#8217;s where <code>instance_count</code> comes in. It decides how many nodes you&#8217;ll spread the workload across. It&#8217;s the knob you turn when you need predictable completion times. For example, making sure the nightly run finishes before business hours. More nodes mean more cost, but also fewer late-night surprises.</p><div><hr></div><h3>4) <code>retry_settings</code>: Resilience for the real world</h3><p>In batch jobs, things fail: a network hiccup, a corrupted file, a transient storage timeout. Without retries, the whole job can collapse because of one small blip. <code>retry_settings</code> lets you say, &#8220;Try again a few times before giving up.&#8221; Set sensible timeouts and retries per mini-batch so small failures don&#8217;t derail the entire pipeline.</p><div><hr></div><h3>5) <code>error_threshold</code>: Fail smart, not early</h3><p>What happens if some data records are bad? By default, too many errors can abort the run. With <code>error_threshold</code>, you control how many you&#8217;ll tolerate. Setting it to <code>-1</code> tells Azure ML to ignore errors completely. For messy real-world datasets, this is a lifesaver: you can still ship 99% of results and deal with the outliers later, instead of losing the entire batch.</p><div><hr></div><h2>Extra sanity checks</h2><ul><li><p><strong>Respect the contract:</strong> Batch jobs are built for <em>files/blobs in, files/blobs out</em>. Don&#8217;t try to wrap them around per-record HTTP calls.</p></li><li><p><strong>Keep scripts separate:</strong> Use <code>batch_score.py</code> for batch and <code>online_score.py</code> for real-time. Different handlers, different expectations.</p></li><li><p><strong>Watch metrics that matter:</strong> Throughput, per-batch latency, error rate, and CPU/GPU/memory use. Wire alerts so you&#8217;re not caught off-guard at 2 a.m.</p></li></ul><div><hr></div><h2>Takeaway</h2><p>Batch scoring doesn&#8217;t have to be a black box. Azure ML gives you the levers. You just have to use them. Tune these five settings, keep batch and online flows separate, and you&#8217;ll get faster, more reliable runs without babysitting every night.</p><div><hr></div><p>This walkthrough is pulled straight from Chapter 5 of <em>Hands-On MLOps on Azure</em>. The full book expands on everything here: deployments, monitoring, alerting, governance, pipelines, and operationalizing large language models responsibly.</p><p>For the next <strong>48 hours</strong>, CloudPro readers get <strong>35% off the ebook</strong> and <strong>20% off print</strong>. If Azure ML is part of your stack, or about to be, this is the reference worth keeping open on your desk.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.packtpub.com/en-us/product/hands-on-mlops-on-azure-9781836200338&quot;,&quot;text&quot;:&quot;Get The Book&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.packtpub.com/en-us/product/hands-on-mlops-on-azure-9781836200338"><span>Get The Book</span></a></p>]]></content:encoded></item><item><title><![CDATA[AI Won’t Run Your Network, Yet]]></title><description><![CDATA[By Daren Fulwell]]></description><link>https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 01 Sep 2025 15:43:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XqZL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hi everyone, </p><p>Today&#8217;s CloudPro is written by <a href="https://www.linkedin.com/in/daren-fulwell/">Daren Fulwell</a>, Field CTO at IP Fabric. Daren has over 25 years of experience in networking, and he is well-known for his work mentoring engineers, and helping organizations bridge the gap between design fundamentals and modern automation.</p><p>In today&#8217;s CloudPro, he explores why AI on its own won&#8217;t deliver true network autonomy. Instead, Daren shows how the real path forward lies in combining automation, AI agents, and a network digital twin, so teams can move beyond hype and build networks that are transparent, predictable, and genuinely autonomous.</p><p>And if you&#8217;re looking to put these ideas into practice, we&#8217;ve just released the <a href="https://www.packtpub.com/en-us/product/network-automation-cookbook-9781835887998">Network Automation Cookbook, Second Edition</a>. Packed with over 100 hands-on recipes, it shows you how to automate network devices and cloud platforms using Ansible, AWX, Nautobot, and Terraform. It&#8217;s 30% off exclusively for CloudPro readers, for the next 72 hrs. Grab your copy and start building real-world automation workflows today.</p><p>Cheers,</p><p>Shreyans Singh</p><p>Editor in Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><h1>AI alone won&#8217;t deliver the autonomous network</h1><h4>By Daren Fulwell</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XqZL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XqZL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!XqZL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!XqZL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!XqZL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XqZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2058830,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/172465753?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XqZL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!XqZL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!XqZL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!XqZL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7e87685-a3e9-4551-8a99-48f98ba3a080_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In the network engineering community right now - as in most areas of IT - you can't escape the AI hype. We've been working to understand how network automation will change the way we operate our infrastructure, and agentic AI is being proposed as the missing piece of the puzzle. Folks in the know have been experimenting and making their results available in blog posts and Youtube videos for the rest of the world to salivate over. Finally, it looks like we have taken the right turn towards the self-driving network. </p><p>Or have we? Are a handful of small-scale experiments with limited scope and even more limited capability proving anything? At best, there is a lot more investigation required, at worst the experiments that we don't see are proving that AI is not to be trusted with our critical infrastructure yet.</p><p>Networks aren't just collections of individual devices that we configure and then they do what we tell them: they are interconnected, propagating their world view to their immediate neighbors and beyond, to create a "hive mind" behavior for the whole system. And in most cases, our networks are actually networks of networks - interconnected and sharing state information to extend that collective view from user to workload. </p><p>In traditional network operations, this meant having multiple teams - with their own documentation and subject matter experts in the technologies and platforms - who all needed to interface to provide end-to-end service. Maintenance of the infrastructure required deep collaboration between teams and across silos. A thorough understanding of the networking technologies needed to be applied to tooling and documentation to ensure change impacts were tracked and understood.</p><p>In the agentic AI world, this is taken to the next level. The work is divided up for agents to be given small, carefully-defined scopes to work within, making specific types of change or reporting on specific behaviors. But due to the distributed, interconnected nature of networking, none of those agents can work independently of the others: the effects caused by one will potentially be felt by them all. Without true collaboration between the agents, it becomes impossible for us to trust that they will give us the desired outcomes without humans (with an understanding of the infrastructure) manually checking everything they do.</p><p>In short, AI agents cannot operate the network autonomously without some collective understanding of the end-to-end network.</p><p>The Sources of Truth that we have been building for our network automation processes seem to fulfil at least elements of this need. But they alone are not enough as they really represent the desired state of the network, not its current operating state.</p><p>Consider these four key requirements for that source of knowledge:</p><ol><li><p>We need a view of the end-to-end network in the form of structured data, with a well-documented schema, and able to be accessed over clearly defined APIs or protocols to provide a consistent end-to-end view to all agents</p></li><li><p>It must be a complete and up to date view of the network as it is operating. There is little point in having a clear view of part of the infrastructure then little or no understanding of other parts when one can so heavily impact the operation of the other.</p></li><li><p>Relationships and collective behavior are key to understanding how the network behaves: maintaining a list of devices (that may or may not be complete) and some data points about those devices may be useful but does not give the full picture</p></li><li><p>Network behavior is on the whole deterministic: a set of devices with specific state and connectivity should always behave the same way. So the data model must be based on facts collected from the network devices themselves, analysed and modelled as behavior - rather than being formed from conjecture, opinion or correlation of related events (the best you can expect from that is a general indication of direction)</p></li></ol><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p>A true Network Digital Twin has all of these characteristics:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3Em2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3Em2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3Em2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3Em2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3Em2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3Em2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1977197,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/172465753?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3Em2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!3Em2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!3Em2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!3Em2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6adfeb7d-9943-4120-b93b-c71af877659f_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A Network Source of Truth system has some of these, but misses the key aspect of understanding network behavior end-to- end. For example, consider:</p><ol><li><p>A change is required to enable Internet users gain access to an application hosted in a private DC. The external firewall is updated with NAT rules and policy changes to provide access; DNS changes are made; and routing is checked from the DC to ensure that traffic can be forwarded from user to frontend and back. But it still fails when the changes are pushed, because the security policy applied in the DC fabric only allows testing from internal hosts. The coordinated effort across multiple domains (read AI agents) has failed due to an incomplete view of the service dependencies;</p></li><li><p>A DR exercise is under way, causing applications to be switched from one location to another. Load balancing rules are being changed to facilitate that and the virtual IP successfully moves traffic flows to the new location. Two of the four servers in the load balancing pool are working fine, so the pool is up and being serviced, but not at full capacity. While the remaining servers are up and the correct services are running, routing from the load balancer to those servers is not correct: using the Digital Twin this end-to-end behavior can be diagnosed in advance and remediation carried out to fix this before live traffic is diverted through this path.</p></li></ol><p>AI is going to change the way we operate networks. But in order to deliver its true potential, it needs not only to be able to deliver automated process, but to be fed real understanding of the networks it will operate in order to validate that it is doing what it needs to.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OtP9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OtP9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OtP9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OtP9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OtP9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OtP9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2093933,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/172465753?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OtP9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!OtP9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!OtP9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!OtP9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87874a44-4f7a-4674-8193-8fdebc2f9e78_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/ai-wont-run-your-network-yet?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><div><hr></div><p>If today&#8217;s article got you thinking about how to move from <em>talking about automation</em> to actually building it, you&#8217;ll want to check out our brand new release: <a href="https://www.packtpub.com/en-us/product/network-automation-cookbook-9781835887998">Network Automation Cookbook, Second Edition.</a></p><p>This updated edition is packed with over 100 hands-on recipes showing how to use Ansible, AWX, Nautobot, and Terraform to automate both on-prem and cloud networks. It&#8217;s written for engineers who want practical workflows, not just theory, and every recipe comes with reproducible labs so you can practice safely.</p><p>As a CloudPro reader, you can grab it at <strong>30% off</strong> for the next 72 hours.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.packtpub.com/en-us/product/network-automation-cookbook-9781835887998&quot;,&quot;text&quot;:&quot;Get The Book&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.packtpub.com/en-us/product/network-automation-cookbook-9781835887998"><span>Get The Book</span></a></p><p>Thanks for reading CloudPro!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[Why LXD beats VMs and Docker for Ubuntu dev]]></title><description><![CDATA[By Ken VanDine]]></description><link>https://packtcloudpro.substack.com/p/why-lxd-beats-vms-and-docker-for</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/why-lxd-beats-vms-and-docker-for</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 25 Aug 2025 20:29:01 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!AYt3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today&#8217;s CloudPro is written by Ken VanDine, who has nearly 30 years of experience building Linux distributions and over 15 years at Canonical working on Ubuntu. Ken is also the author our newly released title, <a href="https://www.packtpub.com/en-us/product/the-ultimate-ubuntu-handbook-9781835468876">The Ultimate Ubuntu Handbook</a>.</p><p>In today's CloudPro, he looks at how developers can use LXD containers on Ubuntu to keep their setups clean, spin up secure environments quickly, and avoid the headaches of traditional VMs.</p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/why-lxd-beats-vms-and-docker-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/why-lxd-beats-vms-and-docker-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><p>Have you ever broken your Ubuntu setup by installing conflicting packages, or wasted an entire afternoon waiting for a virtual machine to boot just to test one library? These little frustrations are all too common for developers. Containers on Ubuntu offer a cleaner way forward, and with LXD, you can build fast, secure, and reproducible environments that don&#8217;t weigh down your system.</p><h1><strong>Streamlining and Securing Development with Containers on Ubuntu</strong></h1><p>Developers often add tools and services directly onto their Linux desktops because it feels quick and convenient. The problem is that every new service increases your system&#8217;s attack surface, especially if something opens a network port in the background. A safer, more efficient approach is to run your development environments in containers. You spin them up only when you need them, and they stay isolated from your daily workflow.</p><p>In this article, we&#8217;ll discuss LXD, the Linux Container Daemon, due to its outstanding integration with Ubuntu. Conceptually, this would apply to other container technologies as well, but the usage would vary.</p><p>LXD stands out as a powerful solution for developers using Ubuntu, providing a lightweight and flexible approach to containerization, offering a compelling alternative to traditional virtual machines and other container technologies.</p><h1><strong>Why LXD instead of Docker or VMs?</strong></h1><p>If you&#8217;ve worked with Docker or virtual machines, you may wonder why LXD matters. Here&#8217;s a quick comparison to put it into perspective:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wyqr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wyqr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 424w, https://substackcdn.com/image/fetch/$s_!Wyqr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 848w, https://substackcdn.com/image/fetch/$s_!Wyqr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 1272w, https://substackcdn.com/image/fetch/$s_!Wyqr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wyqr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png" width="1330" height="496" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63c0377b-282e-46a3-af19-6af745324159_1330x496.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:496,&quot;width&quot;:1330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Wyqr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 424w, https://substackcdn.com/image/fetch/$s_!Wyqr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 848w, https://substackcdn.com/image/fetch/$s_!Wyqr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 1272w, https://substackcdn.com/image/fetch/$s_!Wyqr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63c0377b-282e-46a3-af19-6af745324159_1330x496.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That last row is the key: LXD gives you a lightweight &#8220;virtual machine&#8211;like&#8221; environment, without the VM bloat.</p><h1><strong>Why Choose LXD for Development?</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AYt3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AYt3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!AYt3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!AYt3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!AYt3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AYt3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Title banner&quot;,&quot;title&quot;:&quot;Title banner&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Title banner" title="Title banner" srcset="https://substackcdn.com/image/fetch/$s_!AYt3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!AYt3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!AYt3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!AYt3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fed13478d-0e62-47f9-ba1b-886d932a9457_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>LXD containers are specifically designed to meet the needs of developers, offering a unique set of benefits:</p><ol><li><p><strong>Lightweight and Efficient:</strong> Unlike resource-intensive VMs that require full OS installations, LXD containers share the host kernel. This minimizes overhead, leading to significantly faster boot times, a reduced memory footprint, and improved overall performance. This efficiency is crucial for rapid iteration and testing across various environments without performance penalties.</p></li><li><p><strong>Image-Based Management:</strong> LXD's reliance on images for container creation transforms environment management. It enables effortless sharing, versioning, and reproducibility of development environments, ensuring consistency across different machines and simplifying collaboration. This approach streamlines workflows, allowing developers to spin up new environments with specific configurations and dependencies quickly.</p></li><li><p><strong>Security Fortified:</strong> LXD provides robust isolation through kernel namespaces and advanced security features, safeguarding the host system and other containers from potential vulnerabilities. This secure environment allows developers to focus on their code with peace of mind.</p></li><li><p><strong>Scalability and Flexibility:</strong> LXD excels in scalability, allowing developers to easily create multiple isolated environments for different projects, branches, or feature implementations. This fosters a highly organized and efficient development process, enabling rapid switching between environments without impacting other projects.</p></li><li><p><strong>Seamless Ubuntu Integration:</strong> LXD's tight integration with Ubuntu leverages the operating system's robust package management system and offers access to a vast repository of pre-built images and tools. This streamlines development and ensures compatibility with a wide range of software and libraries.</p></li></ol><p><strong>Quick use case</strong>:</p><p>Let&#8217;s say you want to try out PostgreSQL 17 without risking your workstation setup. Launch an LXD container, install PostgreSQL inside it, test it safely, and if things break, just roll back to a snapshot. Your main system stays untouched.</p><h1><strong>Getting Started with LXD on Ubuntu</strong></h1><p>Installing and configuring LXD on Ubuntu is straightforward, as it's available directly from the Snap Store.</p><pre><code>ken@monster:~$ sudo snap install lxd
ken@monster:~$ sudo usermod -aG lxd "$USER"
ken@monster:~$ newgrp lxd
ken@monster:~$ lxd init --auto</code></pre><p>The <code>lxd init --auto</code> command initializes LXD with recommended settings. For more control, omit <code>--auto</code> to go through an interactive configuration process, allowing you to choose storage backends (like ZFS for advanced features or LVM for flexibility), configure network settings (bridge interfaces or NAT), and set up image remotes to access pre-built images.</p><h1><strong>Essential LXD Container Management Commands</strong></h1><p>LXD provides a comprehensive command-line interface (CLI) for managing containers:</p><ol><li><p><code>lxc launch &lt;image&gt; &lt;name&gt;</code><em>: </em>Creates and starts a new container from an image.</p></li><li><p><code>lxc list</code><em>: </em>Displays a list of all running containers.</p></li><li><p><code>lxc start/stop/restart &lt;name&gt;</code><em>: </em>Manages container lifecycle.</p></li><li><p><code>lxc exec &lt;name&gt; -- &lt;command&gt;</code><em>:</em> Executes commands within a running container.</p></li><li><p><code>lxc file push/pull &lt;local_path&gt; &lt;remote_path&gt;</code><em>:</em> Transfers files between the host and a container.</p></li></ol><p>For development, it's often more convenient and secure to run as an ordinary user with your home directory mapped into the container:</p><pre><code>ken@monster:~$ lxc launch ubuntu:25.04 plucky-devel -c raw.idmap="both $UID 1000"

ken@monster:~$ lxc config device add plucky-devel homedir disk source=$HOME path=/home/ubuntu

ken@monster:~$ lxc exec plucky-devel -- su -l ubuntu</code></pre><p>This configuration launches a container, maps your user ID, mounts your home directory, and provides a login shell as the ubuntu user inside the container, allowing you to use your favorite editor on your host system while executing code within the isolated container.</p><h1><strong>Unlocking Advanced Features</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lOgi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lOgi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!lOgi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!lOgi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!lOgi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lOgi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Title banner&quot;,&quot;title&quot;:&quot;Title banner&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Title banner" title="Title banner" srcset="https://substackcdn.com/image/fetch/$s_!lOgi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!lOgi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!lOgi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!lOgi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e2e007-a6fa-466c-b624-f6cffe45868f_1024x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>LXD offers features that further enhance development workflows:</p><ol><li><p><strong>Remote Access:</strong> Manage containers remotely via the secure REST API.</p></li><li><p><strong>Networking Mastery:</strong> Configure virtual networks to isolate containers and simulate complex network topologies for testing.</p></li><li><p><strong>Storage Management:</strong> Optimize storage performance with different backends like ZFS or LVM.</p></li><li><p><strong>Profiles for Reusability:</strong> Define reusable profiles to simplify container creation with consistent configurations.</p></li><li><p><strong>Snapshots and Rollbacks:</strong> Capture container states to revert to previous working configurations, ideal for experimentation quickly.</p></li><li><p><strong>Moving and Migrating Containers:</strong> Easily move or migrate running containers between LXD hosts or even to different cloud providers.</p></li></ol><p><strong>Pro tip</strong>:</p><p>If you often create containers with similar settings, use profiles. They&#8217;ll save you from repeating the same config steps over and over. The Ultimate Ubuntu Handbook shows how to build reusable profiles for real projects.</p><h1><strong>The Future of LXD</strong></h1><p>LXD continues to evolve, with ongoing efforts to integrate with Kubernetes for seamless orchestration and improved virtualization support for demanding workloads. Enhanced security features and a developing web-based user interface (<code>sudo snap set lxd ui.enable=true &amp;&amp; sudo snap restart lxd</code>) are also on the horizon, making LXD even more accessible and powerful for developers.</p><p>The bottom line? LXD is a game-changer for developers on Ubuntu, offering a compelling blend of efficiency, security, and flexibility. By embracing LXD, developers can create efficient, reproducible, and secure environments that streamline workflows, enhance collaboration, and accelerate innovation.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/why-lxd-beats-vms-and-docker-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/why-lxd-beats-vms-and-docker-for?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p>Ken&#8217;s walkthrough is just a glimpse into what&#8217;s possible when you bring containers into everyday development on Ubuntu. If you&#8217;d like to go deeper, his book <a href="https://www.packtpub.com/en-us/product/the-ultimate-ubuntu-handbook-9781835468876">The Ultimate Ubuntu Handbook</a> is full of practical examples, from building secure containers to streamlining workflows and preparing for production deployments. It&#8217;s a guide designed to stay useful long after the first read.</p><p><strong><a href="https://www.packtpub.com/en-us/product/the-ultimate-ubuntu-handbook-9781835468876">Get The Book</a></strong></p>]]></content:encoded></item><item><title><![CDATA[The Hidden Platform Lesson Behind Airbnb’s Data Quality Framework]]></title><description><![CDATA[A Blueprint for Smarter Platform Engineering]]></description><link>https://packtcloudpro.substack.com/p/the-hidden-platform-lesson-behind</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/the-hidden-platform-lesson-behind</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 18 Aug 2025 15:27:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YGLf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A few years ago Airbnb was drowning in data bugs that broke trust in their metrics. Their solution wasn&#8217;t a new model. It was a platform framework called Wall that cleaned up pipelines and made data reliable again. In today's CloudPro, we unpack what every platform engineer can learn from it.</p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/the-hidden-platform-lesson-behind?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/the-hidden-platform-lesson-behind?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h1><strong><a href="https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489">AI Powered Platform Engineering Workshop</a></strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!X9vM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 424w, https://substackcdn.com/image/fetch/$s_!X9vM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 848w, https://substackcdn.com/image/fetch/$s_!X9vM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 1272w, https://substackcdn.com/image/fetch/$s_!X9vM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!X9vM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png" width="1456" height="731" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:731,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14614353,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/171283766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!X9vM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 424w, https://substackcdn.com/image/fetch/$s_!X9vM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 848w, https://substackcdn.com/image/fetch/$s_!X9vM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 1272w, https://substackcdn.com/image/fetch/$s_!X9vM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F208779be-0c6d-4b65-8c66-a9e47980a6b3_6504x3264.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Most platform teams hit the same wall: tools pile up, self-service breaks down, and platforms get rebuilt every 18 months.</p><p>On <strong>September 16</strong>, join CNCF Ambassador <strong>Max K&#246;rb&#228;cher</strong> for a <strong>3-hour live workshop</strong> on how to design internal platforms with AI baked in.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489&quot;,&quot;text&quot;:&quot;LAUNCH OFFER: 40% OFF for 48 Hours&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489"><span>LAUNCH OFFER: 40% OFF for 48 Hours</span></a></p><p>Use Code: LIMITED40</p><div><hr></div><h1><strong>The Hidden Platform Lesson Behind Airbnb&#8217;s Data Quality Framework</strong></h1><p><strong>A Blueprint for Smarter Platform Engineering</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YGLf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YGLf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YGLf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YGLf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YGLf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YGLf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1829667,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/171283766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YGLf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YGLf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YGLf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YGLf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0784436a-6a5b-4e4e-be20-baa1f53b7f79_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A few years back, Airbnb hit a painful truth: a single data bug could quietly poison dashboards, mislead teams, and steer decisions the wrong way.</p><p>To deal with it, Airbnb launched a <strong>Data Quality Initiative</strong>. The company rolled out <em>Midas</em>, a certification process for critical datasets, and made checks for accuracy, completeness, and anomalies mandatory.</p><p>It sounded good on paper. But in practice, it quickly turned into a mess.</p><p>Every team wrote checks in their own way: Hive, Presto, PySpark, Scala. There was no central view of what was covered, and updating rules meant editing code in a dozen different places. Teams duplicated effort, each building their own half-complete frameworks to run checks. And pipelines grew heavy: every check was an Airflow task, DAG files ballooned, and false alarms could block production jobs.</p><p>Airbnb needed a better path.</p><p>So, they built <strong>Wall</strong>, a single framework for checks. Instead of custom code, engineers wrote checks in YAML configs. An Airflow helper ran them, keeping logic separate from pipelines. Wall added support for blocking vs. non-blocking checks, so minor issues didn&#8217;t stop critical flows. And instead of burying results in logs, it sent them into Kafka for other systems to consume.</p><p>The results were dramatic. Some pipelines shed more than 70% of their Airflow code. Teams stopped reinventing the wheel. Data-quality checks went from fragile and inconsistent to a paved path everyone could rely on.</p><h1><strong>What Platform Engineers Can Learn from Airbnb</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pMoc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pMoc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pMoc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pMoc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pMoc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pMoc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1695498,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/171283766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pMoc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!pMoc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!pMoc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!pMoc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3b79d70b-b047-4dbf-a369-1c45ef135bc5_1536x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3><strong>1. Standardize Pipelines and Checks</strong></h3><p>In <em><a href="https://www.packtpub.com/en-us/product/mastering-enterprise-platform-engineering-9781835880487">Mastering Enterprise Platform Engineering</a></em>, authors Mark and Gautham makes a simple point: reliable AI doesn&#8217;t come from choosing the perfect model. It comes from the <strong>rails</strong> underneath: pipelines, integration layers, automation, and guardrails. The numbers are striking: clean pipelines alone can improve model performance by 30%, audits can cut errors by 90%, flexible integration can halve deployment time, and predictive automation can reduce downtime by 50%.</p><p>Reliable AI starts with consistent pipelines and repeatable checks. When pipelines are clean and quality checks are routine, the entire system gets more predictable. That&#8217;s why standardized checks and audits can boost accuracy so dramatically.</p><p>Airbnb learned this the hard way. Each team had its own approach to checks, spread across different engines. The duplication and inconsistency created constant drag. Wall fixed it by moving to YAML-based checks in a single framework. Suddenly, teams were speaking the same language. Some pipelines saw their DAGs shrink by more than 70%.</p><h3><strong>2. Decouple Checks from Workflow Code</strong></h3><p>One of the biggest risks in complex systems is tangling logic together. When validation lives inside workflow code, every change increases fragility. By pulling checks out into their own layer, you gain flexibility, reuse, and resilience.</p><p>Wall embodied this. Instead of clogging DAGs with checks, it made them independent services. Results flowed into Kafka, where other systems could consume them. Checks weren&#8217;t bound to pipelines anymore; they became a decoupled, reusable rail.</p><h3><strong>3. Close the Loop with Automation</strong></h3><p>Validation without action is just noise. The real value comes when checks automatically trigger responses: scaling a service, blocking a bad job, or notifying the right team. This kind of <strong>predict&#8594;act loop</strong> is where platform engineering proves its worth.</p><p>Wall pushed Airbnb in this direction. By publishing results as Kafka events, checks could plug into downstream tools that acted immediately. Instead of waiting for humans to parse dashboards, the system closed the loop itself.</p><h3><strong>4. Build Guardrails, Not Just Tests</strong></h3><p>Not every failed check should bring the system down. The right approach is to design guardrails: rules that let you decide what&#8217;s a blocker and what&#8217;s not. This keeps the platform safe without making it brittle.</p><p>Wall introduced blocking vs. non-blocking checks to solve this. Critical issues stopped the flow; minor ones didn&#8217;t. That simple design choice turned fragile pipelines into resilient ones. Guardrails, not tests, are what kept the system trustworthy.</p><h3><strong>5. Standardize Tools to Reduce Friction</strong></h3><p>Every extra framework, every redundant tool, adds friction. Engineers spend more time maintaining and less time building. The fix is to standardize on a common set of rails, even if it means trade-offs.</p><p>Airbnb saw this firsthand. With every team writing their own frameworks, they were duplicating effort and missing features. Wall gave them a single standard, cutting out wasted work. Once engineers stopped arguing about how to check data, they could focus on using it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K4xR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K4xR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!K4xR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!K4xR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!K4xR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K4xR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/be96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2260444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/171283766?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K4xR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!K4xR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!K4xR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!K4xR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbe96eb3d-5147-443a-917a-42161f56b6ff_1024x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><p>This walkthrough was adapted from <em><a href="https://www.packtpub.com/en-us/product/mastering-enterprise-platform-engineering-9781835880487">Mastering Enterprise Platform Engineering</a></em> and connects to Packt&#8217;s <strong>AI-Powered Platform Engineering Workshop</strong> on <strong>September 16</strong>.</p><p>It&#8217;s a live, 3-hour session led by CNCF Ambassador <strong>Max K&#246;rb&#228;cher</strong>, focused on how to build internal platforms with AI baked in: platforms that stay usable, scalable, and sustainable.</p><p>CloudPro readers get <strong>40% off tickets for the next 48 hours</strong>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489&quot;,&quot;text&quot;:&quot;LAUNCH OFFER: 40% OFF for 48 Hours&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://www.eventbrite.com/e/ai-powered-platform-engineering-tickets-1591186444489"><span>LAUNCH OFFER: 40% OFF for 48 Hours</span></a></p><p>Use Code: LIMITED40</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/the-hidden-platform-lesson-behind?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/the-hidden-platform-lesson-behind?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[ReplicaSet ≠ High Availability (Until You Test This)]]></title><description><![CDATA[Pods fail, nodes go down: this walkthrough shows what actually happens, and how to fix it.]]></description><link>https://packtcloudpro.substack.com/p/how-replicasets-actually-deliver</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/how-replicasets-actually-deliver</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 04 Aug 2025 14:28:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BttA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BttA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BttA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BttA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BttA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BttA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BttA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:162346,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/170086804?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BttA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BttA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BttA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BttA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F93db2b9a-60d7-4402-bb36-9d450fbd243a_1536x1024.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><h2>30 second summary for you:</h2><p>Running your app in Kubernetes doesn&#8217;t mean it&#8217;s highly available. This walkthrough shows how ReplicaSets restore failed pods, handle node loss, and work with probes, all backed by real command-line examples. Adapted from Packt&#8217;s <em>The Kubernetes Bible</em> (Chapter 10).</p><ul><li><p>8-minute read</p></li><li><p>Hands-on commands included</p></li></ul><h2>The Problem: One Dead Pod, and Your App Stalls</h2><p>Let&#8217;s say you&#8217;ve got a stateless NGINX app deployed in a multi-node Kubernetes cluster using a ReplicaSet. You think you&#8217;re covered because there are 4 replicas. But then you:</p><ul><li><p>delete a pod manually</p></li><li><p>drain one of the nodes</p></li><li><p>simulate a container failure</p></li></ul><p>In all three cases, you&#8217;re expecting automatic recovery. But it&#8217;s not magic. It's ReplicaSet (and sometimes liveness probes) doing the heavy lifting.</p><p>Let&#8217;s walk through all three failure modes and see what Kubernetes does.</p><h2>Pod Deletion? No Problem.</h2><p>This scenario demonstrates how a ReplicaSet restores deleted pods to maintain the desired number of replicas.</p><p>Here's a step-by-step walkthrough:</p><ol><li><p><strong>Define the ReplicaSet manifest:</strong> Save the following YAML as <code>nginx-replicaset-example.yaml:</code></p></li></ol><pre><code>apiVersion: apps/v1
kind: ReplicaSet
metadata:
  name: nginx-replicaset-example
  namespace: rs-ns
spec:
  replicas: 4
  selector:
    matchLabels:
      app: nginx
      environment: test
  template:
    metadata:
      labels:
        app: nginx
        environment: test
    spec:
      containers:
        - name: nginx
          image: nginx:1.17
          ports:
            - containerPort: 80</code></pre><ol start="2"><li><p><strong>Create the namespace:</strong> This ensures all your resources are scoped properly.</p></li></ol><pre><code>kubectl create -f ns-rs.yaml</code></pre><ol start="3"><li><p><strong>Deploy the ReplicaSet:</strong> The manifest defines a ReplicaSet with 4 NGINX pods.</p></li></ol><pre><code>kubectl apply -f nginx-replicaset-example.yaml</code></pre><ol start="4"><li><p><strong>Delete a pod manually:</strong> Simulate a pod failure by deleting one of the running pods.</p></li></ol><pre><code>kubectl delete pod &lt;pod-name&gt; -n rs-ns</code></pre><ol start="5"><li><p><strong>Verify that the ReplicaSet restores the pod</strong>: The controller detects the change and automatically spins up a new pod to maintain the desired count.</p></li></ol><pre><code>kubectl get pods -n rs-ns
kubectl describe rs/nginx-replicaset-example -n rs-ns</code></pre><p>Within seconds, the ReplicaSet controller notices the missing pod and recreates it to meet the declared replica count.</p><p><strong>Takeaway</strong>: ReplicaSets automatically maintain the number of desired pods, making recovery from manual deletions fast and hands-free.</p><h2>2. Node Failure? Here's What Actually Happens</h2><p>This scenario demonstrates how ReplicaSets maintain high availability when a node goes down by rescheduling pods onto available nodes:</p><p>Here's a step-by-step walkthrough:</p><ol><li><p>Expose your app with a Service:</p></li></ol><pre><code>kubectl apply -f nginx-service.yaml</code></pre><p>This creates a service to access your app across pods.</p><ol start="2"><li><p>Forward traffic from your local machine to the Kubernetes Service:</p></li></ol><pre><code>kubectl port-forward svc/nginx-service 8080:80 -n rs-ns
curl localhost:8080</code></pre><p>This confirms your service is working and traffic is flowing to the pods.</p><ol start="3"><li><p>Check where the pods are currently running:</p></li></ol><pre><code>kubectl get pods -n rs-ns -o wide</code></pre><p>This shows which node each pod is scheduled on.</p><ol start="4"><li><p>Simulate node failure by cordoning and draining the node:</p></li></ol><pre><code>kubectl cordon kind-worker</code></pre><p>Prevents new pods from being scheduled on this node.</p><pre><code>kubectl drain kind-worker --ignore-daemonsets</code></pre><p>Evicts all running pods from the node while ignoring daemonsets.</p><pre><code>kubectl delete node kind-worker</code></pre><p>Removes the node from the cluster to simulate a full node failure.</p><p>Within moments, the ReplicaSet detects the missing pods and spins up new ones on the remaining healthy nodes. Your Service automatically reroutes traffic to these new pods.</p><ol start="5"><li><p>Verify that everything is still working:</p></li></ol><pre><code>kubectl get pods -n rs-ns -o wide
curl localhost:8080</code></pre><p>You&#8217;ll see that traffic still flows, and the app remains accessible without downtime.</p><p><strong>Takeaway</strong>: The ReplicaSet ensures that the desired number of pod replicas is always maintained &#8212; even when a node goes offline. It handles pod rescheduling automatically, as long as there's sufficient capacity in your cluster.</p><h2>3. Unhealthy Container? Probes Save the Day</h2><p>Let&#8217;s see how Kubernetes handles an unhealthy container using liveness probes.</p><p>Here's a step-by-step walkthrough:</p><ol><li><p>Add the following liveness probe to your ReplicaSet pod spec. It instructs the kubelet to check container health after 2 seconds and repeat every 2 seconds:</p></li></ol><pre><code>livenessProbe:
  httpGet:
    path: /
    port: 80
  initialDelaySeconds: 2
  periodSeconds: 2</code></pre><ol start="2"><li><p>Apply your updated ReplicaSet manifest and wait for the pod to be up and running.</p></li><li><p>Simulate a container failure by deleting the default NGINX index file:</p></li></ol><pre><code>kubectl exec -it &lt;pod-name&gt; -- rm /usr/share/nginx/html/index.html</code></pre><ol start="4"><li><p>Check what happens by describing the pod:</p></li></ol><pre><code>kubectl describe pod &lt;pod-name&gt;</code></pre><p>You&#8217;ll see Liveness probe failed events, followed by automatic container restarts.</p><p><strong>Takeaway</strong>: The kubelet, not the ReplicaSet, manages container health. But when used with ReplicaSets, probes help create a resilient system that self-heals when a container goes bad.</p><h2>Cleanup</h2><p>You can delete the ReplicaSet and its pods:</p><pre><code>kubectl delete rs/nginx-replicaset-livenessprobe-example</code></pre><p>Or just delete the controller, leaving pods untouched:</p><pre><code>kubectl delete rs/nginx-replicaset-livenessprobe-example --cascade=orphan</code></pre><h2>Key Takeaways</h2><ul><li><p><strong>ReplicaSets</strong> guarantee pod replication and replacement&#8212;not health checking</p></li><li><p><strong>Liveness probes</strong> enable kubelet to restart broken containers</p></li><li><p><strong>Node failure recovery</strong> works if your cluster has enough capacity and replicas are spread</p></li><li><p><strong>HA = ReplicaSets + Probes + Services</strong>, working in tandem</p></li></ul><p>Based on Chapter 10 of The Kubernetes Bible, Second Edition</p>]]></content:encoded></item><item><title><![CDATA[CloudPro #101: Kubernetes v1.33 now supports hybrid post-quantum TLS key exchange by default]]></title><description><![CDATA[AWS has launched a developer preview of the API MCP Server]]></description><link>https://packtcloudpro.substack.com/p/cloudpro-101-kubernetes-v133-now</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/cloudpro-101-kubernetes-v133-now</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 28 Jul 2025 06:54:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1ee7d092-23dc-4407-b37f-07de363d4140_1100x220.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the latest edition of <strong>CloudPro</strong>!</p><p>In this week&#8217;s issue, there&#8217;s a quick fix for bloated Terraform states, a clean Docker Compose alternative with Quadlet, and new AWS features like remote Lambda debugging and native blue/green ECS deploys.<br><br>You&#8217;ll also find a GitOps primer with Argo CD, a free Kubernetes IDE, and real benchmark data on which Gateway API controllers hold up at scale.<br><br>If you want updates like these daily, not just weekly, follow <a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3P%7Co6c">Packt SysOps</a>. One practical post every weekday at 9AM ET, with lessons from real cloud teams.</p><p>Cheers,</p><p><strong><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3B-o6c">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h1><strong>&#128230; Kubernetes &amp; Cloud Native</strong></h1><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3E2o6c">Kubernetes v1.33 now supports hybrid post-quantum TLS key exchange by default</a>, thanks to its upgrade to Go 1.24. This enables X25519+ML-KEM (Kyber) for TLS without explicit configuration. However, mismatched Go versions across clients and servers can cause silent downgrades to classical encryption. PQ signatures aren&#8217;t yet production-ready due to large key sizes and limited tooling support.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3E6o6c">EKS Auto Mode now supports pod-specific subnets</a> using podSubnetSelectorTerms in EKS Node Classes. This allows developers to assign pods IPs from custom subnet ranges, improving network isolation. Combined with Karpenter Node Pools and Terraform automation, teams can now declaratively manage these configurations at scale.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3E-o6c">Intro to GitOps with Argo CD</a></p><p>This beginner-friendly guide explains GitOps and shows how to deploy Argo CD to automate Kubernetes app delivery. It walks through installing Argo CD, exposing it via Ingress, and logging in securely, eliminating complex CD pipelines and simplifying multi-team access.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3EDo6c">Free IDE for Kubernetes</a></p><p>Freelens is a free, open-source desktop app for managing Kubernetes clusters, available for macOS, Linux, and Windows via multiple package managers. Built as a fork of OpenLens, it simplifies cluster operations with a clean UI, bundled CLI tools, and extension support.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Feo6c">A new open-source benchmark suite tests seven major Gateway API implementations</a>, like Istio, Envoy Gateway, and Traefik, across route setup, scaling, architecture, and performance. The results show large differences in reliability and scalability, with Istio and Kgateway standing out positively, while Nginx, Cilium, and Traefik suffered critical failures or severe scaling issues. For cloud engineers, this benchmark helps cut through marketing claims and highlights which controllers are production-ready.</p><h1><strong>&#9881;&#65039; Infrastructure &amp; DevOps</strong></h1><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3F%7Co6c">Google Cloud Run Adds Native Support for Docker Compose AI Deployments</a></p><p>Now in private preview, this simplifies moving multi-container AI apps from local to cloud with GPU support and persistent volumes. Cloud Run&#8217;s recent GPU GA and fast scaling make it a strong platform for agentic and LLM workloads.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Fmo6c">Google Cloud Expands Cluster Director with GUI, Managed Slurm, and Anomaly Detection</a>.</p><p>Users can launch optimized clusters with GPU, network, and storage setup in under a day, with built-in topology-aware scheduling and straggler detection. The updates aim to reduce setup time and improve performance for large-scale distributed training.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Fqo6c">AWS has launched a developer preview of the API MCP Server</a>, allowing foundation models to convert natural language into valid AWS CLI commands. This tool enables FM-powered agents to inspect and manage AWS resources securely through IAM-based permissions. It's open source and now available on GitHub for experimentation.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3F%5Eo6c">Amazon Bedrock AgentCore is now in preview</a>, offering modular services to help developers run AI agents at scale with production-grade security and observability. It includes tools for session management, memory, API integration, web browsing, code execution, and identity control.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Pmo6c">AWS has launched two new features for Lambda</a>: console-to-IDE integration and remote debugging. Developers can now open Lambda functions directly in VS Code with a single click, and debug cloud-deployed functions live from their IDE, including access to VPCs and IAM roles.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3F2o6c">Amazon ECS now supports native blue/green deployments</a>, making it easier to roll out application updates safely without custom tooling. You can test new revisions in parallel, use lifecycle hooks for automated validation, and instantly roll back if needed, all with no end-user disruption.</p><h1><strong>&#128272; Cloud Security</strong></h1><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3F6o6c">AWS Fixes Flaw That Allowed Full Org Takeover via Delegated Admins</a></p><p>Researchers found a way to take over entire AWS Organizations by combining misconfigured delegated admin accounts with an overly permissive managed policy. A user in a compromised account could gain control of every account, including the management account. AWS has released a fixed policy (v2), but the old version is still active if not manually replaced. Teams should audit delegated admin roles and update any remaining v1 policies immediately.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3F-o6c">AWS IAM Action Classifications Updated. But Inconsistencies Remain</a></p><p>Fog Security found mismatches between AWS&#8217;s new programmatic IAM action listings and the older Service Authorization Reference (SAR) pages. Some actions have multiple classifications, others are missing or categorized differently across the two sources. These inconsistencies could affect IAM tooling and workflows. Teams using SAR data should review the differences before switching to the new programmatic references.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3FDo6c">CDK Construct that syncs your sops secrets into AWS SecretsManager secrets.</a></p><p>The cdk-sops-secrets project helps developers securely sync SOPS-encrypted secrets into AWS Secrets Manager or SSM Parameter Store using CDK constructs. It supports JSON, YAML, dotenv, and binary formats, with features like batch uploads and automatic IAM permission generation. The tool also allows customization via a singleton Lambda provider.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Meo6c">Serverless Password Manager Built Entirely on AWS Free Tier</a></p><p>RunaVault is an open-source password manager using AWS Cognito, Lambda, DynamoDB, and KMS to store and share secrets securely. It&#8217;s built for zero-cost deployments under the AWS free tier, with features like MFA, RBAC, and client-side encryption.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3M%7Co6c">S3 Security Scanner for Access and Ransomware Protection</a></p><p>YES3 is a Python-based tool that scans AWS S3 buckets for security misconfigurations, including public access, encryption gaps, versioning, and object lock issues. It also checks account-wide settings like public access blocks and logs findings in a readable format.</p><h1><strong>&#128269; Observability &amp; SRE</strong></h1><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Mmo6c">Google Cloud has rolled out a new Application Monitoring feature</a> that auto-generates dashboards, logs, and metrics views for services defined in App Hub. The tool helps teams troubleshoot faster by surfacing golden signals and propagating labels across logs, metrics, and traces. It also integrates with Gemini Cloud Assist.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Mqo6c">Microsoft has expanded Project Flash to give Azure users deeper, real-time visibility into VM availability disruptions</a>. New features include a context-aware metric in Azure Monitor that distinguishes between platform- and user-triggered issues, and Event Grid integration for instant alerts.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3M%5Eo6c">Amazon EventBridge now supports enhanced logging</a> to CloudWatch, S3, and Kinesis Firehose, helping teams debug event-driven apps more effectively. Users can choose log levels (error, info, trace), include event payloads, and track rule matches and invocation errors. This makes it easier to trace event flows and spot failures without custom tooling.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3Myo6c">Amazon EventBridge now offers enhanced logging that tracks the full lifecycle of events</a>, from receipt to success or failure, across CloudWatch, S3, or Firehose. Logs include rich metadata, latency breakdowns, and error details, helping engineers pinpoint issues in Lambda targets or API destinations.</p><p><a href="https://packt.omeclk.com/portal/wts/ue%5EcnN2cFjaqmz-k3M2o6c">AWS S3 Metadata now supports querying metadata for all objects</a>, not just new or updated ones&#8212;via fully managed Iceberg tables. Live inventory tables and journal tables enable SQL-based queries to track storage usage, object changes, deletions, and lifecycle activity. This simplifies cost optimization, auditing, and ML pipeline prep by eliminating the need for manual scanning or S3 Inventory jobs.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/subscribe?"><span>Subscribe now</span></a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://packtcloudpro.substack.com/p/cloudpro-101-kubernetes-v133-now?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://packtcloudpro.substack.com/p/cloudpro-101-kubernetes-v133-now?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[Which Call Paths Dominate at Runtime: Using Flame Graphs to Visualize it!]]></title><description><![CDATA[By Kaiwan N Billimoria]]></description><link>https://packtcloudpro.substack.com/p/which-call-paths-dominate-at-runtime</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/which-call-paths-dominate-at-runtime</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 23 Jun 2025 15:42:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/62ad7c39-ba42-40ae-bb86-353f777cbe33_1536x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week&#8217;s CloudPro is a guest special from <a href="https://kaiwantech.com/">Kaiwan N Billimoria</a>, the author of <a href="https://www.packtpub.com/en-us/product/linux-kernel-programming-9781803241081">Linux Kernel Programming</a>. Kaiwan runs world-class, seriously-valuable, high on returns, technical Linux OS (Corporate and Individual-Online) training programs at <a href="https://kaiwantech.com">https://kaiwantech.com</a>. In today&#8217;s issue, Kaiwan walks us through <strong>Flame Graphs: </strong>a powerful tool to visualize which call paths dominate at runtime and uncover performance bottlenecks.</p><p>Cheers,</p><p><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></p><p>Editor-in-Chief</p><div><hr></div><h1><strong>Which Call Paths Dominate at Runtime: Using Flame Graphs to Visualize it!</strong></h1><h2><strong>By Kaiwan N Billimoria</strong></h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Jwpy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Jwpy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Jwpy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Jwpy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Jwpy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Jwpy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1886038,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/169142588?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Jwpy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Jwpy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Jwpy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Jwpy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd663fec1-26a2-4e69-af15-d4e06e457168_1536x1024.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Analyzing workloads is something all engineers end up doing at some point or another (or it&#8217;s their job description!). An obvious reason is performance analysis; for example, CPU usage may spike at times, causing issues or even outages.</p><p>The need of the hour: observe, analyze, and figure out the root cause of the performance issue! Of course, that&#8217;s often easier said than done; this kind of work can bog down even experienced professionals...</p><p>Borrowing from <a href="http://www.slideshare.net/brendangregg/scale2015-linux-perfprofiling">Brendan Gregg&#8217;s wonderful presentation</a> (though old, it&#8217;s still relevant):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9zPV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9zPV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 424w, https://substackcdn.com/image/fetch/$s_!9zPV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 848w, https://substackcdn.com/image/fetch/$s_!9zPV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 1272w, https://substackcdn.com/image/fetch/$s_!9zPV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9zPV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png" width="785" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:785,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!9zPV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 424w, https://substackcdn.com/image/fetch/$s_!9zPV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 848w, https://substackcdn.com/image/fetch/$s_!9zPV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 1272w, https://substackcdn.com/image/fetch/$s_!9zPV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4dd468f-cc84-4c28-9d9f-1520d38d5576_785x502.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In general, answering the &#8216;Who&#8217; and the &#8216;How&#8217; are simple(r):</p><ul><li><p><strong>&#8216;Who?&#8217;</strong>: well-known tools like top (and its numerous variants &#8211; htop, atop, etc) help answer this question.</p></li><li><p><strong>&#8216;How?&#8217;</strong>: lots of system monitoring tools are available (vmstat, dstat, sar, nagios, cacti, nmon, iostat, nethogs, sysmon, etc.).</p></li></ul><p>The harder questions tend to be the &#8216;Why?&#8217; and &#8216;What?&#8217;:</p><ul><li><p><strong>&#8216;Why?&#8217;</strong>: by generating a <em>Flame Graph!</em> (the topic of this short article)</p></li><li><p><strong>&#8216;What?&#8217;</strong>: Flame Graphs as well as plain old perf!</p></li></ul><p>The following slide illustrates this (again, from Brendan Gregg):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!N7ni!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!N7ni!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 424w, https://substackcdn.com/image/fetch/$s_!N7ni!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 848w, https://substackcdn.com/image/fetch/$s_!N7ni!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 1272w, https://substackcdn.com/image/fetch/$s_!N7ni!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!N7ni!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png" width="414" height="276" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:276,&quot;width&quot;:414,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!N7ni!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 424w, https://substackcdn.com/image/fetch/$s_!N7ni!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 848w, https://substackcdn.com/image/fetch/$s_!N7ni!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 1272w, https://substackcdn.com/image/fetch/$s_!N7ni!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd0f00d0a-7f15-47a7-92fb-bf9071db9518_414x276.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Right. So what the heck&#8217;s this Flame Graph thingy? Let&#8217;s explore!</p><p>We&#8217;ll abbreviate Flame Graphs as <strong>FG</strong>.</p><p>There are several types of FGs (CPU, GPU, memory, off-cpu, etc.); here we keep the focus on just one: <strong>CPU FGs via Linux&#8217;s powerful perf CPU profiler.</strong></p><p>The moment a tool can generate profiling data that includes <strong>stack traces</strong>, it implies <em>that FGs can be generated</em>! Thus, there are several tools besides perf that generate FGs:</p><ul><li><p>Windows: WPA, PerfView, Xperf.exe</p></li><li><p>Linux: perf, eBPF, SystemTap, ktap</p></li><li><p>FreeBSD: DTrace</p></li><li><p>Mac OS X: Instruments</p></li></ul><p>We&#8217;ll focus only on using Linux <strong>perf</strong>; it&#8217;s<strong> </strong>considered one of the best modern CPU profiling tools on the platform</p><h1>Motivation for FGs</h1><p>With perf, you <em>can </em>indeed profile your workload and see where exactly CPU usage shoots up. It&#8217;s easy: record something, get the report, and analyze it (well&#8230; it <em>sounds</em> easy at least).</p><p><em>Example:</em></p><ul><li><p><strong>Record </strong>a system-wide profiling (-a option switch) session with stack chain / backtrace (<em>--call-graph dwarf</em>, old option was <em>-g</em>), frequency of 99 Hz, for 10 seconds:</p></li></ul><pre><code>sudo perf record -F 99 -a --call-graph dwarf -- sleep 10</code></pre><p>(Instead of the <em>-a</em> option switch, you can use the <em>-p PID</em> option to profile a particular process. The generated <em>perf.data</em> file&#8217;s owned by root; do a <em>chown</em> to place its ownership under your account if you wish.)</p><ul><li><p>Get the perf <strong>report</strong>:</p></li></ul><pre><code><code>sudo perf report --stdio # or --tui</code></code></pre><p>&#8230;</p><p>(Try it!).</p><p>This begs the question &#8211; so why not just use perf? Ah, that&#8217;s the thing: on non-trivial workloads, the report can be simply humongous, even going into dozens of (printed) pages! <em>Are you really going to read through all of it, trying to spot the outliers?</em></p><h1>Visualization with the CPU Flame Graph</h1><p>It&#8217;s why we use the so-called Flame Graph (FG) &#8211; to <em>visualize </em>dense textual data and make sense of it; it&#8217;s so much clearer (so much more humane, literally).</p><p><strong>Installation</strong></p><p>First off, ensure both the <strong>perf</strong> utility and the <strong>FlameGraph </strong>scripts are installed.</p><p>Quick note: to install perf on Ubuntu/Debian, you typically need to be on a distro kernel (not a custom one).Why? Because &#8211; unusually for an app &#8211; it&#8217;s tightly coupled to the kernel it runs on! Assuming you&#8217;re on an Ubuntu/Debian distro, do this: <strong>sudo apt install linux-perf-$(uname -r) linux-tools-generic </strong>(even the linux-tools-generic package might be sufficient).</p><p>If you&#8217;re on a custom-built kernel, build perf (it&#8217;s easy): <strong>cd &lt;kernel-src-tree&gt;/tools/perf ; make</strong> .</p><p><strong>Install FG</strong> <a href="https://github.com/brendangregg/FlameGraph">from here</a> or do (in an empty folder):</p><p><code>git clone --depth 1</code> <a href="https://github.com/brendangregg/FlameGraph.git">https://github.com/brendangregg/FlameGraph.git</a></p><h2><strong>Steps to generate a Flame Graph</strong></h2><ol><li><p>Profile the workload using <em>perf</em>:</p></li></ol><pre><code>perf record -F 99 --call-graph dwarf [-a]|[-p pid]</code></pre><ul><li><p>-a: all cpus; in effect, if specified, the sample is system-wide</p></li><li><p>-p: sample a particular process.</p></li></ul><p>Generates the perf.data binary file.</p><ol start="2"><li><p>Read from <em>perf.data </em>(default, else use -i &lt;fname&gt;) to convert the binary data to human-readable stack traces via <em>perf script</em>:</p></li></ol><pre><code>perf script &gt; perfscript_out.dat</code></pre><ol start="3"><li><p>Generate the FG, a <strong>Scalable Vector Graphic (SVG)</strong> file:</p></li></ol><p>The FG repo includes several <em>stackcollapse-*</em> scripts; we use the <em>stackcollapse-perf.pl</em> one:</p><pre><code>cat perfscript_out.dat | FlameGraph/stackcollapse-perf.pl \

| FlameGraph/flamegraph.pl &gt; out.svg</code></pre><ol start="4"><li><p>Open the SVG in a web browser, move the mouse over stack frames.</p></li></ol><h1>A Quick Test Run</h1><p>We&#8217;ll assume you&#8217;ve installed both perf and the Flame Graph GitHub repo (the latter under your home dir).</p><ol><li><p>Profile: record everything for 10s</p></li></ol><pre><code>sudo perf record -F 99 -a --call-graph dwarf -- sleep 10sudo chown ${LOGNAME}:${LOGNAME} perf.dataperf script &gt; perfscript_out.datcat perfscript_out.dat | ~/FlameGraph/stackcollapse-perf.pl |~/FlameGraph/flamegraph.pl &gt; out.svg</code></pre><ol start="2"><li><p>Open the SVG file in a web browser. Here&#8217;s a screenshot of the Flame Graph</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zN8L!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zN8L!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 424w, https://substackcdn.com/image/fetch/$s_!zN8L!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 848w, https://substackcdn.com/image/fetch/$s_!zN8L!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 1272w, https://substackcdn.com/image/fetch/$s_!zN8L!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zN8L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png" width="942" height="808" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:808,&quot;width&quot;:942,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!zN8L!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 424w, https://substackcdn.com/image/fetch/$s_!zN8L!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 848w, https://substackcdn.com/image/fetch/$s_!zN8L!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 1272w, https://substackcdn.com/image/fetch/$s_!zN8L!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa46e26b3-7e18-4d14-a320-7414bbb0eb83_942x808.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Hmm, better if we zoom in&#8230; so I click on one of the rectangles on the lower-left (say on the <em>gnome-shell</em> one):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wrtL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wrtL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 424w, https://substackcdn.com/image/fetch/$s_!wrtL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 848w, https://substackcdn.com/image/fetch/$s_!wrtL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 1272w, https://substackcdn.com/image/fetch/$s_!wrtL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wrtL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png" width="584" height="510" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c896cab0-0b75-4864-b938-92551d21a8c8_584x510.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:510,&quot;width&quot;:584,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!wrtL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 424w, https://substackcdn.com/image/fetch/$s_!wrtL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 848w, https://substackcdn.com/image/fetch/$s_!wrtL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 1272w, https://substackcdn.com/image/fetch/$s_!wrtL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc896cab0-0b75-4864-b938-92551d21a8c8_584x510.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Ah, better.</p><h1>Interpreting the Flame Graph</h1><p><em>Some really key points regarding how to interpret the Flame Graph:</em></p><ul><li><p>Each rectangle represents a single stack frame; read it bottom-up.</p><ul><li><p>The width is representative of the frequency of the function call.</p></li><li><p>The height is representative of the depth of the stack</p></li></ul></li><li><p>The order of rectangles from left-to-right is just alphabetical; it's <em>not</em> a timeline.</p></li><li><p>The colors don&#8217;t signify anything special.</p></li><li><p>You can (typically) use the browser <em>Search </em>(Ctrl-F) to search for a function by name.</p></li><li><p>Click on a stack frame (a rectangle) to zoom into that tower. Click <em>Reset Zoom </em>(upper-left corner) to zoom back out.</p></li></ul><p>In effect: the hottest code-paths &#8211; <em>the ones that dominate</em> - are the widest rectangles!</p><p>The top-edge &#8211; the rectangle at the very top - is the function on-CPU; beneath is ancestry (how it was invoked).</p><p>Here&#8217;s another FG I captured while SSH was running (truncated screenshot showing the interesting portion):</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!dZCr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!dZCr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 424w, https://substackcdn.com/image/fetch/$s_!dZCr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 848w, https://substackcdn.com/image/fetch/$s_!dZCr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 1272w, https://substackcdn.com/image/fetch/$s_!dZCr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!dZCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png" width="478" height="516" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:516,&quot;width&quot;:478,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!dZCr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 424w, https://substackcdn.com/image/fetch/$s_!dZCr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 848w, https://substackcdn.com/image/fetch/$s_!dZCr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 1272w, https://substackcdn.com/image/fetch/$s_!dZCr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F56c9682b-581f-4e50-8d0c-66ae51d40f41_478x516.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Interesting; the &#8220;towers&#8221; seem to be inverted! Yes, they&#8217;ve becomes top-down (downward-growing stacks) instead of bottom-up&#8230; they&#8217;re called <em><strong>icicles</strong>!</em></p><p>An option to the <em>perf script </em>command sets this up.</p><p>A fantastic thing about the FG is that <em>both </em>userspace and kernel-space functions are captured! It&#8217;s thus called a <em>mixed-mode </em>FG. For e.g., with the &#8216;ssh&#8217; FG, you can clearly see the call path leading down to the kernel network protocol stack code &#8211; functions from the socket/INET layer <em>sock_*()</em>, followed by L4 <em>tcp_*()</em>, followed by the L3 <em>ip_*()</em> functions; even the invocation of the (network) device transmit &#8211; the <em>dev_hard_start_xmit()</em> and others &#8211; are visible!</p><h1>My flamegrapher.sh wrapper scripts</h1><p>Next, to make this a bit easier to use (no need to remember the syntax, easier options), I wrote a wrapper over the original Flame Graph scripts; the top-level one&#8217;s named <em><strong>flamegrapher.sh</strong></em>: https://github.com/kaiwan/L5_user_debug/tree/main/flamegraph (it forms a portion of my <em>&#8216;Linux Userspace Debugging &#8211; Tools &amp; Techniques&#8217;</em> training repo).<br><br>It&#8217;s Help screen reveals how you can &#8211; very easily! &#8211; use it to generate FGs:<br></p><pre><code>$ ./flame_grapher.sh</code></pre><p>Usage:</p><pre><code>flame_grapher.sh -o svg-out-filename(without .svg) [options ...]
-o svg-out-filename(without .svg): name of SVG file to generate (saved under /tmp/flamegraphs/)</code></pre><p>Optional switches:</p><p><code>[-p PID]: PID = generate a FlameGraph for ONLY this process or threadIf not passed, the *entire system* is sampled...</code></p><p><code>[-s &lt;style&gt;]: normal = draw the stack frames growing upward [default]icicle = draw the stack frames growing downward</code></p><p><code>[-t &lt;type&gt;]: graph= produce a flame graph (X axis is NOT time, merges stacks) [default]Good for performance outliers (who's eating CPU? using max stack?); works well for multi-threaded apps</code></p><p><code>chart= produce a flame chart (sort by time, do not merge stacks)</code></p><p><code>Good for seeing all calls; works well for single-threaded apps</code></p><p><code>[-f &lt;freq&gt;]: frequency (HZ) to have perf sample the system/process at [default=99]Too high a value here can cause issues</code></p><p><code>-h|-?: show this help screen.</code></p><p>Note:</p><ul><li><p>After pressing ^C to stop, please be patient... it can take a while to process.</p></li><li><p>The FlameGraph SVG (and perf.data file) are stored in the volatile /tmp/flamegraphs dir; copy them to a non-volatile location to save them.</p></li></ul><p>Notice a few points:</p><ul><li><p>The only mandatory option switch is <em>-o fname</em>; it generates an SVG file named <em>fname.svg</em>.</p></li><li><p>There are two &#8216;types&#8217; of FG&#8217;s we can generate:</p><ul><li><p><em>graph</em> [default]: Produce an FG (X axis is NOT time, merges stacks). This type&#8217;s good for performance outliers (who's eating CPU? using max stack?); works well for multi-threaded apps.</p></li><li><p><em>chart </em>:<em> </em>Produce a <strong>flame chart &#8211; it&#8217;s </strong>sorted <strong>by time</strong>, do not merge stacks. Good for seeing all calls; works well for single-threaded apps.</p></li></ul></li><li><p>You can optionally specify a particular process (by -p PID) to profile, change the style to icicle, and set the profiling frequency.</p></li><li><p>The metadata and the SVG is stored under /tmp; <em>copy it to a non-volatile location if you want it saved!</em></p></li></ul><p>(Do read <em><a href="https://github.com/kaiwan/L5_user_debug/tree/main/flamegraph#readme">README.md</a></em> as well. Hey, this wrapper&#8217;s lightly tested; please help me (and everyone!) out by raising <em>Issues</em>, as and when you come across them!)</p><p><em><strong>Tip:</strong></em> Try the speedscope.app site to interact with your FlameGraph!</p><h1>Flame Graphs: Caveats/Issues</h1><ul><li><p>Frame Pointers being present helps get good stack traces, BUT the <em>-fomit-frame-pointer</em> is the typical GCC flag passed!</p><ul><li><p>Possible exception case is the Linux kernel itself; it has intelligent algorithms to emit accurate stack trace even in the absence of frame pointers.</p></li></ul></li><li><p><em>Symbols are required </em>(can use a separate symbol file). A side effect of no symbols may be ill-formed (or close to zero) stack traces.</p></li><li><p>VMs may not support the PMCs (performance measurement counters) that perf requires; in that case, FGs (or perf) don&#8217;t really work well.</p></li></ul><h1>Bonus material</h1><p><a href="https://www.brendangregg.com/Perf/linux_observability_tools.png">B Gregg&#8217;s Linux Performance Observability Tools diagram </a>across the stack!</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IiyC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IiyC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 424w, https://substackcdn.com/image/fetch/$s_!IiyC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 848w, https://substackcdn.com/image/fetch/$s_!IiyC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 1272w, https://substackcdn.com/image/fetch/$s_!IiyC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IiyC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png" width="1134" height="852" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:852,&quot;width&quot;:1134,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!IiyC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 424w, https://substackcdn.com/image/fetch/$s_!IiyC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 848w, https://substackcdn.com/image/fetch/$s_!IiyC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 1272w, https://substackcdn.com/image/fetch/$s_!IiyC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F672597db-e7f6-4c4d-b3a7-5dd7acfd29d1_1134x852.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><em>Tips</em></h1><ul><li><p>With <strong>[e]BPF</strong> becoming a powerhouse for many things, including observability, do look up equivalent eBPF tooling as well: <a href="https://www.brendangregg.com/ebpf.html">https://www.brendangregg.com/ebpf.html</a> (a similar diagram&#8217;s here!).</p></li><li><p>Also be sure to check out B Gregg&#8217;s (and others) utility package wrappers: <strong>perf-tools </strong>and <strong>bpfcc-tools</strong>.</p></li><li><p>Don&#8217;t ignore systemd&#8217;s systemd-analyze tool (boot-time).</p></li><li><p>Perf: simply running <em>sudo perf top </em>is itself useful to find outliers; I keep a couple of aliases as well:</p></li></ul><pre><code>alias ptop='sudo perf top --sort pid,comm,dso,symbol 2&gt;/dev/null'
alias ptopv='sudo perf top -r 80 -f 99 --sort pid,comm,dso,symbol \
--demangle-kernel -v --call-graph dwarf,fractal 2&gt;/dev/null'</code></pre><p></p><div><hr></div><p>If you enjoyed reading this article, check out Kaiwan&#8217;s book <a href="https://www.packtpub.com/en-us/product/linux-kernel-programming-9781803232225">Linux Kernel Programming</a>!</p>]]></content:encoded></item><item><title><![CDATA[Bash vs Python in Cloud Infrastructure]]></title><description><![CDATA[By Donald Tevault]]></description><link>https://packtcloudpro.substack.com/p/bash-vs-python-in-cloud-infrastructure</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/bash-vs-python-in-cloud-infrastructure</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Mon, 26 May 2025 14:28:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1aeec429-5485-44c1-811b-3f758c96dcea_1536x778.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This week&#8217;s CloudPro is a guest special from <strong><a href="https://www.youtube.com/@beginlinuxguru7354">Donald Tevault</a></strong>, the author of <em><a href="https://www.packtpub.com/en-us/product/the-ultimate-linux-shell-scripting-guide-9781835463154">The Ultimate Linux Shell Scripting Guide</a></em>.</p><p>He&#8217;s written today's newsletter on <strong>Bash vs Python in Cloud Infrastructure, </strong>and why shell scripting still wins in a bunch of real-world cases. He compares real tasks in both languages and shows how often Bash just gets you there faster, with less setup and fewer surprises.</p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><div><hr></div><h1><strong>Bash vs Python in Cloud Infrastructure</strong></h1><h3><strong>by Donald Tevault</strong></h3><p>Python is a great programming language, and you can do a lot of awesome stuff with it.</p><p>However, you might at times find that Python is more than you need, or more than you can easily learn. For such jobs, you might want to consider shell scripting instead.</p><p>Let&#8217;s look at some specific reasons:</p><p>To begin with, Python might not be installed on every workstation, server, IoT device, or container that you need to administer.</p><p>On the other hand, every Linux, Unix, or Unix-like system that you&#8217;ll encounter has a shell already installed. Apart from bash, you&#8217;ll find Bourne Shell on BSD-type systems, and lightweight shells such as ash or dash on Linux for IoT devices.</p><p>Now, let&#8217;s say that you have a Linux-based IoT device and you need to parse through its webserver logs. The tools you&#8217;ll need to do this with shell scripting are already there, but Python likely isn&#8217;t.</p><h1>Shell Script Portability versus Python Portability</h1><p>The difference between bash and the other shells that I mentioned is that bash has some advanced features that the other shells lack. If you know that you&#8217;ll only need to run your scripts in a bash environment, then you can definitely take advantage of the extra bash features.</p><p>But, by avoiding the bash-specific features, you can create shell scripts that will run on a wide variety of shells, including bash, ash, dash, or Bourne Shell. Fortunately, that&#8217;s not as hard as it would seem. For example, you can create variable arrays in bash, but not in the other shells. If you need cross-shell portability but also need the benefits of using an array, you can easily create a construct that simulates an array, and that has the same functionality. It&#8217;s easy-peasy once you know how.</p><p>One portability problem with Python involves Python&#8217;s use of programming libraries that might or might not be installed on every device on which the Python script needs to run. In fact, you might have encountered this problem yourself if you&#8217;ve ever downloaded a Python script from GitHub. If you&#8217;re not a Python expert, it might take you a while to figure out how to install all of the required libraries.</p><p>With shell scripting, you don&#8217;t need to worry about libraries, because shell scripts use the command-line utilities that already come installed on pretty much every Linux, Unix, or Unix-like system. Another problem is that scripts that were created for the old Python 2 aren&#8217;t always compatible with the new Python 3.</p><p>Next, let&#8217;s talk about something that&#8217;s especially important to me personally.</p><h1>The Shell Scripting Learning Curve versus the Python Learning Curve</h1><p>If you&#8217;re a DevOps person, you&#8217;ve likely already mastered Python. But, if you&#8217;re more into systems administration, there&#8217;s a good chance that you haven&#8217;t had much experience with Python. Fear not, because even if you&#8217;re lousy with learning programming languages, as I am, you can still learn how to do some awesome things with old-fashioned shell scripting. Even if you do know Python, you might find that certain jobs can be accomplished more quickly and easily with shell scripting than with Python.</p><p>For example, here&#8217;s the script that I use to update and shut down the OpenMandriva workstation that I&#8217;m using right now:</p><pre><code><code>#!/bin/bashdnf -y distro-sync &amp;&amp; shutdown now</code></code></pre><p>All this shell script contains is just the commands that I would normally run from the command line. With shell scripting, no coding skill at all is required for this.</p><p>Working with text files is way easier with shell scripting. Let&#8217;s take this text file with a listing of classic automobiles:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oJrh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oJrh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oJrh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oJrh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oJrh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oJrh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg" width="1316" height="876" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:876,&quot;width&quot;:1316,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:255681,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/169140725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oJrh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oJrh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oJrh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oJrh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c1d6084-e303-435c-a777-d239fffdb225_1316x876.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The fields in this file represent the make, model, year, mileage in thousands of miles, and U.S. dollar value of each car. Now, let&#8217;s say we want to sort this file alphabetically and save the output to a new file. Here&#8217;s how you could do it with Python:</p><pre><code>#!/usr/bin/python 

def sort_file_content(in_path, out_path): 
    lines = [] 

    with open(in_path) as in_f: 
        for line in in_f: 
            lines.append(line) 

    lines.sort() 

    with open(out_path, 'w') as out_f: 
        for line in lines: 
            out_f.writelines(line) 

 
if __name__ == "__main__": 
    input_file = "autos.txt" 
    output_file = "sorted_autos.txt" 
    sort_file_content(input_file, output_file) </code></pre><p>Here&#8217;s how you&#8217;d do it with a shell script: </p><pre><code><em>#!/bin/bash sort autos.txt &gt; sorted_autos.txt</em></code></pre><p>Either way, we get the same results, which look like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rwKd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rwKd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rwKd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rwKd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rwKd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rwKd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg" width="1314" height="871" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:871,&quot;width&quot;:1314,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:257290,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/169140725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rwKd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 424w, https://substackcdn.com/image/fetch/$s_!rwKd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 848w, https://substackcdn.com/image/fetch/$s_!rwKd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!rwKd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8013f56-7a63-44ae-a2f1-60978ce12edc_1314x871.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I think you see that doing this with shell scripting is way faster and easier.</p><p>Finally, let&#8217;s see how shell scripting can help us with cloud operations.</p><h1>Shell Scripting for Cloud Operations</h1><p>Let&#8217;s say that you have a web server that&#8217;s running on either a VPS or a remote IoT device, and you want a list of IP addresses of clients that have accessed it, along with status codes and number of bytes transferred. Here&#8217;s a Python script that you might use for that:</p><pre><code>#!/usr/bin/python

import sys
from dataclasses import dataclass

@dataclass(frozen = True)
class LogEntry:
    ip_address : str
    n_bytes : int
    status_code : int

def main(args):
    file_path = args[0]
    entries = parse_log_file(file_path)
    for e in entries:
        print(e)

def parse_log_file(file_path):
    try:
        with open(file_path) as log_file:
            return [parse_log_line(line) for line in log_file]
    except OSError:
        abort(f'File not found: {file_path}')

def parse_log_line(line):
    try:
        xs = line.split()
        return LogEntry(xs[0], int(xs[9]), int(xs[8]))
    except IndexError:
        abort(f'Invalid log file format: {file_path}')

def abort(msg):
    print(msg, file = sys.stderr)
    exit(1)

if __name__ == '__main__':
    main(sys.argv[1:])</code></pre><p>Here&#8217;s a bash script that does the same thing:</p><pre><code>#!/bin/bash

echo "ip address, status code, number of bytes"
cut -d" " -f 1,10,9 /var/log/httpd/access_log</code></pre><p>That&#8217;s right. A simple, two-line shell script can take the place of that entire Python script. At any rate, the output of the shell script will look something like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cWz2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cWz2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cWz2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cWz2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cWz2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cWz2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg" width="1456" height="690" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:690,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:227062,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/169140725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cWz2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 424w, https://substackcdn.com/image/fetch/$s_!cWz2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 848w, https://substackcdn.com/image/fetch/$s_!cWz2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!cWz2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4426a331-5376-4d79-9862-6b3069963294_1491x707.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>You can also create shell scripts to a`utomate management of your cloud services. For example, here&#8217;s a script that can start or stop an EC2 instance on Amazon Web Services:</p><pre><code>#!/bin/bash
read -p "Enter the EC2 instance ID: " INSTANCE_ID

read -p "Do you want to start or stop the instance? (start/stop): " ACTION

if [[ "$ACTION" == "start" ]]; then
  echo "Starting instance $INSTANCE_ID..."
  aws ec2 start-instances --instance-ids $INSTANCE_ID
elif [[ "$ACTION" == "stop" ]]; then
  echo "Stopping instance $INSTANCE_ID..."
  aws ec2 stop-instances --instance-ids $INSTANCE_ID
else
  echo "Oops! Please type 'start' or 'stop'."
fi</code></pre><p>When you run the script, just type in the instance ID at the first prompt, and then type either <em>start </em>or <em>stop </em>at the second prompt. This is a lot easier than typing the entire <em>aws</em> command every time you need to start or stop an instance. You can automate almost any other <em>aws</em> task in the same manner.</p><h1>Conclusion</h1><p>To be sure, shell scripting has its limitations. For large, complex programs that require high performance, Python, or perhaps even a compiled language such as C, would be much better. But as I&#8217;ve just demonstrated, there are many times when bash scripting is definitely a much better choice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kTuk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kTuk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kTuk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kTuk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kTuk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kTuk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg" width="1309" height="699" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:699,&quot;width&quot;:1309,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:200352,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://packtcloudpro.substack.com/i/169140725?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kTuk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kTuk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kTuk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kTuk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc71269-f421-408c-862b-05bc30ab9424_1309x699.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To learn more about shell scripting, check out <a href="https://www.packtpub.com/en-us/product/the-ultimate-linux-shell-scripting-guide-9781835463154">The Ultimate Linux Shell Scripting Guide</a> by Donald.</p><div><hr></div><p>Hi again, Shreyans here.</p><p>Big thanks to Donald for putting this together. If you liked the piece, you&#8217;ll love his <a href="https://www.youtube.com/@beginlinuxguru7354">YouTube channel</a> where he walks through practical Linux topics.</p><p>He&#8217;s also written two other books worth your time:</p><p><a href="https://www.packtpub.com/en-us/product/linux-service-management-made-easy-with-systemd-9781801815031">Linux Service Management Made Easy with systemd</a></p><p><a href="https://www.packtpub.com/en-us/product/mastering-linux-security-and-hardening-9781837632626">Mastering Linux Security and Hardening</a></p><p>That&#8217;s all for now. Hope you found something useful in this issue!</p><p>Cheers,</p><p>Shreyans</p>]]></content:encoded></item><item><title><![CDATA[CloudPro #69: AI agents invade observability]]></title><description><![CDATA[Join Generative AI In Action now with a Full Event Pass for just $239.99&#8212;40% off the regular price&#8212;with code FLASH40.]]></description><link>https://packtcloudpro.substack.com/p/cloudpro-69-ai-agents-invade-observability</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/cloudpro-69-ai-agents-invade-observability</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Fri, 18 Oct 2024 14:26:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BLrD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://packt.link/W2Q1D" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BLrD!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 424w, https://substackcdn.com/image/fetch/$s_!BLrD!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 848w, https://substackcdn.com/image/fetch/$s_!BLrD!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 1272w, https://substackcdn.com/image/fetch/$s_!BLrD!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BLrD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png" width="600" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Sponsored&quot;,&quot;title&quot;:&quot;Sponsored&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://packt.link/W2Q1D&quot;,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Sponsored" title="Sponsored" srcset="https://substackcdn.com/image/fetch/$s_!BLrD!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 424w, https://substackcdn.com/image/fetch/$s_!BLrD!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 848w, https://substackcdn.com/image/fetch/$s_!BLrD!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 1272w, https://substackcdn.com/image/fetch/$s_!BLrD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa91de1c5-fe64-4a3f-8079-5ac3703e9805_600x300.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Join&nbsp;<strong><a href="https://packt.link/W2Q1D">Generative&nbsp;AI In&nbsp;Action</a></strong>&nbsp;now with&nbsp;a&nbsp;Full Event Pass for just $239.99&#8212;<strong>40%</strong> off the regular price&#8212;with code&nbsp;<strong>FLASH40.</strong>&nbsp;</p><p>BOOK TODAY AT $239.99 <s>$399.99</s>&nbsp;</p><p><strong>Three Reasons Why You Cannot Miss This Event:&nbsp;</strong></p><p>-Network with 25+ Leading AI Experts</p><p>-Gain Insights from 30+ Dynamic Talks and Hands-On Sessions</p><p>-Engage with Experts and Peers through 1:1 Networking, Roundtables, and AMAs</p><p><strong>Act fast&#8212;this FLASH SALE is only for a limited number of seats!</strong></p><p><strong><a href="https://packt.link/W2Q1D">CLAIM NOW- LIMITED SEATS</a></strong></p><p></p><div><hr></div><p>Welcome to the latest edition of <strong>CloudPro</strong>!</p><p>Today we will talk about:</p><p><strong>&#11088;Masterclass</strong></p><p><a href="https://monitoring2.substack.com/p/ai-agents-invade-observability">AI agents invade observability: snake oil or the future of SRE?</a></p><p><a href="https://www.reddit.com/r/devops/comments/1f22db6/i_created_devops_interview_preparation_lab_based/">I created DevOps Interview Preparation Lab based on Interviews from Microsoft, Airbnb, Accenture, and others</a></p><p><a href="https://www.devopsdigest.com/qas-dead-where-do-we-go-from-here">QA's Dead: Where Do We Go From Here?</a></p><p><a href="https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/">Convert OpenTelemetry Traces to Metrics using SpanMetrics Connector</a></p><p><a href="https://scaleops.com/blog/reduce-network-traffic-costs-in-your-kubernetes-cluster/">Reduce Network Traffic Costs in Your Kubernetes Cluster</a></p><p><strong>&#128269;Secret Knowledge</strong></p><p><a href="https://fractaledmind.github.io/2024/04/15/sqlite-on-rails-the-how-and-why-of-optimal-performance/">SQLite on Rails</a></p><p><a href="https://mccue.dev/pages/8-16-24-just-use-postgres">Just use Postgres</a></p><p><a href="https://chollinger.com/blog/2024/08/why-i-still-self-host-my-servers-and-what-ive-recently-learned/">Why I still Self-Host my Servers</a></p><p><a href="https://www.benkuhn.net/progessays/">Essays on programming I think about a lot</a></p><p><a href="https://razorops.com/blog/a-detailed-guide-to-cron-jobs">A detailed guide to cron jobs</a></p><p><strong>&#9889;Techwave</strong></p><p><a href="https://cloud.google.com/blog/products/ai-machine-learning/fine-tuning-gemma-models">How Google fine-tuned Gemma model for Flipkart</a></p><p><a href="https://aws.amazon.com/about-aws/whats-new/2024/10/general-availability-console-to-code-generate-code/">AWS has launched Console to Code: tool that generates code</a></p><p><a href="https://aws.amazon.com/about-aws/whats-new/2024/10/conversations-whatsapp-aws-end-user-messaging-social/">Bring your conversations to WhatsApp with AWS End User Messaging Social</a></p><p><a href="https://cloud.google.com/blog/products/data-analytics/introducing-pipe-syntax-in-bigquery-and-cloud-logging">Introducing pipe syntax in BigQuery and Cloud Logging</a></p><p><a href="https://cloud.google.com/blog/products/databases/database-center-preview-now-open-to-all-customers">GCloud Database Center: AI-powered, unified fleet management solution preview now open to all customers</a></p><p><strong>&#128736;&#65039;Hackhub</strong></p><p><a href="https://github.com/cloud-agnost/agnost-gitops">agnost-gitops:</a> Open source GitOps platform running on Kubernetes clusters</p><p><a href="https://codeberg.org/hjacobs/kube-downscaler">kube-downscaler:</a> Scale down Kubernetes deployments after work hours</p><p><a href="https://github.com/StevenSmiley/aws-mine">AWS Mine</a>: honey token system designed to generate AWS access keys</p><p><a href="https://github.com/harsxv/tinystatus">TinyStatus</a>:&nbsp;A simple, customizable status page generator that monitors and displays the status of services on a responsive web page.</p><p><a href="https://github.com/dbcli/litecli">Litecli</a>:&nbsp;A command-line client for SQLite databases, featuring auto-completion and syntax highlighting.</p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p></p><div><hr></div><p>Looking to build, train, deploy, or implement Generative AI?&nbsp;</p><p>Meet <strong><a href="https://track.presspool.ai/?utm_source=332&amp;utm_medium=cpc&amp;utm_id=281">Innodata</a></strong> &#8212; offering high-quality solutions for developing and implementing industry-leading generative AI, including:&nbsp;</p><p>With 5,000+ in-house SMEs and expansion and localization supported across 85+ languages, <strong><a href="https://track.presspool.ai/?utm_source=332&amp;utm_medium=cpc&amp;utm_id=281">Innodata drives AI initiatives for enterprises globally</a></strong>.&nbsp;</p><p><strong><a href="https://track.presspool.ai/?utm_source=332&amp;utm_medium=cpc&amp;utm_id=281">Learn More</a></strong></p><div><hr></div><h1><strong>&#11088;MasterClass: Tutorials &amp; Guides</strong></h1><p><a href="https://monitoring2.substack.com/p/ai-agents-invade-observability">AI agents invade observability: snake oil or the future of SRE?</a></p><p>This article explores how AI, particularly agentic AI, is transforming the field of observability and monitoring. Traditional monitoring tools use dashboards, alerts, and data insights to help developers and operators manage system health, but new AI agents are designed to act more like team members. These agents, powered by large language models (LLMs), can analyze operational data and automate tasks like incident response and maintenance.</p><p><a href="https://www.reddit.com/r/devops/comments/1f22db6/i_created_devops_interview_preparation_lab_based/">I created DevOps Interview Preparation Lab based on Interviews from Microsoft, Airbnb, Accenture, and others</a></p><p>This hands-on lab is designed to help you prepare for DevOps interviews by walking you through key tools like Python web apps, Docker, Kubernetes, Helm Charts, GitHub Actions for CI/CD, and Ingress Controllers. It's practical, not theory-based, and helps you build a project from scratch through containerization, deployment, and CI/CD setup.</p><p><a href="https://www.devopsdigest.com/qas-dead-where-do-we-go-from-here">QA's Dead: Where Do We Go From Here?</a></p><p>&nbsp;The concept of traditional QA (Quality Assurance) has evolved, shifting responsibility for software quality from a separate QA team to developers themselves. In the old model, QA was a distinct stage that came after development, causing delays, inefficiencies, and higher costs due to late bug detection. Now, with agile methodologies and advanced tooling, testing is integrated throughout the development process. Developers take ownership of quality, using tools like automated testing, CI/CD pipelines, and instant feedback mechanisms. QA isn't dead; instead, it has become an essential part of every developer's role, with QA professionals either moving into technical automation roles or higher-level strategic positions.</p><p><a href="https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/">Convert OpenTelemetry Traces to Metrics using SpanMetrics Connector</a></p><p>The SpanMetrics Connector in OpenTelemetry converts trace data into actionable metrics, which is useful when robust tracing is in place but metrics instrumentation is lacking. It works by extracting metrics from spans (units of trace data) and aggregating them into key performance indicators like request counts, errors, and durations. This unified approach simplifies observability by reducing the need for separate instrumentation for traces and metrics. By configuring the connector, developers can easily generate custom metrics, optimize system performance, and enhance monitoring without increasing overhead or complexity.</p><p><a href="https://scaleops.com/blog/reduce-network-traffic-costs-in-your-kubernetes-cluster/">Reduce Network Traffic Costs in Your Kubernetes Cluster</a></p><p>To reduce network traffic costs in a Kubernetes cluster, it's important to minimize cross-availability zone (AZ) traffic, which can increase latency and lead to higher data transfer costs. Strategies to reduce this include intelligent node placement, ensuring related pods are located in the same AZ to avoid unnecessary data transfer. Topology-aware routing ensures traffic is directed within the same AZ, while using local persistent volumes keeps data close to the pods accessing it. Pod topology spread constraints help evenly distribute pods across zones, further minimizing cross-AZ communication and improving both performance and cost-efficiency.</p><h1><strong>&#128269;Secret Knowledge: Learning Resources</strong></h1><p><a href="https://fractaledmind.github.io/2024/04/15/sqlite-on-rails-the-how-and-why-of-optimal-performance/">SQLite on Rails</a></p><p>Running SQLite on Rails can provide good performance, but out-of-the-box it isn&#8217;t optimized for high-concurrency production environments. This is mainly due to SQLite&#8217;s single-write locking mechanism, which can cause errors and bottlenecks when multiple threads attempt to write at the same time. However, by fine-tuning configurations&#8212;like setting immediate transactions, adjusting busy timeouts, and managing connection pools&#8212;Rails apps can achieve resilient performance. Advanced techniques, such as using custom busy handlers and write-ahead logging (WAL), further enhance concurrency and minimize delays, making SQLite on Rails a viable production option.</p><p><a href="https://mccue.dev/pages/8-16-24-just-use-postgres">Just use Postgres</a></p><p>When building a new application requiring persistent storage, Postgres should be your default choice. It highlights why other databases might not be ideal: SQLite is great for single-machine apps but limited for distributed systems, NoSQL databases like MongoDB require rigid access patterns, and newer databases like XTDB pose long-term risks. Postgres offers flexibility, scalability, and a rich ecosystem of tools, making it a reliable and efficient choice for most web applications without the trade-offs of other databases.</p><p><a href="https://chollinger.com/blog/2024/08/why-i-still-self-host-my-servers-and-what-ive-recently-learned/">Why I still Self-Host my Servers</a></p><p>Two reasons: independence and learning. Hosting own services lets the author stay free from corporate control and subscriptions while teaching valuable skills that benefit his career as a software engineer. From managing a Proxmox cluster and Pi-Hole DNS servers to troubleshooting outages and hardware issues, the experience forces him to dive deeper into the technical aspects of system administration. This continuous learning has proven useful in handling complex distributed systems at work. Despite the challenges, like hardware failures and occasional crashes, the lessons learned make it worthwhile.</p><p><a href="https://www.benkuhn.net/progessays/">Essays on programming I think about a lot</a></p><p>This passage highlights several key programming essays that have deeply impacted the author's thinking and engineering approach. These essays cover various topics, from understanding complex systems, choosing stable technology, and managing abstractions, to hiring strong engineering teams and designing scalable distributed systems. The recurring theme is thoughtful, pragmatic decision-making in software engineering, advocating for simplicity, clear abstraction boundaries, and understanding the deeper layers of technology. Each essay provides timeless insights, shaping the author's work habits, and the list invites others to explore and reflect on these ideas for themselves.</p><p><a href="https://razorops.com/blog/a-detailed-guide-to-cron-jobs">A detailed guide to cron jobs</a></p><p>A cron job is a scheduled task or command in Unix-based systems, like Linux and macOS, that automates repetitive processes such as backups, email sending, or database updates. Cron jobs use a specific time-based syntax to determine when and how often the task should run. This guide explains how to set up, edit, and manage cron jobs, including the syntax, adding new jobs, and checking their logs. It also covers methods for monitoring cron jobs, such as using logs, monitoring tools, and email alerts to ensure tasks run as expected without system issues.</p><h1><strong>&#9889;&nbsp;TechWave: Cloud News &amp; Analysis</strong></h1><p><a href="https://cloud.google.com/blog/products/ai-machine-learning/fine-tuning-gemma-models">How Google fine-tuned Gemma model for Flipkart</a></p><p>The blog describes the process of fine-tuning Gemma, an instruction-tuned AI model, for a conversational shopping assistant. It starts with data preparation using a subset of Flipkart&#8217;s product catalog, filtering for clothing items and generating Q&amp;A pairs based on product details. Fine-tuning was achieved using LoRA, a parameter-efficient method, with multiple iterations on both pre-trained and instruction-tuned models. The fine-tuning was scaled using multi-GPU setups on Google Kubernetes Engine (GKE). Hyperparameter tuning was also crucial to optimize model performance, ensuring the chatbot provides accurate, contextual responses.</p><p><a href="https://aws.amazon.com/about-aws/whats-new/2024/10/general-availability-console-to-code-generate-code/">AWS has launched Console to Code: tool that generates code</a></p><p>AWS has launched "Console to Code," a tool that simplifies the process of moving from prototyping in the AWS Management Console to writing production-ready code. This tool automatically captures actions taken in the console and generates code in formats like CLI, CloudFormation, and CDK, following AWS best practices. It helps users quickly create reusable, automation-friendly code without needing to manually write it, streamlining the transition from console use to Infrastructure-as-Code (IaC). This service is available for key AWS services like EC2, VPC, and RDS.</p><p><a href="https://aws.amazon.com/about-aws/whats-new/2024/10/conversations-whatsapp-aws-end-user-messaging-social/">Bring your conversations to WhatsApp with AWS End User Messaging Social</a></p><p>AWS has introduced "End User Messaging Social," allowing developers to send messages to their users on WhatsApp, the world&#8217;s most popular messaging app. With this tool, developers can create rich, interactive messaging experiences that include multimedia content. WhatsApp can now be used alongside SMS and Push notifications, giving businesses multiple ways to reach their audience. Setting up WhatsApp messaging is easy, with options to create a new WhatsApp Business Account or link an existing one, all within the AWS console.</p><p><a href="https://cloud.google.com/blog/products/data-analytics/introducing-pipe-syntax-in-bigquery-and-cloud-logging">Introducing pipe syntax in BigQuery and Cloud Logging</a></p><p>Google Cloud has introduced a new "pipe syntax" in BigQuery and Cloud Logging, designed to simplify log data queries. This new syntax uses a pipe symbol (|&gt;) to break down complex SQL queries into clear, easy-to-read steps, improving the readability and writability of log analysis tasks. With this innovation, users can quickly filter, aggregate, and explore log data, making it easier to extract insights. BigQuery&#8217;s enhanced performance features, like faster numeric search indexes and better handling of JSON data, further streamline log analysis. Pipe syntax is now available in preview.</p><p><a href="https://cloud.google.com/blog/products/databases/database-center-preview-now-open-to-all-customers">GCloud Database Center: AI-powered, unified fleet management solution preview now open to all customers</a></p><p>Google Cloud has launched Database Center, an AI-powered solution that simplifies managing large, complex database fleets. It provides a unified interface for monitoring and optimizing databases like Cloud SQL, AlloyDB, and Spanner. Database Center helps businesses detect and address performance and security issues with proactive recommendations, ensuring smoother operations and better compliance with industry standards. It also includes AI-powered chat for quick troubleshooting and optimization insights, allowing users to improve performance, reduce costs, and strengthen security across their entire database landscape.</p><h1><strong>&#128736;&#65039;HackHub: Best Tools for Cloud</strong></h1><p><a href="https://github.com/cloud-agnost/agnost-gitops">agnost-gitops: Open source GitOps platform running on Kubernetes clusters</a></p><p>Agnost GitOps is an open-source platform for continuous deployment (CD) on Kubernetes clusters. It automates the process of building, deploying, and managing applications by connecting your GitHub, GitLab, or Bitbucket repository. When you push new code, Agnost builds a Docker image using Kaniko and deploys it to your Kubernetes cluster.</p><p><a href="https://codeberg.org/hjacobs/kube-downscaler">kube-downscaler: Scale down Kubernetes deployments after work hours</a></p><p>Kube-downscaler is a Kubernetes tool designed to automatically scale down or pause workloads (like Deployments, StatefulSets, and HorizontalPodAutoscalers) during non-work hours, helping organizations save on cloud costs. It operates based on a configurable schedule of uptime and downtime, using Kubernetes annotations or command-line options.</p><p><a href="https://github.com/StevenSmiley/aws-mine">AWS Mine</a>: honey token system designed to generate AWS access keys</p><p>The "aws-mine" project is a honey token system designed to generate AWS access keys that can be strategically placed in various locations to lure and detect potential attackers. If someone attempts to use these keys, the system sends a notification within about four minutes, allowing you to investigate the source and assess whether the asset has been compromised.</p><p><a href="https://github.com/harsxv/tinystatus">TinyStatus</a>:&nbsp;A simple, customizable status page generator that monitors and displays the status of services on a responsive web page.</p><p>It checks the status of HTTP endpoints, pings hosts, and monitors open ports, displaying results on a clean and responsive web page. The system is configured using YAML files, and it supports both light and dark themes, as well as incident history tracking.</p><p><a href="https://github.com/dbcli/litecli">Litecli</a>:&nbsp;A command-line client for SQLite databases, featuring auto-completion and syntax highlighting.</p><p>Upon first use, LiteCLI generates a configuration file that can be customized for user preferences. It streamlines database interactions by predicting commands and formatting output, enhancing the command-line experience for SQLite users.</p>]]></content:encoded></item><item><title><![CDATA[CloudPro #67: Supercharge Your Kubernetes Workflow with Essential Tools: Starship, Kubectx, Kubecolor, and K9s]]></title><description><![CDATA[Chrome Vulnerability Reward Program (VRP) has updated its rewards]]></description><link>https://packtcloudpro.substack.com/p/cloudpro-67-supercharge-your-kubernetes</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/cloudpro-67-supercharge-your-kubernetes</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Fri, 04 Oct 2024 16:02:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5qqS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the latest edition of <strong>CloudPro</strong>! Today, we&#8217;ll talk about:</p><p><strong>&#11088;Masterclass</strong></p><p>[Sponsored] <a href="https://web.growthschool.io/ADO1">Become an AI Powered Professional. Free 3-hour ChatGPT and AI workshop for Professionals</a></p><p><a href="https://www.perfectscale.io/blog/preemptible-pods">Preemptible pods: Optimizing Kubernetes node utilization</a></p><p><a href="https://medium.com/@petolofsson/supercharge-your-kubernetes-workflow-with-essential-tools-starship-kubectx-kubecolor-and-k9s-c2ce5eb88d23">Supercharge Your Kubernetes Workflow with Essential Tools: Starship, Kubectx, Kubecolor, and K9s</a></p><p><a href="https://dev.to/mrshimpi17/exploring-helm-template-dictionary-objects-syntax-evolution-and-best-practices-ikk">Exploring Helm template dictionary objects: Syntax evolution and best practices</a></p><p><a href="https://dev.to/pradumnasaraf/dockerizing-a-golang-api-with-mysql-and-adding-docker-compose-support-9b1">Dockerizing a Golang API with MySQL and adding Docker Compose Support</a></p><p><a href="https://dev.to/hkhelil/karmada-deep-dive-into-managing-multiple-aks-clusters-1j08">Karmada: Deep dive into managing multiple AKS clusters</a></p><p><strong>&#128269;Secret Knowledge</strong></p><p><a href="https://dev.to/aws-builders/zero-downtime-deployment-in-aws-with-tofuterraform-and-sam-14d6">Zero Downtime Deployment in AWS with Tofu</a></p><p><a href="https://ittavern.com/cron-jobs-on-linux-comprehensive-guide/">Cron Jobs on Linux</a></p><p><a href="https://monzo.com/blog/how-we-run-migrations-across-2800-microservices">How To Run Migrations Across 2,800 Microservices</a></p><p><a href="https://hamzabouissi.github.io/posts/transform-aws-1/">Transform AWS exam generator architecture to open source</a></p><p><a href="https://aws.amazon.com/blogs/containers/16532-2/">How to Run WebAssembly on Amazon EKS</a></p><p><strong>&#9889;Techwave</strong></p><p><a href="https://bughunters.google.com/blog/5302044291629056/chrome-vrp-reward-updates-to-incentivize-deeper-research">Chrome Vulnerability Reward Program (VRP) has updated its rewards</a></p><p><a href="https://hackingthe.cloud/aws/exploitation/Misconfigured_Resource-Based_Policies/exploiting_misconfigured_gitlab_oidc_aws_iam_roles/">How misconfigured AWS IAM roles using GitLab's OpenID Connect (OIDC) can allow unauthorized users to assume roles</a></p><p><a href="https://aws.amazon.com/blogs/developer/preview-release-of-the-migration-tool-for-the-aws-sdk-for-java-2-x/">Preview Release of the Migration Tool for the AWS SDK for Java 2.x</a></p><p><a href="https://aws.amazon.com/blogs/opensource/amazons-exabyte-scale-migration-from-apache-spark-to-ray-on-amazon-ec2/">Amazon&#8217;s Exabyte-Scale Migration from Apache Spark to Ray on Amazon EC2</a></p><p><a href="https://valkey.io/blog/unlock-one-million-rps/">Unlock 1 Million RPS: Experience Triple the Speed with Valkey</a></p><p><strong>&#128736;&#65039;Hackhub</strong></p><p><a href="https://github.com/substratusai/kubeai">kubeai: Private Open AI on Kubernetes</a></p><p><a href="https://github.com/AvitalTamir/cyphernetes">cyphernetes: A Kubernetes Query Language</a></p><p><a href="https://github.com/chartdb/chartdb">chartdb: Free and open-source database diagrams editor, visualize and design your DB with a single query.</a></p><p><a href="https://github.com/stack-auth/stack">stack-auth: Open-source Auth0/Clerk alternative</a></p><p><a href="https://github.com/mariadb-operator/mariadb-operator">mariadb-operator: Run and operate MariaDB in a cloud native way</a></p><p></p><p>&#128161;<strong>Get 30% off on CloudPro Book of the Week: </strong><a href="https://www.packtpub.com/en-us/product/aws-devops-simplified-9781837634460">AWS DevOps Simplified</a></p><p></p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p></p><div><hr></div><h1><strong><a href="https://packt.link/W2Q1D">Last Chance! For the next 48 hours only, save $150 on your full event pass!</a></strong></h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://packt.link/W2Q1D" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5qqS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 424w, https://substackcdn.com/image/fetch/$s_!5qqS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 848w, https://substackcdn.com/image/fetch/$s_!5qqS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5qqS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5qqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png" width="600" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/daa821c0-8149-4576-a700-1d8df202d506_600x300.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:300,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Sponsor&quot;,&quot;title&quot;:&quot;Sponsor&quot;,&quot;type&quot;:null,&quot;href&quot;:&quot;https://packt.link/W2Q1D&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Sponsor" title="Sponsor" srcset="https://substackcdn.com/image/fetch/$s_!5qqS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 424w, https://substackcdn.com/image/fetch/$s_!5qqS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 848w, https://substackcdn.com/image/fetch/$s_!5qqS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 1272w, https://substackcdn.com/image/fetch/$s_!5qqS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdaa821c0-8149-4576-a700-1d8df202d506_600x300.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Imagine being part of 10+ Power Talks, 12+ Hands-On Workshops, and 3 Interactive Roundtables&#8212;while networking with 30+ top industry leaders and hundreds of tech professionals from across the globe. This is your opportunity to dive into cutting-edge AI solutions at the <strong><a href="https://packt.link/W2Q1D">Generative AI in Action 2024 Conference.</a></strong><br>&nbsp;<br>It's all happening on November 11-13 (LIVE, Virtual) - prices increase permanently on Saturday!</p><p><strong><a href="https://packt.link/W2Q1D">BOOK YOUR SEAT NOW</a></strong> before prices go up!</p><p>Use code <strong><a href="https://packt.link/W2Q1D">LASTCHANCE40</a></strong> at checkout</p><p><strong><a href="https://packt.link/W2Q1D">BOOK NOW AT <s>$399.99</s> $239.99</a></strong></p><div><hr></div><h1><strong>&#11088;MasterClass: Tutorials &amp; Guides<br></strong></h1><p><a href="https://www.perfectscale.io/blog/preemptible-pods">Preemptible pods: Optimizing Kubernetes node utilization</a></p><p>Preemptible Pods in Kubernetes enable efficient resource management by allowing you to assign priorities to different workloads through pod priority and preemption mechanisms. This means that critical applications are guaranteed the resources they need because higher-priority pods can preempt, or evict, lower-priority ones when resources are scarce. By implementing PriorityClasses and configuring pods accordingly, you ensure that essential services remain responsive and that your cluster optimizes node utilization.</p><p><a href="https://medium.com/@petolofsson/supercharge-your-kubernetes-workflow-with-essential-tools-starship-kubectx-kubecolor-and-k9s-c2ce5eb88d23">Supercharge Your Kubernetes Workflow with Essential Tools: Starship, Kubectx, Kubecolor, and K9s</a></p><p>To enhance your Kubernetes workflow, using tools like Starship, Kubectx, Kubecolor, and K9s can significantly improve efficiency. Starship provides a customizable, fast shell prompt that shows key info like cluster and namespace, while Kubectx and Kubens allow quick switching between clusters and namespaces. Kubecolor adds color to kubectl output for better readability, and K9s offers a terminal-based UI to manage and visualize Kubernetes resources easily.</p><p><a href="https://dev.to/mrshimpi17/exploring-helm-template-dictionary-objects-syntax-evolution-and-best-practices-ikk">Exploring Helm template dictionary objects: Syntax evolution and best practices</a></p><p>Helm, the Kubernetes package manager, uses dictionary objects in its templating system to manage key-value pairs for application deployment. Initially, Helm syntax allowed for creating dictionaries in a single line, but this became cumbersome when handling many properties. Over time, a more efficient syntax evolved, using the `set` function to incrementally add properties to a dictionary without recreating it. Best practices for using Helm dictionaries include adding properties incrementally, avoiding reassignment to prevent data loss, maintaining consistent naming conventions, and thoroughly testing templates to ensure correct Kubernetes manifest generation.</p><p><a href="https://dev.to/pradumnasaraf/dockerizing-a-golang-api-with-mysql-and-adding-docker-compose-support-9b1">Dockerizing a Golang API with MySQL and adding Docker Compose Support</a></p><p>Dockerizing a Golang API with MySQL simplifies the process of developing and testing APIs locally by containerizing both the API and database. First, you create a Dockerfile for the Go API using best practices like lightweight base images, multi-stage builds, creating a binary, and optimizing Docker layers. This ensures a smaller and more efficient container. Then, to streamline managing both the API and MySQL containers, Docker Compose is used. A `compose.yml` file sets up both services, ensuring the API only starts once the MySQL database is ready, avoiding connection issues. This setup makes local development smoother and easier to replicate.</p><p><a href="https://dev.to/hkhelil/karmada-deep-dive-into-managing-multiple-aks-clusters-1j08">Karmada: Deep dive into managing multiple AKS clusters</a></p><p>Karmada (Kubernetes Armada) is a tool that simplifies managing multiple AKS (Azure Kubernetes Service) clusters by treating them like a single entity. It helps deploy applications across clusters while handling tasks like scheduling, resource propagation, and ensuring consistency. Karmada&#8217;s components&#8212;such as the API Server, Controller Manager, Scheduler, and Agent&#8212;work together to automate the deployment process. It supports advanced strategies like multi-cluster deployments, disaster recovery, and canary releases.</p><h1><strong>&#128269;Secret Knowledge: Learning Resources<br></strong></h1><p><a href="https://dev.to/aws-builders/zero-downtime-deployment-in-aws-with-tofuterraform-and-sam-14d6">Zero Downtime Deployment in AWS with Tofu</a></p><p>Zero Downtime Deployment in AWS is a strategy to update applications without causing service interruptions. By leveraging tools like OpenTofu, Terraform, and AWS SAM, developers can ensure seamless updates. Techniques like instance refreshes in Auto Scaling Groups (using OpenTofu), immutable infrastructure (Terraform + Ansible), and advanced deployment strategies like Blue/Green and Canary deployments enable applications to be updated while keeping them available to users. These approaches allow for gradual testing, automated rollbacks, and maintaining reliability.</p><p><a href="https://ittavern.com/cron-jobs-on-linux-comprehensive-guide/">Cron Jobs on Linux</a></p><p>Cron jobs in Linux are scheduled tasks that automate running scripts or commands at specific times or intervals, managed by the cron daemon. Common use cases include backups, updates, and system health checks. Users can create, view, or edit cron jobs using the `crontab` command. Cron jobs are defined using a simple time-based syntax, where each job can run on a specific schedule (e.g., hourly, daily, or weekly). Cron jobs can be user-specific or system-wide, and their syntax supports flexible timing options like ranges, lists, and intervals.</p><p><a href="https://monzo.com/blog/how-we-run-migrations-across-2800-microservices">How To Run Migrations Across 2,800 Microservices</a></p><p>To handle migrations across 2,800 microservices, we use a centrally driven approach where a single team manages the entire process. This allows us to keep libraries up-to-date, maintain consistency, and automate the bulk of the changes, reducing coordination overhead and minimizing risks of failure. Our strategy relies on a monorepo structure, consistent technology (like Go), and powerful mass deployment tooling. We start by wrapping old libraries, automate common updates, handle edge cases manually, and control rollouts via config changes to ensure smooth transitions without downtime.</p><p><a href="https://hamzabouissi.github.io/posts/transform-aws-1/">Transform AWS exam generator architecture to open source</a></p><p>In this series, we aim to transform a serverless AWS architecture for an exam generator app into an open-source version. The original solution helps educators create curriculum-aligned assessments quickly, while students can take personalized quizzes with instant feedback. We'll replace key AWS services like Cognito, Lambda, DynamoDB, and Fargate with open-source alternatives and host everything on a Kubernetes cluster.</p><p><a href="https://aws.amazon.com/blogs/containers/16532-2/">How to Run WebAssembly on Amazon EKS</a></p><p>The article outlines the process of setting up a Wasm environment on Amazon EKS using tools like HashiCorp Packer and Terraform to create custom Amazon Machine Images (AMIs) and manage the infrastructure. It details how to build an EKS cluster, deploy example workloads using different Wasm runtimes (Spin and WasmEdge), and check if everything is working correctly. Finally, it offers instructions for cleaning up the resources after running the applications.</p><h1><strong>&#9889;&nbsp;TechWave: Cloud News &amp; Analysis</strong></h1><p><a href="https://bughunters.google.com/blog/5302044291629056/chrome-vrp-reward-updates-to-incentivize-deeper-research">Chrome Vulnerability Reward Program (VRP) has updated its rewards</a></p><p>Google's Chrome Vulnerability Reward Program (VRP) has updated its reward structure to encourage deeper research into Chrome's security vulnerabilities. As Chrome becomes more secure, finding impactful bugs has become harder. The new structure separates memory corruption bugs from other vulnerability types and offers higher rewards for more complex, well-documented reports, such as those demonstrating remote code execution (RCE) or memory corruption. The top reward for an RCE in a non-sandboxed process is now $250,000. These changes aim to incentivize thorough and high-quality bug reporting, ensuring Chrome remains secure.</p><p><a href="https://hackingthe.cloud/aws/exploitation/Misconfigured_Resource-Based_Policies/exploiting_misconfigured_gitlab_oidc_aws_iam_roles/">How misconfigured AWS IAM roles using GitLab's OpenID Connect (OIDC) can allow unauthorized users to assume roles</a></p><p>The article by Nick Frichette explains how misconfigured AWS IAM roles using GitLab's OpenID Connect (OIDC) can allow unauthorized users to assume roles. This occurs when the trust policy lacks restrictions on which specific GitLab groups or projects can access the role. By default, the AWS Console creates a vulnerable trust policy, making it possible for any GitLab user to exploit the misconfiguration. The article walks through how to generate a GitLab OIDC token and use it to assume a misconfigured role, highlighting the risks of default settings in AWS.</p><p><a href="https://aws.amazon.com/blogs/developer/preview-release-of-the-migration-tool-for-the-aws-sdk-for-java-2-x/">Preview Release of the Migration Tool for the AWS SDK for Java 2.x</a></p><p>AWS has released a preview of a migration tool to help developers transition from AWS SDK for Java 1.x to 2.x, as 1.x is now in maintenance mode. This tool uses OpenRewrite, an open-source code refactoring tool, to automate much of the migration process. It currently supports most service SDK clients, except for AmazonS3Client, TransferManager, and DynamoDBMapper, and helps reduce the time and effort needed for the upgrade. Developers can use this tool with Maven or Gradle projects, choosing between preview (dryRun) or actual (run) modes to apply the changes.</p><p><a href="https://aws.amazon.com/blogs/opensource/amazons-exabyte-scale-migration-from-apache-spark-to-ray-on-amazon-ec2/">Amazon&#8217;s Exabyte-Scale Migration from Apache Spark to Ray on Amazon EC2</a></p><p>Amazon&#8217;s Business Data Technologies (BDT) team is migrating from Apache Spark to Ray on Amazon EC2 to handle exabyte-scale data more efficiently. The switch is driven by the need to reduce data processing costs and time for their large business intelligence datasets. Apache Spark, though powerful, had started to show limitations with scalability and performance as their data grew. Ray, initially known for machine learning tasks, offered a more flexible and cost-effective solution with its distributed compute capabilities, reducing processing costs by 82% and improving data processing speeds significantly.</p><p><a href="https://valkey.io/blog/unlock-one-million-rps/">Unlock 1 Million RPS: Experience Triple the Speed with Valkey</a></p><p>Valkey 8.0, set for release in September 2024, introduces a new multi-threaded architecture that significantly boosts performance, increasing throughput by 230% to over 1 million requests per second and reducing latency by nearly 70%. This is achieved through an innovative I/O threading system, where dedicated worker threads handle tasks like reading commands and writing responses, freeing up the main thread to focus on executing commands. Valkey 8.0 also supports larger shards, improving performance for workloads that don't scale well horizontally, but comes with trade-offs like increased complexity in managing larger nodes.</p><h1><strong>&#128736;&#65039;HackHub: Best Tools for Cloud</strong></h1><p><a href="https://github.com/substratusai/kubeai">kubeai: Private Open AI on Kubernetes</a></p><p>KubeAI is an open-source tool that allows users to run AI models like LLMs (Large Language Models), embeddings, and speech-to-text on Kubernetes. It provides an API compatible with OpenAI, letting users serve and scale models like Whisper and vLLM across CPU, GPU, and soon TPU infrastructure.</p><p><a href="https://github.com/AvitalTamir/cyphernetes">cyphernetes: A Kubernetes Query Language</a></p><p>Cyphernetes is a query language for Kubernetes inspired by Cypher (from Neo4j) that simplifies managing Kubernetes resources. Instead of complex `kubectl` commands, Cyphernetes lets users perform operations like finding and modifying deployments, services, and ingresses with clear, SQL-like syntax.</p><p><a href="https://github.com/chartdb/chartdb">chartdb: Free and open-source database diagrams editor, visualize and design your DB with a single query.</a></p><p>ChartDB is an open-source, web-based tool for creating and editing database diagrams. With a single "Smart Query," users can instantly visualize their database schema, making it easy to understand and document database structures. It supports multiple databases like PostgreSQL, MySQL, and SQLite.</p><p><a href="https://github.com/stack-auth/stack">stack-auth: Open-source Auth0/Clerk alternative</a></p><p>ChartDB is a free, open-source tool for creating and editing database diagrams. It allows users to instantly visualize their database schema with a single query and supports databases like PostgreSQL, MySQL, and SQLite. Users can interactively edit schemas, export SQL scripts, and even use AI to generate migration scripts for switching between databases.</p><p><a href="https://github.com/mariadb-operator/mariadb-operator">mariadb-operator: Run and operate MariaDB in a cloud native way</a></p><p>The MariaDB Operator allows users to manage MariaDB databases in a cloud-native environment using Kubernetes. It simplifies tasks like deploying and operating MariaDB instances through Custom Resource Definitions (CRDs), enabling features like high availability, automated backups, and flexible storage options.</p>]]></content:encoded></item><item><title><![CDATA[CloudPro #66: Grafana Soars Past $250M ARR]]></title><description><![CDATA[Infamous DevOps roadmap]]></description><link>https://packtcloudpro.substack.com/p/cloudpro-66-grafana-soars-past-250m</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/cloudpro-66-grafana-soars-past-250m</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Fri, 27 Sep 2024 13:03:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!V0WJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fad549-0ede-4d6f-b58f-17cb8c61d2e8_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the latest edition of <strong>CloudPro</strong>! Today, we&#8217;ll talk about:</p><p><strong>&#11088;Masterclass</strong></p><p><a href="https://roadmap.sh/devops">Infamous DevOps roadmap</a></p><p><a href="https://medium.com/@contact_52772/kubernetes-costless-limits-requests-configuration-optimization-with-grafana-kexa-open-source-b3fbedfe1168">Kubernetes Open Source Limits &amp; Requests Configuration Optimization</a></p><p><a href="https://www.cncf.io/blog/2024/08/28/__trashed-5/">A guide to modern Kubernetes network policies</a></p><p><a href="https://hynek.me/articles/docker-virtualenv/">Using Python Virtual Environments in Docker</a></p><p><a href="https://www.freecodecamp.org/news/graceful-shutdowns-k8s-go/">How to terminate Go programs elegantly &#8211; a guide to graceful shutdowns</a></p><p><strong>&#128269;Secret Knowledge</strong></p><p><a href="https://engineering.fb.com/2024/08/27/security/privacy-aware-infrastructure-purpose-limitation-meta/">How Meta Enforces Purpose Limitation at Scale</a></p><p><a href="https://benjamindlee.com/posts/2021/why-i-use-nim-instead-of-python-for-data-processing/">Why I Use Nim Instead of Python for Data Processing</a></p><p><a href="https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/">Convert OpenTelemetry Traces to Metrics using SpanMetrics Connector</a></p><p><a href="https://community.aws/content/2k0yQqU4HqYwTYteEStNVMbRRfZ/what-happens-when-bucket-grantread-in-cdk">What happens when bucket.grantRead() in AWS CDK</a></p><p><a href="https://www.wiz.io/blog/preventing-risk-of-request-collapsing-in-web-caching">Preventing the Risk of Request Collapsing in Web Caching</a></p><p><strong>&#9889;Techwave</strong></p><p><a href="https://grafana.com/about/press/2024/08/21/grafana-labs-soars-past-250m-arr-and-5000-customers-completes-270m-primary-and-secondary-transaction-and-named-a-leader-in-the-gartner-magic-quadrant-for-observability-platforms/">Grafana Labs Soars Past $250M ARR and 5,000 Customers, Completes $270M funding round, and Named a Leader in the Gartner Magic Quadrant for Observability Platforms</a></p><p><a href="https://www.cockroachlabs.com/blog/enterprise-license-announcement/">CockroachDB retires its free "Core" version</a></p><p><a href="https://horovits.medium.com/openmetrics-is-archived-merged-into-prometheus-d555598d2d04">OpenMetrics is Archived, Merged into Prometheus</a></p><p><a href="https://aws.amazon.com/about-aws/whats-new/2024/09/storage-browser-amazon-s3-alpha-release/">Announcing Storage Browser for Amazon S3 for your web applications (alpha release)</a></p><p><a href="https://www.networkworld.com/article/3532148/juniper-jumps-into-wi-fi-7-with-enterprise-switches-access-points.html">Juniper jumps into Wi-Fi 7 with enterprise switches, access points</a></p><p><strong>&#128736;&#65039;Hackhub</strong></p><p><a href="https://github.com/kurtosis-tech/kardinal">Kardinal: lightest-weight way to spin up dev and test environments in Kubernetes</a></p><p><a href="https://github.com/apecloud/kubeblocks">Kubeblocks: control plane software that runs and manages databases, message queues on K8s.</a></p><p><a href="https://github.com/flipt-io/flipt">Flipt: Enterprise-ready, GitOps enabled, CloudNative feature management solution</a></p><p><a href="https://github.com/kubecolor/kubecolor">Kubecolor: Colorize your kubectl output</a></p><p><a href="https://github.com/StevenSmiley/aws-mine">AWS-mine: AWS honey token manager</a></p><p></p><p>&#128161;<strong>Recommended Learning: </strong><a href="https://www.packtpub.com/en-us/product/continuous-integration-mastery-with-jenkins-9781836648970">Continuous Integration Mastery with Jenkins</a></p><p></p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p></p><div><hr></div><h1><strong>&#11088;MasterClass: Tutorials &amp; Guides<br></strong></h1><p><a href="https://roadmap.sh/devops">Infamous DevOps roadmap</a></p><p>This roadmap provides community-driven guides, resources, and roadmaps to help developers grow in their careers, focusing on different fields like DevOps, backend development, and various programming languages. It offers step-by-step instructions for learning new skills, tracking progress, and staying updated with industry best practices.</p><p><a href="https://medium.com/@contact_52772/kubernetes-costless-limits-requests-configuration-optimization-with-grafana-kexa-open-source-b3fbedfe1168">Kubernetes Open Source Limits &amp; Requests Configuration Optimization</a></p><p>This article provides a step-by-step guide on using Kexa, an open-source tool for optimizing Kubernetes resource limits and requests through monitoring and alerting, with Grafana for visualization. It explains how to install Kexa using Helm, set up necessary credentials, connect it to databases like Postgres or MySQL, and configure rules to monitor CPU and memory consumption. It then walks through the setup of a Grafana dashboard to display and optimize pod performance.</p><p><a href="https://www.cncf.io/blog/2024/08/28/__trashed-5/">A guide to modern Kubernetes network policies</a></p><p>In Kubernetes, network policies are rules that control traffic flow between pods in a cluster. They define which traffic is allowed to enter (ingress), exit (egress), or move between pods, helping secure communication within the cluster. These policies fall into two categories based on the OSI model: Layer 4 (L4) policies, which control traffic using IP addresses and ports, and Layer 7 (L7) policies, which offer finer control at the application level (e.g., HTTP routes). By combining both, Kubernetes can implement robust, zero-trust security models.</p><p><a href="https://hynek.me/articles/docker-virtualenv/">Using Python Virtual Environments in Docker</a></p><p>The author explains that despite the trend of simplifying Python Docker workflows by avoiding virtual environments, they continue using them for several key reasons. Virtual environments provide predictability, a well-defined structure, and consistency across projects, which simplifies communication and management in team environments. By isolating the Python environment, it helps prevent complex import issues and makes the codebase more reliable and easier to debug.</p><p><a href="https://www.freecodecamp.org/news/graceful-shutdowns-k8s-go/">How to terminate Go programs elegantly &#8211; a guide to graceful shutdowns</a></p><p>By handling termination signals like SIGTERM, Go applications can stop accepting new requests while allowing in-flight processes to finish, utilizing tools such as `signal.NotifyContext` and `sync.WaitGroup` to manage concurrency. This approach helps maintain data integrity and smooth operations during shutdowns, particularly in orchestrated environments where unexpected terminations can otherwise lead to issues.</p><h1><strong>&#128269;Secret Knowledge: Learning Resources<br></strong></h1><p><a href="https://engineering.fb.com/2024/08/27/security/privacy-aware-infrastructure-purpose-limitation-meta/">How Meta Enforces Purpose Limitation at Scale</a></p><p>Meta enforces purpose limitation at scale using its Privacy Aware Infrastructure (PAI) through technologies like Policy Zones. Policy Zones ensure that data is processed only for its intended purposes by labeling and tracking data assets across systems. It integrates real-time checks during data flow, preventing unauthorized uses by monitoring the movement and processing of data in different environments like function-based or batch-processing systems. This approach provides granular control over data use while scaling across Meta&#8217;s complex infrastructure.</p><p><a href="https://benjamindlee.com/posts/2021/why-i-use-nim-instead-of-python-for-data-processing/">Why I Use Nim Instead of Python for Data Processing</a></p><p>The author chooses Nim over Python for data processing because it offers the simplicity of Python with the speed of C, making it ideal for handling large datasets without complex optimization. In a comparison of processing a 150 MB genome file, Nim significantly outperforms Python, running 30 times faster with nearly identical code. While Nim requires a few syntax changes, such as using `var` for variables and `echo` for output, its faster compilation and execution make it a powerful alternative for tasks like analyzing DNA sequences.</p><p><a href="https://last9.io/blog/convert-opentelemetry-traces-to-metrics-using-spanconnector/">Convert OpenTelemetry Traces to Metrics using SpanMetrics Connector</a></p><p>The SpanMetrics Connector in OpenTelemetry allows you to convert trace data into actionable metrics, addressing the lack of native metrics support in some languages. It works by aggregating key metrics like request counts, errors, and durations (R.E.D metrics) from trace spans. By configuring it in the OpenTelemetry Collector, you can generate useful performance insights without adding extra instrumentation for metrics.</p><p><a href="https://community.aws/content/2k0yQqU4HqYwTYteEStNVMbRRfZ/what-happens-when-bucket-grantread-in-cdk">What happens when bucket.grantRead() in AWS CDK</a></p><p>When you call `bucket.grantRead()` in AWS CDK, it grants read permissions to an IAM role or user by either updating identity-based policies (attached to the IAM principal) or resource-based policies (attached to the S3 bucket). If the IAM role was created within the same CDK stack, identity-based policies are updated. However, if the role or bucket is just a reference (using interfaces like `IRole` or `IBucket`), CDK cannot modify existing policies, and the grant may not work.</p><p><a href="https://www.wiz.io/blog/preventing-risk-of-request-collapsing-in-web-caching">Preventing the Risk of Request Collapsing in Web Caching</a></p><p>Request collapsing is a caching feature where multiple identical requests for the same resource are combined, so only one is sent to the origin server to reduce load. However, this can cause security issues when dealing with sensitive data, as the response to the first request might be mistakenly sent to other users who made the same request. Even if a server uses `Cache-Control: no-cache`, request collapsing may still send cached responses to multiple users. To prevent this, it's crucial to use strict cache policies, such as disabling caching for certain patterns and configuring both the cache and origin server to avoid caching sensitive data.</p><h1><strong>&#9889;&nbsp;TechWave: Cloud News &amp; Analysis</strong></h1><p><a href="https://grafana.com/about/press/2024/08/21/grafana-labs-soars-past-250m-arr-and-5000-customers-completes-270m-primary-and-secondary-transaction-and-named-a-leader-in-the-gartner-magic-quadrant-for-observability-platforms/">Grafana Labs Soars Past $250M ARR and 5,000 Customers, Completes $270M Primary and Secondary Transaction, and Named a Leader in the Gartner&#174; Magic Quadrant&#8482; for Observability Platforms</a></p><p><a href="https://www.cockroachlabs.com/blog/enterprise-license-announcement/">CockroachDB retires its free "Core" version</a></p><p>CockroachDB is evolving its self-hosted offering by retiring the free "Core" version and consolidating all users into a single "Enterprise" version that provides full access to its advanced features. This change, starting with version 24.3, ensures that individuals, students, and small businesses (under $10M annual revenue) can still use CockroachDB Enterprise for free with community support, while larger businesses will need a paid license.</p><p><a href="https://horovits.medium.com/openmetrics-is-archived-merged-into-prometheus-d555598d2d04">OpenMetrics is Archived, Merged into Prometheus</a></p><p>The OpenMetrics project, originally created to spin off Prometheus' metrics format into an independent specification, has been archived and merged back into Prometheus as of July 2024. While OpenMetrics aimed to become a universal format for exporting metrics, it struggled to gain adoption outside the Prometheus ecosystem, where Prometheus had already become the de facto standard for cloud-native observability.</p><p><a href="https://aws.amazon.com/about-aws/whats-new/2024/09/storage-browser-amazon-s3-alpha-release/">Announcing Storage Browser for Amazon S3 for your web applications (alpha release)</a></p><p>&nbsp;Amazon S3 has released an alpha version of Storage Browser for S3, an open-source component that lets web applications provide a simple interface for users to browse, download, and upload S3-stored data. It integrates with AWS Amplify's JavaScript and React libraries, allowing developers to control access based on user identity and customize the design to fit their app's branding.</p><p><a href="https://www.networkworld.com/article/3532148/juniper-jumps-into-wi-fi-7-with-enterprise-switches-access-points.html">Juniper jumps into Wi-Fi 7 with enterprise switches, access points</a></p><p>Juniper has introduced new EX Series switches and Mist Wi-Fi 7 access points for enterprise wireless networks, offering higher speeds, lower latency, and broader range. The EX4400 switches support both Wi-Fi 6E and Wi-Fi 7 and are managed via the AI-powered Mist Cloud, which helps detect and resolve network issues. Juniper&#8217;s new AP47 Series access points offer advanced features like dual-5GHz or dual-6GHz operation and AI-based channel management.</p><h1><strong>&#128736;&#65039;HackHub: Best Tools for Cloud</strong></h1><p><a href="https://github.com/kurtosis-tech/kardinal">kardinal: lightest-weight way to spin up dev and test environments in Kubernetes</a></p><p>Create lightweight, temporary development environments within a shared Kubernetes cluster, making testing and development more efficient. It allows developers to spin up tailored, on-demand "flows"&#8212;ephemeral environments that use minimal resources by deploying only the necessary services for feature development.</p><p><a href="https://github.com/apecloud/kubeblocks">kubeblocks: control plane software that runs and manages databases, message queues on K8s.</a></p><p>KubeBlocks is an open-source control plane software designed to simplify the management of multiple database engines on Kubernetes (K8s). It uses a unified set of APIs to manage various types of databases, such as MySQL, PostgreSQL, Redis, and Kafka, reducing the need to learn individual database operators.</p><p><a href="https://github.com/flipt-io/flipt">flipt: Enterprise-ready, GitOps enabled, CloudNative feature management solution</a></p><p>Flipt is a cloud-native, GitOps-enabled feature management solution designed to help organizations separate feature releases from deployments, allowing for safer, more controlled updates. It can be integrated into existing infrastructure to avoid third-party latency and is built with high-performance DevOps teams in mind.</p><p><a href="https://github.com/kubecolor/kubecolor">kubecolor: Colorize your kubectl output</a></p><p>Kubecolor is a simple wrapper for the kubectl command-line tool that adds color to its output, making it easier to read and interpret. It enhances the standard kubectl by colorizing logs, tables, and other outputs without changing the actual content. Kubecolor supports custom themes, including options for light backgrounds and colorblind-friendly themes.</p><p><a href="https://github.com/StevenSmiley/aws-mine">aws-mine: AWS honey token manager</a></p><p>aws-mine is a project designed to create "honey tokens" for AWS, which are fake AWS access keys placed in various locations to lure potential attackers. If someone uses these keys, the system sends a notification within about four minutes, allowing you to investigate the possible compromise. Built with AWS Amplify for easy deployment, users can manage their access through Amazon Cognito and receive alerts via Amazon SNS when the keys are accessed.</p>]]></content:encoded></item><item><title><![CDATA[CloudPro #65: IBM acquires Kubecost]]></title><description><![CDATA[European grocery store becomes cloud services provider]]></description><link>https://packtcloudpro.substack.com/p/cloudpro-65-ibm-acquires-kubecost</link><guid isPermaLink="false">https://packtcloudpro.substack.com/p/cloudpro-65-ibm-acquires-kubecost</guid><dc:creator><![CDATA[Packt]]></dc:creator><pubDate>Fri, 20 Sep 2024 13:02:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!V0WJ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F99fad549-0ede-4d6f-b58f-17cb8c61d2e8_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to the latest edition of <strong>CloudPro</strong>! Today, we&#8217;ll talk about:</p><p></p><p><strong>&#11088;Masterclass</strong></p><p><a href="https://www.cncf.io/blog/2024/08/28/__trashed-5/">A Guide to Kubernetes Network Policies</a></p><p><a href="https://www.docker.com/blog/docker-best-practices-understanding-the-differences-between-add-and-copy-instructions-in-dockerfiles/">Dockerfile Instructions - ADD vs. COPY</a></p><p><a href="https://www.linuxtechi.com/add-new-worker-node-to-existing-kubernetes/">How to add new worker node to existing Kubernetes cluster</a></p><p><a href="https://www.reddit.com/r/docker/comments/1f1wqnb/how_i_reduced_docker_image_size_from_588_mb_to/">How I Reduced Docker Image Size from 588 MB to Only 47.7 MB</a></p><p><a href="https://www.cncf.io/blog/2024/08/23/ambient-mesh-can-sidecar-less-istio-make-your-application-faster/">Ambient mesh: Can sidecar-less Istio make your application faster?</a></p><p></p><p><strong>&#128269;Secret Knowledge</strong></p><p><a href="https://blog.devops.dev/oops-i-deleted-the-aws-auth-roles-my-eks-misadventure-47688737ae1f">Oops, I Deleted the AWS Auth Roles</a></p><p><a href="https://www.helpnetsecurity.com/2024/08/07/github-bitbucket-gitlab-jira-incidents/">Rising Incidents on Git Platforms</a></p><p><a href="https://drew.silcock.dev/blog/how-postgres-stores-data-on-disk/">How Postgres stores data on disk</a></p><p><a href="https://itnext.io/gitops-how-we-integrate-a-new-service-in-under-1-hour-for-25-clusters-4aea3982b250">How We Integrate a New Service in Under 1 Hour for 25 Clusters</a></p><p><a href="https://awssecuritydigest.com/articles/eleventeen-ways-to-delete-an-aws-resource">Eleventeen ways to delete an AWS resource</a></p><p></p><p><strong>&#9889;Techwave</strong></p><p><a href="https://www.ft.com/content/08eb1b45-91c2-4312-9d3c-ac5e4e557278">European grocery store becomes cloud services provider</a></p><p><a href="https://techcrunch.com/2024/09/17/ibm-acquires-kubernetes-cost-optimization-startup-kubecost/">IBM acquires Kubecost</a></p><p><a href="https://www.pulumi.com/blog/pulumi-insights-2/">Introducing Pulumi Insights 2.0</a></p><p><a href="https://www.networkworld.com/article/3526076/linus-torvalds-advises-open-source-developers-to-pursue-meaningful-projects-not-hype.html">Linus Torvalds advises open-source developers to pursue meaningful projects, not hype</a></p><p><a href="https://jfrog.com/press-room/jfrog-and-github-expand-partnership-deliver-single-pane-of-glass-for-security-and-copilot-chat-to-empower-developers/">JFrog Extends GitHub Alliance to Provide Unified Dashboard</a></p><p></p><p><strong>&#128736;&#65039;Hackhub</strong></p><p><a href="https://github.com/hotnops/apeman">Apeman: AWS attack path management tool</a></p><p><a href="https://github.com/AvitalTamir/cyphernetes/">Cyphernetes: A Kubernetes Query Language</a></p><p><a href="https://github.com/SoptikHa2/desed">Desed:&nbsp;A command-line tool for complex sed scripts</a></p><p><a href="https://github.com/kubernetes-sigs/kueue">Kueue: Kubernetes-native Job Queueing</a></p><p><a href="https://github.com/dannysteenman/aws-cloudformation-starterkit">AWS CloudFormation Starterkit</a></p><p></p><p>&#128161;<strong>Recommended Reading: </strong><a href="https://www.packtpub.com/en-us/product/implementing-gitops-with-kubernetes-9781835884225">Implementing GitOps with Kubernetes</a></p><p></p><p>Cheers,</p><p><strong><a href="https://www.linkedin.com/in/shreyans512/">Shreyans Singh</a></strong></p><p>Editor-in-Chief</p><p></p><div><hr></div><h1><strong>&#11088;MasterClass: Tutorials &amp; Guides<br></strong></h1><p><a href="https://www.cncf.io/blog/2024/08/28/__trashed-5/">A Guide to Kubernetes Network Policies</a></p><p>In Kubernetes, network policies control the traffic between pods, ensuring secure communication within the cluster. There are two main types: Layer 4 (L4) and Layer 7 (L7) policies. L4 policies manage traffic at the transport layer (e.g., TCP/UDP) based on IP addresses and ports, while L7 policies operate at the application layer (e.g., HTTP) with more fine-grained control over communication between services. L7 policies often require a service mesh like Linkerd, which adds features like mutual TLS (mTLS) for encrypted communication.</p><p><a href="https://www.docker.com/blog/docker-best-practices-understanding-the-differences-between-add-and-copy-instructions-in-dockerfiles/">Dockerfile Instructions - ADD vs. COPY</a></p><p>`COPY` is simple and secure, only transferring files from the local build context to the image. In contrast, `ADD` offers extra functionality, such as downloading files from URLs or automatically extracting compressed archives. However, this added flexibility introduces complexity and potential security risks. Best practice recommends using `COPY` for most cases due to its straightforwardness, reserving `ADD` for situations where its unique features are necessary.</p><p><a href="https://www.linuxtechi.com/add-new-worker-node-to-existing-kubernetes/">How to add new worker node to existing Kubernetes cluster</a></p><p>To add a new worker node to an existing Kubernetes cluster, start by setting up a new Ubuntu 24.04 instance and configuring its hostname and `/etc/hosts` file. Disable swap memory, load necessary kernel modules, and install containerd as the container runtime. Add the Kubernetes APT repository, then install Kubernetes components like kubeadm, kubelet, and kubectl. On the control plane node, generate a kubeadm join command with a token. Run this command on the new worker node to join the cluster. Finally, verify the addition by checking the nodes from the control plane using `kubectl get nodes`.</p><p><a href="https://www.reddit.com/r/docker/comments/1f1wqnb/how_i_reduced_docker_image_size_from_588_mb_to/">How I Reduced Docker Image Size from 588 MB to Only 47.7 MB</a></p><p>To significantly reduce a Docker image size, using multi-stage builds is key. In this case, a Flask app's image size was reduced from 588 MB to just 47.7 MB by switching to the lightweight Python 3.9-alpine image and using a multi-stage build approach. Multi-stage builds allow you to separate the build and runtime environments, keeping only essential runtime dependencies in the final image. Additionally, minimizing the number of layers by combining commands, using a `.dockerignore` file to exclude unnecessary files, and optimizing the Dockerfile structure contributed to this impressive 91.89% reduction.</p><p><a href="https://www.cncf.io/blog/2024/08/23/ambient-mesh-can-sidecar-less-istio-make-your-application-faster/">Ambient mesh: Can sidecar-less Istio make your application faster?</a></p><p>Ambient mode in Istio, introduced in 2022, allows a sidecar-less architecture that can sometimes make applications faster. In traditional service meshes, adding latency is expected, but tests with ambient mode showed slightly improved performance in some cases, like the Bookinfo application's details service. This is partly because of more efficient connection handling and reduced syscalls in ambient mode, which offsets the overhead of extra hops via lightweight ztunnels.</p><h1><strong>&#128269;Secret Knowledge: Learning Resources<br></strong></h1><p><a href="https://blog.devops.dev/oops-i-deleted-the-aws-auth-roles-my-eks-misadventure-47688737ae1f">Oops, I Deleted the AWS Auth Roles</a></p><p>The author, while managing an EKS (Elastic Kubernetes Service) cluster using Terraform, accidentally deleted the AWS authentication roles, which are crucial for accessing the cluster. This resulted in losing access to the EKS cluster. The fix involved manually restoring access by modifying the EKS API access configuration via the AWS Console, re-adding the necessary admin roles, and regenerating the `aws-auth` config map.</p><p><a href="https://www.helpnetsecurity.com/2024/08/07/github-bitbucket-gitlab-jira-incidents/">Rising Incidents on Git Platforms</a></p><p>In 2023, incidents affecting popular DevOps platforms like GitHub, Bitbucket, GitLab, and Jira increased, with issues such as RepoJacking, security vulnerabilities, and performance disruptions. GitHub saw a rise in attacks, with hackers exploiting vulnerabilities and hosting malware. Atlassian products like Bitbucket and Jira faced security flaws, with Jira experiencing a significant increase in incidents. GitLab suffered from performance issues and security breaches, including a major Proxyjacking attack.</p><p><a href="https://drew.silcock.dev/blog/how-postgres-stores-data-on-disk/">How Postgres stores data on disk</a></p><p>Postgres stores data on disk in a well-organized, file-based structure within a directory, typically located at `/var/lib/postgresql/data`. Inside this directory, you'll find folders like `base/`, where actual database data for each database is stored, and `pg_wal/`, which holds the Write-Ahead Log (WAL) files that help recover data after crashes. Each table and database object is ultimately represented by files in these directories. PostgreSQL uses clever abstractions to manage data, such as snapshots for transactions, dynamic shared memory for handling multiple processes, and special mechanisms like tablespaces for physically separating certain data.</p><p><a href="https://itnext.io/gitops-how-we-integrate-a-new-service-in-under-1-hour-for-25-clusters-4aea3982b250">How We Integrate a New Service in Under 1 Hour for 25 Clusters</a></p><p>The article describes how a team integrated a new service called Otterize across 25 clusters in under an hour, emphasizing that while the technical setup was quick, the lengthy licensing process took over four months. The integration involved automating several steps using GitOps and tools like Argo CD to avoid manual errors. Key tasks included creating an organization and environment, inviting users, integrating with Kubernetes, securely managing credentials, and deploying the setup through a script.</p><p><a href="https://awssecuritydigest.com/articles/eleventeen-ways-to-delete-an-aws-resource">Eleventeen ways to delete an AWS resource</a></p><p>Our goal is to reduce AWS costs, but the deletion methods vary widely, often leaving users frustrated. They categorize deletion patterns, from simple one-click deletes to more complex confirmations that require typing specific phrases or acknowledging consequences. Ultimately, AWS should standardize its deletion processes to improve user experience and security, and they call for more data on user behavior during these actions.</p><h1><strong>&#9889;&nbsp;TechWave: Cloud News &amp; Analysis</strong></h1><p><a href="https://www.ft.com/content/08eb1b45-91c2-4312-9d3c-ac5e4e557278">European grocery store becomes cloud services provider</a></p><p>Lidl, through its parent company Schwarz Group, unintentionally entered the competitive world of cloud computing when it built its own cloud system in 2021 to meet internal needs. As other German businesses sought alternatives to U.S. and Chinese cloud providers, Schwarz Group recognized a demand for data services with a focus on European data privacy standards. This led to the creation of Schwarz Digits, which now provides cloud and cybersecurity services, attracting major clients like SAP and Bayern Munich. While competing with giants like Amazon and Google, Schwarz Digits differentiates itself with a focus on digital sovereignty and data protection.</p><p><a href="https://techcrunch.com/2024/09/17/ibm-acquires-kubernetes-cost-optimization-startup-kubecost/">IBM acquires Kubecost</a></p><p>IBM has acquired Kubecost, a startup that helps companies optimize and monitor their Kubernetes clusters for cost efficiency. Kubecost, known for its widely adopted Kubernetes cost management tool and its open-source project OpenCost, will enhance IBM&#8217;s FinOps capabilities. Kubecost will likely be integrated into IBM's FinOps Suite and potentially its OpenShift platform.</p><p><a href="https://www.pulumi.com/blog/pulumi-insights-2/">Introducing Pulumi Insights 2.0</a></p><p>Pulumi Insights 2.0 expands beyond just Pulumi-managed infrastructure to provide visibility into all cloud resources, offering powerful tools for assessing security, efficiency, and management. It introduces new features like comprehensive infrastructure scanning, visual explorers, and dashboards to help organizations manage their cloud environments more effectively. Insights 2.0 integrates with Pulumi&#8217;s Infrastructure-as-Code (IaC) tools, making it easier to bring unmanaged infrastructure under IaC.</p><p><a href="https://www.networkworld.com/article/3526076/linus-torvalds-advises-open-source-developers-to-pursue-meaningful-projects-not-hype.html">Linus Torvalds advises open-source developers to pursue meaningful projects, not hype</a></p><p>At the Open Source Summit Europe, Linus Torvalds encouraged open-source developers to focus on meaningful projects rather than chasing trends and hype. While discussing the latest Linux kernel updates, he emphasized that progress in Linux remains steady, even if not always exciting, with a focus on reliability. Torvalds also praised the ongoing evolution of Linux and the wider open-source ecosystem, noting its democratizing effect for new developers.</p><p><a href="https://jfrog.com/press-room/jfrog-and-github-expand-partnership-deliver-single-pane-of-glass-for-security-and-copilot-chat-to-empower-developers/">JFrog Extends GitHub Alliance to Provide Unified Dashboard</a></p><p>JFrog and GitHub have expanded their partnership to provide developers with a unified platform for better security and productivity. This integration offers a consolidated view of project statuses and security through tools like GitHub's Copilot chat and JFrog&#8217;s Advanced Security features. Developers can now get insights on third-party packages, track vulnerabilities earlier, and navigate between code and the binaries it produces seamlessly.</p><h1><strong>&#128736;&#65039;HackHub: Best Tools for Cloud</strong></h1><p><a href="https://github.com/hotnops/apeman">Apeman: AWS attack path management tool</a></p><p>Project Apeman is an AWS attack path management tool that helps analyze and manage AWS security data. To set it up, you need Docker, Python, and a virtual environment. Once the system is initialized, Apeman gathers AWS account data, including authorization details and ARNs, which are then ingested into a graph database for analysis.</p><p><a href="https://github.com/AvitalTamir/cyphernetes/">Cyphernetes: A Kubernetes Query Language</a></p><p>Cyphernetes is a Cypher-inspired query language for Kubernetes, simplifying complex Kubernetes operations with intuitive, SQL-like queries. It allows developers to easily manage Kubernetes resources by expressing relationships between them, such as connecting deployments to services and ingresses.</p><p><a href="https://github.com/SoptikHa2/desed">Desed:&nbsp;A command-line tool for complex sed scripts</a></p><p>Desed is a command-line tool designed to help debug and understand complex `sed` scripts. It allows users to step through their scripts, both forwards and backwards, preview how substitute commands will affect the pattern space, and set breakpoints to examine the program's state. Desed also supports hot reloading, so changes to the source code can be instantly applied without restarting the debugger.</p><p><a href="https://github.com/kubernetes-sigs/kueue">Kueue: Kubernetes-native Job Queueing</a></p><p>Kueue is a Kubernetes-native job queueing system that manages when jobs start and stop based on a variety of factors, such as priorities and resource availability. It offers features like job management with FIFO strategies, resource fair sharing, dynamic resource reclaim, and integration with popular job types like BatchJob and Kubeflow training jobs.</p><p><a href="https://github.com/dannysteenman/aws-cloudformation-starterkit">AWS CloudFormation Starterkit</a></p><p>An AWS CloudFormation starterkit including CI/CD and dev tools that allow you to securely and quickly deploy CloudFormation stacks on your AWS account.</p>]]></content:encoded></item></channel></rss>