<?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[CareerByteCode’s Substack: UseCases]]></title><description><![CDATA[learn from realtimeusecases]]></description><link>https://careerbytecode.substack.com/s/usecases</link><image><url>https://substackcdn.com/image/fetch/$s_!DK3n!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe12a63db-0058-4a43-91d6-ab0fa98ba988_474x474.png</url><title>CareerByteCode’s Substack: UseCases</title><link>https://careerbytecode.substack.com/s/usecases</link></image><generator>Substack</generator><lastBuildDate>Fri, 08 May 2026 09:23:13 GMT</lastBuildDate><atom:link href="https://careerbytecode.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[CareerByteCode]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[careerbytecode@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[careerbytecode@substack.com]]></itunes:email><itunes:name><![CDATA[CareerByteCode]]></itunes:name></itunes:owner><itunes:author><![CDATA[CareerByteCode]]></itunes:author><googleplay:owner><![CDATA[careerbytecode@substack.com]]></googleplay:owner><googleplay:email><![CDATA[careerbytecode@substack.com]]></googleplay:email><googleplay:author><![CDATA[CareerByteCode]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Seamless Azure Virtual Machine Login Using Microsoft Entra ID Integration]]></title><description><![CDATA[DevOps Guide: Enable Azure VM Login Using Microsoft Entra ID]]></description><link>https://careerbytecode.substack.com/p/no-more-static-passwords-use-entra-id-for-azure-vm-authentication</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/no-more-static-passwords-use-entra-id-for-azure-vm-authentication</guid><dc:creator><![CDATA[Manoj]]></dc:creator><pubDate>Sun, 09 Nov 2025 19:16:13 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!s3UM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s3UM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s3UM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!s3UM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!s3UM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!s3UM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s3UM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:252121,&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://careerbytecode.substack.com/i/177151087?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.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_!s3UM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!s3UM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!s3UM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!s3UM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1bc08e04-e683-4e65-bc6a-6687ffb69bee_1280x720.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></p><h2><strong>1. Problem Statement:</strong></h2><p>In traditional Azure Virtual Machine (VM) environments, user authentication is primarily handled using <strong>local administrator credentials</strong> or <strong>SSH keys</strong>. While this approach works for small-scale or personal deployments, it becomes <strong>inefficient, insecure, and unmanageable</strong> in enterprise environments where multiple teams, developers, and adm&#8230;</p>
      <p>
          <a href="https://careerbytecode.substack.com/p/no-more-static-passwords-use-entra-id-for-azure-vm-authentication">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Automate EC2 Deployment on AWS Using Terraform Variables]]></title><description><![CDATA[From Zero to Cloud: Automating EC2 Deployment on AWS with Terraform Variables]]></description><link>https://careerbytecode.substack.com/p/automate-ec2-deployment-on-aws-using-terraform-variables</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/automate-ec2-deployment-on-aws-using-terraform-variables</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Sun, 10 Aug 2025 19:27:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XLnA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png" 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_!XLnA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XLnA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!XLnA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!XLnA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!XLnA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XLnA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179931,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.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_!XLnA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!XLnA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!XLnA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!XLnA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F023a0b61-8229-4cef-a178-d9f19cbd9f42_1280x720.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></p><p></p><h2><strong>1. Problem Statement</strong></h2><p>In cloud environments, provisioning infrastructure manually is time-consuming, error-prone, and inconsistent across different environments. This becomes a significant challenge when multiple EC2 instances, networking resources, and security configurations need to be deployed across various AWS environments (Dev, Test, Prod).<br>The lack of automation leads to:</p><ul><li><p>Increased deployment time</p></li><li><p>Manual errors in configuration</p></li><li><p>Difficulty in replicating environments</p></li><li><p>Inefficient resource management</p></li></ul><p>By using <strong>Terraform variables</strong>, we can externalize configuration details, allowing us to <strong>automate EC2 deployments in AWS</strong> with repeatable, consistent, and scalable infrastructure setups.</p><p></p><h2><strong>2. Why We Need This Use Case</strong></h2><p>This use case demonstrates how to provision a virtual machine (EC2 instance) in AWS using <strong>Terraform</strong> with <strong>string variables</strong>, which enables:</p><ul><li><p><strong>Automation</strong> of infrastructure provisioning (Infrastructure as Code).</p></li><li><p><strong>Reusability</strong> of the code across environments by externalizing configuration via variables.</p></li><li><p><strong>Simplicity and speed</strong> in deploying consistent and repeatable cloud environments.</p></li><li><p><strong>Centralized control</strong> over networking (VPC, subnet, routing) and access.</p></li></ul><p>It&#8217;s an essential foundational use case for anyone starting with infrastructure automation in AWS.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><p>You would typically use this setup:</p><ul><li><p>When creating a development or test environment for quick deployments.</p></li><li><p>When provisioning infrastructure repeatedly across environments (Dev/Test/UAT/Prod).</p></li><li><p>When learning Infrastructure as Code concepts using Terraform.</p></li><li><p>When bootstrapping cloud infrastructure with minimal manual effort.</p></li><li><p>When demonstrating or teaching how to securely expose an EC2 instance with full internet access.</p></li></ul><div><hr></div><h2><strong>4. Challenge Questions</strong></h2><p></p><ol><li><p><strong>Scenario</strong>: Your team needs identical EC2 instances in three regions (US-East-1, EU-Central-1, and AP-South-1). How would you modify your Terraform code to handle multiple regions efficiently using variables?</p></li><li><p><strong>Scenario</strong>: An auditor asks you to restrict public SSH access to EC2 instances. Currently, your Terraform script allows all inbound traffic. Which changes in the security group configuration would you make?</p></li><li><p><strong>Scenario</strong>: You deployed an EC2 instance but realized you need to change the instance type from t2.micro to t3.medium. How do you update this using Terraform without destroying other resources?</p></li><li><p><strong>Scenario</strong>: Your project requires both public and private subnets. How will you use Terraform variables to define separate CIDR blocks for each and ensure correct routing?</p></li><li><p><strong>Scenario</strong>: A developer accidentally deleted the EC2 instance from the AWS console. How would Terraform help you bring it back quickly without manually configuring everything again?</p></li></ol><h2><strong>5. Prerequisites for the Lab</strong></h2><p>Make sure the following are ready before you begin:</p><h3>Software Requirements:</h3><ul><li><p>Terraform installed</p></li><li><p>AWS CLI installed and configured</p></li><li><p>A code/text editor (e.g., VSCode)</p></li></ul><h3>AWS Requirements:</h3><ul><li><p>An AWS account with sufficient permissions to create:</p><ul><li><p>EC2 instances</p></li><li><p>VPC, Subnets, Internet Gateway, Security Groups</p></li></ul></li><li><p>An existing <strong>EC2 Key Pair</strong> in AWS.</p></li></ul><div><hr></div><h2><strong>6. Advantages and Disadvantages of This Use Case</strong></h2><h4><strong>Advantages:</strong></h4><ul><li><p>Modular &amp; Scalable : Using variables allows easy scaling and reuse</p></li><li><p>Fast Deployment : Quickly deploy EC2 instances without manual configuration</p></li><li><p>Repeatability : Same configuration can be used for multiple environments</p></li><li><p>Version Control&#9;: Terraform code can be versioned and reviewed via Git</p></li><li><p>Infrastructure as Code (IaC) : Reduces manual errors and improves documentation</p></li><li><p>Customizable : Easily change regions, AMIs, instance types using variables.</p></li></ul><h4><strong>Disadvantages:</strong></h4><ul><li><p>All-Open Security Group : Allows all inbound traffic (a major security risk in production).</p></li><li><p>No NAT Gateway : Instances in private subnets (not used here) won&#8217;t have internet.</p></li><li><p>Single Instance Deployment : Not ideal for HA or scaling (use Auto Scaling Groups for that).</p></li><li><p>Manual Key Pair Setup : Must ensure the key pair exists.</p></li></ul><p><strong>Security Warning</strong>: Allowing <code>0.0.0.0/0</code> on all ports is insecure. This is acceptable only for learning/lab purposes.</p><div><hr></div><h2><strong>7. Step-by-Step Implementation Instructions</strong></h2><h3><strong>1. Defining Input Variables:</strong></h3><p>In this step, we define a set of <strong>Terraform variables</strong> to parameterize our infrastructure configuration. This approach allows us to write reusable and dynamic code that can easily adapt to different environments or requirements. Create variables.tf file.</p><p><strong>Explanation of Each Variable:</strong></p><pre><code>variable "aws_region" {
  default     = "eu-central-1" #AWS region
}</code></pre><ul><li><p>Specifies the AWS region where the infrastructure will be provisioned.</p></li><li><p>Default is set to <strong>Frankfurt (eu-central-1)</strong>.</p></li><li><p>Helps Terraform know where to deploy all resources.</p></li></ul><pre><code>variable "vpc_cidr" {
  default     = "10.0.0.0/16" # CIDR block for VPC
}</code></pre><ul><li><p>Defines the IP address range for the VPC.</p></li><li><p><code>/16</code> allows for a large number of subnets and hosts within the VPC.</p></li></ul><pre><code>variable "public-subnet_cidr" {
  default     = "10.0.1.0/24" # CIDR block for public subnet
}</code></pre><ul><li><p>IP range for the <strong>public subnet</strong>.</p></li><li><p>A <code>/24</code> subnet allows for up to 254 usable IP addresses.</p></li></ul><pre><code>variable "private-subnet_cidr" {
  default     = "10.0.2.0/24" # CIDR block for public subnet
}</code></pre><ul><li><p>IP range for the <strong>private subnet</strong>.</p></li><li><p>Also a <code>/24</code> subnet, isolated from the public subnet but within the same VPC.</p></li></ul><pre><code>variable "key_pair_name" {
  default        = "raghu_kp_ppk" # Name of existing AWS key pair
}</code></pre><ul><li><p>Refers to the name of an <strong>existing EC2 key pair</strong> in AWS.</p></li><li><p>This key is used to <strong>SSH into the EC2 instance</strong> after it's created.</p></li></ul><pre><code>variable "instance_type" {
  default     = "t2.micro" # EC2 instance type
}</code></pre><ul><li><p>Specifies the type of EC2 instance to launch.</p></li><li><p><code>t2.micro</code> is eligible for the AWS Free Tier and suitable for basic workloads.</p></li></ul><pre><code>variable "ami_id" {
  default        = "ami-03250b0e01c28d196" # AMI ID for EC2 instance
}</code></pre><ul><li><p>The <strong>Amazon Machine Image (AMI)</strong> ID used to launch the EC2 instance.</p></li><li><p>This one corresponds to <strong>Amazon Linux 2</strong> in the <code>eu-central-1</code> region.</p></li></ul><div><hr></div><h4><strong>2. Configuring the AWS Provider</strong></h4><ul><li><p>The <strong>provider block is mandatory</strong> for every Terraform configuration&#8212;it specifies which cloud platform or service Terraform should communicate with.</p></li><li><p>Setting the region here ensures all resources (like VPCs, EC2 instances, subnets, etc.) are created in the <strong>correct geographic location</strong>.</p></li><li><p>create provider.tf file.</p></li></ul><pre><code>provider "aws" {
  region = var.aws_region   # change region as needed
}</code></pre><ul><li><p>This block tells Terraform to use the <strong>AWS provider</strong>, which enables it to interact with AWS services.</p></li><li><p>The <code>region</code> is dynamically set using the variable <code>var.aws_region</code>, making the configuration reusable across different AWS regions.</p></li><li><p>In your setup, the default value of <code>aws_region</code> is <code>"eu-central-1"</code> (Frankfurt), but it can be easily overridden when needed.</p></li></ul><p></p><h3><strong>3. Creating the VPC (Virtual Private Cloud)</strong></h3><ul><li><p>A <strong>VPC is the foundation</strong> of any AWS network. It defines the IP space and the isolated network where all other resources (like subnets, EC2 instances, and gateways) will live.</p></li><li><p>Creating a custom VPC (instead of using the default) gives you <strong>full control over networking</strong>, routing, and security.</p></li><li><p>Create vpc.tf file</p></li></ul><pre><code>resource "aws_vpc" "main_vpc" {
  cidr_block = var.vpc_cidr
}</code></pre><ul><li><p>This Terraform resource <strong>creates a VPC</strong> (Virtual Private Cloud) in AWS, which acts as a <strong>logical isolation</strong> of the AWS network resources.</p></li><li><p>The <code>cidr_block</code> is assigned using the variable <code>var.vpc_cidr</code>, which in our setup is <code>"10.0.0.0/16"</code>.</p><ul><li><p>This means the VPC can accommodate up to <strong>65,536 IP addresses</strong>, allowing plenty of room for subnets and services.</p></li></ul></li><li><p>The resource name <code>main_vpc</code> is an internal label used within Terraform to reference this VPC.</p></li></ul><div><hr></div><h3><strong>4. Creating Public and Private Subnets</strong></h3><ul><li><p>In this step, we are defining two subnets within our Virtual Private Cloud (VPC): one <strong>public subnet</strong> and one <strong>private subnet</strong>. </p></li><li><p>It helps logically separate <strong>public-facing</strong> resources (e.g., web servers) from <strong>internal resources</strong> (e.g., databases).</p></li><li><p>Using variables for CIDR blocks makes the infrastructure <strong>dynamic and environment-agnostic</strong>.</p></li><li><p>This setup is a foundation for building <strong>secure and scalable architectures</strong> in AWS.</p></li><li><p>Create subnet.tf file.</p></li></ul><p><strong>Public subnet:</strong></p><pre><code>resource "aws_subnet" "public" {
  vpc_id     = aws_vpc.main_vpc.id
  cidr_block = var.public-subnet_cidr
  map_public_ip_on_launch = true

  tags = {
    Name = "Public-subnet"
  }
}</code></pre><ul><li><p>This resource creates a <strong>public subnet</strong> in the VPC.</p></li><li><p><code>cidr_block</code> is sourced from the variable <code>public-subnet_cidr</code>, allowing flexibility and reuse.</p></li><li><p><code>map_public_ip_on_launch = true</code> ensures that instances launched in this subnet automatically get a <strong>public IP address</strong>, allowing internet access.</p></li><li><p>A tag is added to identify this subnet as <strong>Public-subnet</strong> in the AWS Console.</p></li></ul><p><strong>Private Subnet:</strong></p><pre><code>resource "aws_subnet" "private" {
  vpc_id     = aws_vpc.main_vpc.id
  cidr_block = var.private-subnet_cidr

  tags = {
    Name = "Private-subnet"
  }
}</code></pre><ul><li><p>This resource creates a <strong>private subnet</strong> in the same VPC.</p></li><li><p><code>cidr_block</code> is sourced from the variable <code>private-subnet_cidr</code>.</p></li><li><p>Unlike the public subnet, this one <strong>does not assign public IPs</strong> to instances automatically, keeping them isolated from direct internet access.</p></li><li><p>This subnet is ideal for placing backend resources like databases or internal services.</p></li><li><p>It&#8217;s tagged as <strong>Private-subnet</strong> for identification.</p></li></ul><div><hr></div><h3><strong>5. Creating a Security Group to Allow All Traffic</strong></h3><ul><li><p>A security group is required to <strong>control traffic</strong> in and out of your EC2 instance.</p></li><li><p>This configuration ensures the instance is <strong>fully accessible over the internet</strong>, which is useful for:</p><ul><li><p>Labs and demonstrations</p></li><li><p>Temporary test environments</p></li><li><p>Debugging or quick access via SSH and HTTP/S</p></li></ul></li><li><p>create security-group.tf file.</p></li></ul><pre><code>resource "aws_security_group" "securitygroup" {
  name        = "securitygroup"
  description = "Allow all inbound traffic and all outbound traffic"
  vpc_id      = aws_vpc.main_vpc.id

  ingress {
    description = "allow all traffic"
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }

  egress {
    from_port   = 0
    to_port     = 0
    protocol    = "-1"
    cidr_blocks = ["0.0.0.0/0"]
  }
}</code></pre><ul><li><p>This Terraform resource creates a <strong>Security Group</strong>, which acts as a virtual firewall for EC2 instances inside the VPC.</p></li><li><p>The security group is attached to the VPC via <code>vpc_id = aws_vpc.main_vpc.id</code>.</p></li></ul><h4><strong>Ingress Block</strong> (Inbound Rules)</h4><ul><li><p>Allows <strong>all types of traffic</strong> (<code>protocol = "-1"</code>) from <strong>anywhere</strong> (<code>cidr_blocks = ["0.0.0.0/0"]</code>).</p></li><li><p><code>from_port = 0</code> and <code>to_port = 0</code> cover the full port range, effectively opening all ports.</p></li><li><p>This means <strong>any external IP</strong> can access the instance on <strong>any protocol and any port</strong>.</p></li></ul><h4><strong>Egress Block</strong> (Outbound Rules)</h4><ul><li><p>Also allows <strong>all outbound traffic</strong> from the instance to the internet or other networks.</p></li><li><p>This is the default behavior for AWS security groups, but it's explicitly declared here for clarity.</p></li></ul><div><hr></div><h3><strong>6. Creating a Public Route Table and Associating It with the Public Subnet</strong></h3><ul><li><p>Without a route to the Internet Gateway, instances in the public subnet would not be able to:</p><ul><li><p>Download updates or packages</p></li><li><p>Host websites or services that users can access</p></li><li><p>Be accessed via SSH from the internet</p></li></ul></li><li><p>Associating this route table with the public subnet is essential to make it <strong>function as a true public subnet</strong>.</p></li><li><p>create route-table.tf file.</p></li></ul><pre><code>resource "aws_route_table" "public_rt" {
  vpc_id = aws_vpc.main_vpc.id

  route {
    cidr_block = "0.0.0.0/0"
    gateway_id = aws_internet_gateway.igw.id
  }
}

# Associate Route Table with Public Subnet
resource "aws_route_table_association" "public_assoc" {
  subnet_id      = aws_subnet.public.id
  route_table_id = aws_route_table.public_rt.id
}</code></pre><h4><strong>Route Table Creation</strong></h4><ul><li><p>The <code>aws_route_table.public_rt</code> resource creates a <strong>custom route table</strong> for our VPC.</p></li><li><p>The route block inside it defines a rule that:</p><ul><li><p>Sends all traffic (<code>cidr_block = "0.0.0.0/0"</code>) to the internet.</p></li><li><p>Uses the <strong>Internet Gateway</strong> (<code>gateway_id = aws_internet_gateway.igw.id</code>) as the destination.</p></li></ul></li><li><p>This route allows resources in the associated subnet to <strong>send traffic to and receive traffic from the internet</strong>.</p></li></ul><h4><strong>Route Table Association</strong></h4><ul><li><p>The <code>aws_route_table_association.public_assoc</code> resource links the public subnet (<code>aws_subnet.public.id</code>) to the route table (<code>aws_route_table.public_rt.id</code>).</p></li><li><p>This association makes the public subnet <strong>internet-accessible</strong>, enabling instances launched in it to reach and be reached by the internet.</p></li></ul><div><hr></div><h3><strong>7. Launching an EC2 Instance (Web Server)</strong></h3><ul><li><p>This is the main component that creates the <strong>compute resource</strong> for hosting applications.</p></li><li><p>By including a <strong>user_data script</strong>, the instance becomes a <strong>fully functional web server</strong> on boot&#8212;no manual setup needed.</p></li><li><p>Ties together all the previous steps: the VPC, subnet, security group, key pair, and AMI.</p></li><li><p>create vm-webserver.tf</p></li></ul><pre><code>resource "aws_instance" "webserver" {
  ami                    = var.ami_id
  instance_type          = var.instance_type
  subnet_id = aws_subnet.public.id
  vpc_security_group_ids = ["${aws_security_group.securitygroup.id}"]
  tags = {
    Name = "webserver"
  }
  key_name  = var.key_pair_name 
  user_data = &lt;&lt;EOF
#!/bin/bash -xe
apt update -y
apt install apache2 -y
service apache2 restart
echo "Hello world" &gt; /var/www/html/index.html
EOF
}</code></pre><h4><strong>Core Configuration</strong></h4><ul><li><p><code>ami</code>: Specifies the <strong>Amazon Machine Image</strong> ID to use (e.g., Amazon Linux or Ubuntu).</p></li><li><p><code>instance_type</code>: Defines the EC2 <strong>hardware configuration</strong>, such as <code>t2.micro</code>.</p></li><li><p><code>subnet_id</code>: Places the instance in the <strong>public subnet</strong>, making it internet-accessible.</p></li><li><p><code>vpc_security_group_ids</code>: Attaches a <strong>security group</strong> that allows all inbound and outbound traffic.</p></li><li><p><code>key_name</code>: Refers to the <strong>AWS EC2 key pair</strong> for SSH access to the instance.</p></li></ul><h4><strong>Tagging</strong></h4><ul><li><p>Tags the instance with <code>Name = "webserver"</code> so it&#8217;s easy to identify in the AWS Console.</p></li></ul><h4><strong>User Data (Bootstrapping Script)</strong></h4><ul><li><p>The <code>user_data</code> section provides a <strong>startup script</strong> that:</p><ul><li><p>Updates the package list.</p></li><li><p>Installs Apache HTTP Server.</p></li><li><p>Starts the Apache service.</p></li><li><p>Creates a simple "Hello world" HTML page at <code>/var/www/html/index.html</code>.</p></li></ul></li></ul><p>This ensures that the instance is <strong>immediately available as a web server</strong> after launch.</p><p><strong>Displaying the EC2 Instance Public IP After Deployment</strong></p><p>create output.tf file.</p><pre><code>output "public_ip" {
    value = "${aws_instance.webserver.public_ip}"
}</code></pre><ul><li><p>This Terraform <strong>output block</strong> is used to <strong>display the public IP address</strong> of the EC2 instance after the infrastructure is successfully provisioned.</p></li><li><p><code>aws_instance.webserver.public_ip</code> accesses the public IP generated by AWS for the EC2 instance defined in the <code>aws_instance.webserver</code> resource.</p></li></ul><div><hr></div><h2><strong>6. Execution</strong></h2><h4>1. <strong>terraform init</strong></h4><ul><li><p><strong>What it does:</strong><br>Initializes the Terraform working directory. It downloads the necessary provider plugins (e.g., AWS provider) and sets up the backend for storing the state file.</p></li><li><p><strong>When to run:</strong><br>Always run this command <strong>once at the beginning</strong> before any other Terraform commands, or when you add new providers/modules.</p></li><li><p><strong>Why it&#8217;s important:</strong><br>Without initialization, Terraform won&#8217;t be able to communicate with cloud providers or manage resources.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FOoa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FOoa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 424w, https://substackcdn.com/image/fetch/$s_!FOoa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 848w, https://substackcdn.com/image/fetch/$s_!FOoa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 1272w, https://substackcdn.com/image/fetch/$s_!FOoa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FOoa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png" width="975" height="587" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:587,&quot;width&quot;:975,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:74506,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.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_!FOoa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 424w, https://substackcdn.com/image/fetch/$s_!FOoa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 848w, https://substackcdn.com/image/fetch/$s_!FOoa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.png 1272w, https://substackcdn.com/image/fetch/$s_!FOoa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F22b6da06-a865-4e8f-b2af-e353c0e5a5b5_975x587.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><h4>2. <strong>terraform plan</strong></h4><ul><li><p><strong>What it does:</strong><br>Creates an <strong>execution plan</strong> showing what Terraform intends to do based on your current configuration and state. It lists which resources will be created, updated, or destroyed&#8212;but does <strong>not</strong> make any changes yet.</p></li><li><p><strong>When to run:</strong><br>Run before applying changes to review and verify what will happen.</p></li><li><p><strong>Why it&#8217;s important:</strong><br>Helps prevent unintended changes by allowing you to review the impact before modifying your infrastructure.</p></li></ul><h4>3. <strong>terraform apply</strong></h4><ul><li><p><strong>What it does:</strong><br>Executes the planned changes to provision, update, or destroy infrastructure as defined in your Terraform configuration.</p></li><li><p><strong>When to run:</strong><br>Run after reviewing the plan to actually create or modify resources.</p></li><li><p><strong>Why it&#8217;s important:</strong><br>This is the command that <strong>makes your infrastructure live</strong>.</p></li><li><p><strong>Note:</strong><br>You can run <code>terraform apply</code> directly, and it will prompt for approval after showing the plan, or run <code>terraform apply -auto-approve</code> to skip the confirmation step.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0RAW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0RAW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 424w, https://substackcdn.com/image/fetch/$s_!0RAW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 848w, https://substackcdn.com/image/fetch/$s_!0RAW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 1272w, https://substackcdn.com/image/fetch/$s_!0RAW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0RAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png" width="1148" height="817" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:817,&quot;width&quot;:1148,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109551,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.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_!0RAW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 424w, https://substackcdn.com/image/fetch/$s_!0RAW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 848w, https://substackcdn.com/image/fetch/$s_!0RAW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.png 1272w, https://substackcdn.com/image/fetch/$s_!0RAW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff90ec64b-2c97-488c-ad33-354f758eb784_1148x817.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><h4>4. <strong>terraform destroy</strong></h4><ul><li><p><strong>What it does:</strong><br>Removes all the infrastructure resources created by your Terraform configuration.</p></li><li><p><strong>When to run:</strong><br>Use when you want to <strong>tear down</strong> all resources to avoid ongoing costs or to reset the environment.</p></li><li><p><strong>Why it&#8217;s important:</strong><br>Enables clean, repeatable management of infrastructure by safely removing resources when they&#8217;re no longer needed.</p></li></ul><div><hr></div><h4><strong>7. Output on AWS Console</strong></h4><p><strong>VPC</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_!WihI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WihI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 424w, https://substackcdn.com/image/fetch/$s_!WihI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 848w, https://substackcdn.com/image/fetch/$s_!WihI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 1272w, https://substackcdn.com/image/fetch/$s_!WihI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WihI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png" width="1432" height="675" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:675,&quot;width&quot;:1432,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:112113,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.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_!WihI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 424w, https://substackcdn.com/image/fetch/$s_!WihI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 848w, https://substackcdn.com/image/fetch/$s_!WihI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.png 1272w, https://substackcdn.com/image/fetch/$s_!WihI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f19bd56-d715-4d72-8dc2-019d43560a52_1432x675.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>Subnet</strong>:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!68Wy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!68Wy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 424w, https://substackcdn.com/image/fetch/$s_!68Wy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 848w, https://substackcdn.com/image/fetch/$s_!68Wy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 1272w, https://substackcdn.com/image/fetch/$s_!68Wy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!68Wy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png" width="1456" height="111" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:111,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42477,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.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_!68Wy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 424w, https://substackcdn.com/image/fetch/$s_!68Wy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 848w, https://substackcdn.com/image/fetch/$s_!68Wy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 1272w, https://substackcdn.com/image/fetch/$s_!68Wy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1deb831d-98c6-4833-902b-e6fea37bc2ee_1605x122.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Route Table:</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_!hyRo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hyRo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 424w, https://substackcdn.com/image/fetch/$s_!hyRo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 848w, https://substackcdn.com/image/fetch/$s_!hyRo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 1272w, https://substackcdn.com/image/fetch/$s_!hyRo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hyRo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png" width="1456" height="569" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:569,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94329,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.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_!hyRo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 424w, https://substackcdn.com/image/fetch/$s_!hyRo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 848w, https://substackcdn.com/image/fetch/$s_!hyRo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.png 1272w, https://substackcdn.com/image/fetch/$s_!hyRo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1d7d6375-af7d-46d8-98fd-54a185c09c83_1547x605.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_!CrfQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CrfQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 424w, https://substackcdn.com/image/fetch/$s_!CrfQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 848w, https://substackcdn.com/image/fetch/$s_!CrfQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 1272w, https://substackcdn.com/image/fetch/$s_!CrfQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CrfQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png" width="1456" height="642" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:642,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:130816,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.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_!CrfQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 424w, https://substackcdn.com/image/fetch/$s_!CrfQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 848w, https://substackcdn.com/image/fetch/$s_!CrfQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.png 1272w, https://substackcdn.com/image/fetch/$s_!CrfQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff23a7050-5f3e-4a5e-bfd1-b2d549b15e84_1577x695.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>Internet Gateway:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aZEP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aZEP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 424w, https://substackcdn.com/image/fetch/$s_!aZEP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 848w, https://substackcdn.com/image/fetch/$s_!aZEP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 1272w, https://substackcdn.com/image/fetch/$s_!aZEP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aZEP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png" width="1456" height="234" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:234,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:61606,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.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_!aZEP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 424w, https://substackcdn.com/image/fetch/$s_!aZEP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 848w, https://substackcdn.com/image/fetch/$s_!aZEP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 1272w, https://substackcdn.com/image/fetch/$s_!aZEP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3826b4c4-1f8a-456e-b18e-e47cc4d00dc0_1587x255.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Security Group:</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_!ktZj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ktZj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 424w, https://substackcdn.com/image/fetch/$s_!ktZj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 848w, https://substackcdn.com/image/fetch/$s_!ktZj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 1272w, https://substackcdn.com/image/fetch/$s_!ktZj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ktZj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png" width="1456" height="574" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:574,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:106925,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.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_!ktZj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 424w, https://substackcdn.com/image/fetch/$s_!ktZj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 848w, https://substackcdn.com/image/fetch/$s_!ktZj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.png 1272w, https://substackcdn.com/image/fetch/$s_!ktZj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87c74acf-954a-4aa7-8154-1f6002a31698_1576x621.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>EC2 Instance:</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_!5u-o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5u-o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 424w, https://substackcdn.com/image/fetch/$s_!5u-o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 848w, https://substackcdn.com/image/fetch/$s_!5u-o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 1272w, https://substackcdn.com/image/fetch/$s_!5u-o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5u-o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png" width="1456" height="668" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:668,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116483,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.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_!5u-o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 424w, https://substackcdn.com/image/fetch/$s_!5u-o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 848w, https://substackcdn.com/image/fetch/$s_!5u-o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.png 1272w, https://substackcdn.com/image/fetch/$s_!5u-o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa9a6af48-dad5-4e78-92d3-a01f000e1332_1595x732.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>Output through public ip:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0l3r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0l3r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 424w, https://substackcdn.com/image/fetch/$s_!0l3r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 848w, https://substackcdn.com/image/fetch/$s_!0l3r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 1272w, https://substackcdn.com/image/fetch/$s_!0l3r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0l3r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png" width="757" height="231" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:231,&quot;width&quot;:757,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:22804,&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://careerbytecode.substack.com/i/163657844?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.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_!0l3r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 424w, https://substackcdn.com/image/fetch/$s_!0l3r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 848w, https://substackcdn.com/image/fetch/$s_!0l3r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 1272w, https://substackcdn.com/image/fetch/$s_!0l3r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa572a0d-9fdd-4382-b4c4-fa8c0e35482d_757x231.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h2><strong>8. Conclusion</strong></h2><p>This use case demonstrated how to provision a complete AWS infrastructure using Terraform&#8212;from creating a custom VPC and public subnet, configuring security groups, setting up routing, to launching a fully functional EC2 web server instance. Leveraging Terraform's infrastructure-as-code approach allows you to automate and manage cloud resources consistently, efficiently, and with minimal manual intervention.</p><p>By using variables and modular configurations, this setup is flexible and easily adaptable to different environments or requirements. While the example opens all traffic for simplicity, it also highlights the importance of balancing accessibility with security best practices in real-world deployments.</p><p>Overall, this use case provides a solid foundation for managing AWS infrastructure with Terraform, empowering you to scale, modify, and maintain your cloud environments reliably and reproducibly.</p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Automating Cron Job Scheduling Across Multi-Server Environments with Ansible]]></title><description><![CDATA[Never Miss a Task Again Automating Cron with Ansible]]></description><link>https://careerbytecode.substack.com/p/automating-cron-job-scheduling-across-multi-server-environments-with-ansible</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/automating-cron-job-scheduling-across-multi-server-environments-with-ansible</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Sun, 10 Aug 2025 18:29:33 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZInK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZInK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZInK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!ZInK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!ZInK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!ZInK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZInK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:273873,&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://careerbytecode.substack.com/i/163204301?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.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_!ZInK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!ZInK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!ZInK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!ZInK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e25040e-be62-49c1-9f50-2fba10ff9bf2_1280x720.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></p><h2><strong>1. Problem Statement</strong></h2><p>In multi-server environments, repetitive operational tasks&#8212;such as restarting services, performing backups, or rotating logs&#8212;must occur at consistent intervals. Manually setting up cron jobs on each server is inefficient, prone to errors, and leads to inconsistencies in task execution schedules. There is a need for an automated, scalable, and reliable approach to configure cron jobs across multiple servers while ensuring uniform execution times and commands.</p><h2>2. Scope of Work:</h2><p>     Automate the setup of cron jobs on multiple servers. The cron job should execute a backup script every day at midnight, ensuring the backup process is consistent across all servers.</p><h2>3. Approach:</h2><p> Create an Ansible playbook with a cron module task to ensure that the cron jobs run on all remote servers. Define the schedule (e.g., 0 0 * * * for midnight every day), and specify the script that should be run.</p><p>In this use case, we will be creating a cron job to restart apache2 serivice daily at 2am.</p><div><hr></div><h2><strong>4. Why We Need This Use Case</strong></h2><p>Cron jobs are essential for maintaining healthy server environments. Tasks like restarting services, cleaning temporary files, or running scripts need to happen on a strict schedule. However, when you have dozens or hundreds of servers, manually configuring crontab entries is:</p><ul><li><p><strong>Error-Prone</strong> &#8211; Mistyped schedules or commands can cause missed or redundant task executions.</p></li><li><p><strong>Inconsistent</strong> &#8211; Different administrators might use different timings or parameters.</p></li><li><p><strong>Time-Consuming</strong> &#8211; Logging into each server to create or modify cron jobs wastes time.</p></li><li><p><strong>Difficult to Audit</strong> &#8211; Without automation, it&#8217;s hard to verify that all servers have the same cron setup.</p></li></ul><p>By using <strong>Ansible&#8217;s </strong><code>cron</code><strong> module</strong>, teams can:</p><ul><li><p>Configure cron jobs across all servers in a single execution.</p></li><li><p>Ensure consistent schedules and commands.</p></li><li><p>Quickly roll out changes to the schedule or job command.</p></li><li><p>Maintain version-controlled infrastructure as code (IaC) for scheduling tasks.</p></li></ul><div><hr></div><h2><strong>5. When We Need This Use Case</strong></h2><p>This use case becomes necessary when:</p><ol><li><p><strong>Automating Routine Maintenance</strong> &#8211; Restarting services like Apache daily to free memory and prevent crashes.</p></li><li><p><strong>Ensuring Consistent Backups</strong> &#8211; Scheduling backup scripts at the same time every day across all servers.</p></li><li><p><strong>Log Rotation &amp; Cleanup</strong> &#8211; Removing old log files on a set schedule to prevent storage bloat.</p></li><li><p><strong>Monitoring and Alerts</strong> &#8211; Running health check scripts periodically to trigger alerts on failures.</p></li><li><p><strong>Regulatory Compliance</strong> &#8211; Enforcing scheduled maintenance tasks required by compliance standards.</p></li></ol><div><hr></div><h2><strong>6. Challenge Scenarios</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/automating-cron-job-scheduling-across-multi-server-environments-with-ansible">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Ansible-Powered Automation: Installing and Configuring Docker Across Multi-OS Server Environments]]></title><description><![CDATA[Hands-Free Docker Installation for Multi-OS Environments]]></description><link>https://careerbytecode.substack.com/p/ansible-powered-automation-installing-and-configuring-docker-across-multi-os-server-environments</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/ansible-powered-automation-installing-and-configuring-docker-across-multi-os-server-environments</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Sun, 10 Aug 2025 18:13:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!PTSh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PTSh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PTSh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!PTSh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!PTSh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!PTSh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PTSh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:247226,&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://careerbytecode.substack.com/i/163223570?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.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_!PTSh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!PTSh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!PTSh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!PTSh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffcf62fbb-8452-4fbb-a747-d1c764c316fc_1280x720.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></p><h2><strong>1. Problem Statement</strong></h2><p>In modern DevOps workflows, Docker has become a standard for containerizing applications. Installing Docker manually across multiple servers is time-consuming and prone to human error, especially when managing hybrid environments with different OS distributions (e.g., Ubuntu, CentOS). This leads to inconsistencies in environment setup, delays in deployments, and potential configuration drift. There is a need for an automated, consistent, and scalable approach to install and configure Docker across all target servers.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><p>In a fast-paced DevOps environment, application teams require reliable containerization platforms like Docker to ensure portability and consistency across development, testing, and production. Manually installing Docker on each server introduces several challenges:</p><ul><li><p><strong>Inconsistency</strong> &#8211; Slight differences in installation steps between servers can break deployments.</p></li><li><p><strong>Scalability Issues</strong> &#8211; Installing Docker manually on tens or hundreds of servers is inefficient.</p></li><li><p><strong>Error-Prone</strong> &#8211; Human errors such as missed dependencies or incorrect configuration can cause failures.</p></li><li><p><strong>Slow Onboarding</strong> &#8211; New environments take longer to provision, slowing down project delivery.</p></li></ul><p>Automating Docker installation using <strong>Ansible</strong> ensures:</p><ul><li><p>One command can install Docker on all servers, regardless of OS.</p></li><li><p>Consistent versions and configurations are applied everywhere.</p></li><li><p>Infrastructure can scale instantly without additional manual effort.</p></li><li><p>Compliance and auditability are improved since all installation steps are captured in code.</p></li></ul><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><p>This use case is required in scenarios such as:</p><ol><li><p><strong>Multi-Environment Provisioning</strong> &#8211; Setting up Docker for dev, staging, and production with minimal human intervention.</p></li><li><p><strong>Cloud &amp; Hybrid Deployments</strong> &#8211; Installing Docker on both cloud VMs (Azure, AWS, GCP) and on-prem servers.</p></li><li><p><strong>CI/CD Pipeline Integration</strong> &#8211; Automatically provisioning Docker-ready nodes as part of a build pipeline.</p></li><li><p><strong>Disaster Recovery</strong> &#8211; Rapidly re-provisioning Docker on replacement servers after a failure.</p></li><li><p><strong>Team Onboarding</strong> &#8211; Quickly setting up Docker environments for new development teams.</p></li></ol><div><hr></div><h2><strong>4. Challenge Scenario Questions</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/ansible-powered-automation-installing-and-configuring-docker-across-multi-os-server-environments">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Manage Multi-Environment Configs Using Jinja2 and Ansible]]></title><description><![CDATA[Ansible copy vs template: When to Use Each for Config Management]]></description><link>https://careerbytecode.substack.com/p/how-to-manage-multi-environment-configs-using-jinja2-and-ansible</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/how-to-manage-multi-environment-configs-using-jinja2-and-ansible</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Sun, 10 Aug 2025 18:00:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!orZc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!orZc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!orZc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!orZc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!orZc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!orZc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!orZc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:250340,&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://careerbytecode.substack.com/i/163201246?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.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_!orZc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!orZc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!orZc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!orZc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81ccacdc-4331-4bf9-8d99-0352ac7ea7c4_1280x720.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></p><p></p><h3><strong>1. Problem Statement</strong></h3><p>You need to <strong>dynamically generate configuration files</strong> for a service (e.g., <strong>nginx</strong>, <strong>Apache</strong>) based on environment-specific variables in an <strong>Ansible playbook</strong>. The configuration should adapt automatically depending on whether you&#8217;re deploying to <strong>development</strong>, <strong>staging</strong>, or <strong>production</strong>.</p><p>Currently, configurations are often <strong>manually copied</strong> and modified on each server, which:</p><ul><li><p>Risks introducing typos or inconsistent settings between environments.</p></li><li><p>Consumes time in repetitive editing.</p></li><li><p>Makes scaling deployments more difficult.</p></li></ul><div><hr></div><h2><strong>2. Scope of Work</strong></h2><p>Automate the creation of service configuration files using <strong>Jinja2 templates</strong>, populated with environment-specific variables. These templates will be rendered and deployed to target servers via the <strong>Ansible </strong><code>template</code><strong> module</strong>.</p><p>This use case also highlights the difference between:</p><ul><li><p><code>copy</code><strong> module</strong> &#8211; transfers files as-is (static)</p></li><li><p><code>template</code><strong> module</strong> &#8211; processes Jinja2 templates and replaces variables dynamically.</p></li></ul><h2>3. Approach:</h2><p>     Create an <strong>Ansible playbook</strong> that performs the following tasks:</p><ol><li><p>Create Jinja2 template files for configuration files (e.g., fetch_server_config.j2). </p></li><li><p>In the Ansible playbook, use the template module to render these files with variables defined in the playbook. The rendered configuration file is then copied to the appropriate directory on the target server, ensuring the service is configured dynamically based on environment-specific settings.</p></li><li><p>Use copy module if required for non-template configurations.</p></li></ol><h2><strong>4. Why We Need This Use Case</strong></h2><p>In large-scale environments, configuration files are rarely static&#8212;they often need to adapt dynamically to different environments such as <strong>development, testing, staging, and production</strong>. Without templates, each environment would require separate manual updates, which is <strong>error-prone, time-consuming, and difficult to maintain</strong>.</p><p>Templates allow configuration files to be <strong>parameterized</strong> using placeholders and variables that can be dynamically replaced during deployment. This approach ensures:</p><ul><li><p><strong>Consistency</strong> across environments by standardizing configuration file structures.</p></li><li><p><strong>Automation</strong> by integrating templates with configuration management tools like <strong>Ansible, Terraform, Chef, or Puppet</strong>.</p></li><li><p><strong>Reduced human error</strong> as the same template can be reused, avoiding manual misconfigurations.</p></li><li><p><strong>Scalability</strong> for microservices or multi-node clusters, where each node might require slight variations in configuration.</p></li></ul><p>In short, <strong>templates make configuration management faster, safer, and more maintainable</strong>, enabling teams to manage hundreds of systems without drowning in repetitive manual edits.</p><div><hr></div><h2><strong>5. When We Need This Use Case</strong></h2><p>We need this use case in scenarios such as:</p><ol><li><p><strong>Multi-Environment Deployments</strong></p><ul><li><p>When deploying applications to multiple environments (dev, test, prod) where only a few parameters (e.g., database host, API keys, ports) differ.</p></li></ul></li><li><p><strong>Cluster Deployments</strong></p><ul><li><p>When deploying to a Kubernetes cluster or distributed system where each node/service has unique configurations derived from a standard base.</p></li></ul></li><li><p><strong>CI/CD Pipelines</strong></p><ul><li><p>During automated builds where configuration needs to adapt dynamically based on branch, commit, or deployment target.</p></li></ul></li><li><p><strong>Dynamic Infrastructure Scaling</strong></p><ul><li><p>When spinning up new VMs, containers, or services where config files need to be generated on the fly with environment-specific details.</p></li></ul></li><li><p><strong>Disaster Recovery &amp; Migration</strong></p><ul><li><p>When restoring or migrating workloads, templates can regenerate configuration files quickly for the target environment without manually editing each file.</p></li></ul></li></ol><div><hr></div><h2><strong>6. Challenge Questions</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/how-to-manage-multi-environment-configs-using-jinja2-and-ansible">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Secrets Safe, 3 Tier Deployments Fast: Terraform + AZURE Key Vault Complete Handson]]></title><description><![CDATA[Modular Terraform: One Codebase, Multiple Environments&#8212;Azure 3-Tier Infra the Right Way]]></description><link>https://careerbytecode.substack.com/p/terraform-modularize-3-tier-architecture-deployment-with-secure-secrets-management-and-github-actions-automation</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/terraform-modularize-3-tier-architecture-deployment-with-secure-secrets-management-and-github-actions-automation</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Sat, 09 Aug 2025 11:30:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!XZyn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XZyn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XZyn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!XZyn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!XZyn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!XZyn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XZyn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211002,&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://careerbytecode.substack.com/i/169886399?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.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_!XZyn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!XZyn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!XZyn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!XZyn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5551275c-3e7b-431c-b797-1973209c08a6_1280x720.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></p><h2><strong>1. Problem Statement :</strong></h2><p>Right now, every time the cloud team needs to deploy a 3-tier application in Azure, they&#8217;re either copying old Terraform scripts, tweaking parameters manually, or hacking together new code for each environment&#8212;dev, test, or prod. This creates inconsistency, missed settings, and endless troubleshooting, especially when secrets or network rules change and aren&#8217;t updated everywhere. There&#8217;s no single source of truth, no way to guarantee all environments are built the same way, and every deployment is a risk.</p><p>This use case directly solves the problem of configuration drift, manual errors, and wasted time by showing how to modularize Terraform code. With modules for every core component (Resource Group, VNet, NSG, Subnets, VMs), everything is reusable and driven by environment-specific variables. No more secret sprawl: credentials and sensitive info are stored in Azure Key Vault, referenced securely in your Terraform pipeline, never hardcoded or exposed. Automated validation and deployment through GitHub Actions ensures every environment is built, tested, and applied the same way, every time.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><p>Modern cloud teams can&#8217;t afford to manage infrastructure manually. As environments multiply and requirements change, the risk of inconsistent configurations, outdated secrets, or missed network rules grows fast. If every environment isn&#8217;t built from the same code, troubleshooting becomes a nightmare, and compliance is nearly impossible.</p><p><br>This use case demonstrates how to build production-ready Azure infrastructure using a clean, modular Terraform setup. It walks through:</p><ul><li><p>Creating reusable modules for each infra building block, so you only write and test code once.</p></li><li><p>Injecting secrets securely from Azure Key Vault, never putting passwords in your repo or pipeline.</p></li><li><p>Defining all environment differences in variable files and remote backend state, making dev, test, and prod perfectly consistent.</p></li><li><p>Automating the entire lifecycle&#8212;validate, plan, apply&#8212;through GitHub Actions, with every deployment logged and auditable.</p></li></ul><p>It&#8217;s a practical guide to turning infrastructure as code from theory into daily reality.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><ul><li><p>When you need to deploy the same core Azure infrastructure to multiple environments&#8212;dev, test, prod&#8212;without introducing inconsistencies.</p></li><li><p>When you want to guarantee all changes are secure (using Key Vault) and traceable (using GitHub Actions and remote state).</p></li><li><p>When your team wants to move faster, with fewer errors and easier onboarding for new engineers.</p></li><li><p>Whenever compliance, security, and auditability matter as much as speed.</p><div><hr></div></li></ul><h2><strong>4. Prerequisites for the Lab</strong></h2><ol><li><p><strong>Azure Subscription</strong></p><ul><li><p>Ability to create and manage Resource Groups, Storage Accounts, Key Vaults, VNets, NSGs, Subnets, and VMs.</p></li></ul></li><li><p><strong>GitHub Account</strong></p><ul><li><p>Repo ready for storing code and running GitHub Actions workflows. Personal Access Token (PAT) for pushing code.</p></li></ul></li><li><p><strong>Azure CLI Installed</strong></p><ul><li><p>For authentication and initial resource setup (<code>az login</code>, <code>az group create</code>, etc).</p></li></ul></li><li><p><strong>Terraform Installed (locally or in Cloud Shell)</strong></p><ul><li><p>To create, plan, and apply infrastructure changes.</p></li></ul></li><li><p><strong>Git Configured</strong></p><ul><li><p>Username and email set for commit history in Cloud Shell or locally.</p></li></ul></li><li><p><strong>Azure Key Vault</strong></p><ul><li><p>Created for storing VM credentials and any other secrets. Roles assigned to yourself and to your GitHub Service Principal.</p></li></ul></li></ol><h2><strong>5. Challenge Questions</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/terraform-modularize-3-tier-architecture-deployment-with-secure-secrets-management-and-github-actions-automation">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Compliance-First Architecture: Implementing Azure Private Endpoints for Storage]]></title><description><![CDATA[Locking Down Storage Access: Enforcing Private-Only Data Flows in Azure]]></description><link>https://careerbytecode.substack.com/p/compliance-first-architecture-implementing-azure-private-endpoints-for-storage</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/compliance-first-architecture-implementing-azure-private-endpoints-for-storage</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Fri, 08 Aug 2025 08:08:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!pGB2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png" 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_!pGB2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pGB2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!pGB2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!pGB2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!pGB2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pGB2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183237,&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://careerbytecode.substack.com/i/169881235?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.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_!pGB2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!pGB2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!pGB2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!pGB2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95930fb5-34df-4c6c-b6ce-4cd54c8eb631_1280x720.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></p><p></p><h2><strong>1. Problem Statement :</strong></h2><p>A fintech app runs on Azure VMs inside a VNet. It processes sensitive customer documents and stores them in Azure Blob Storage. Due to new compliance mandates, any data transfer over the public internet is forbidden. All traffic, including access to the storage account, must stay inside the Microsoft network no exceptions. Right now, the storage account is reachable publicly, which is a compliance risk and a potential attack vector.</p><p>Right now, the application&#8217;s virtual machines are accessing the Azure Storage Account using its public endpoint. This means traffic between the VM and Storage could traverse the public internet even if only for a moment making your data potentially visible, interceptable, or vulnerable to man-in-the-middle attacks. On top of that, organizations in finance, healthcare, or other regulated industries are often legally required to prove that sensitive data never leaves private, controlled networks.</p><p><strong>This use case solves all of that.</strong></p><ul><li><p>It blocks all public internet access to the Storage Account.</p></li><li><p>It enforces that all storage access happens only through Azure&#8217;s private backbone using a Private Endpoint, mapped to a private IP in your VNet.</p></li><li><p>It removes the risk of accidental data exposure, helps pass strict compliance audits, and dramatically reduces attack surface by keeping storage access off the public internet.</p></li></ul><p>What this really means:<br>You&#8217;re addressing both a security vulnerability (public exposure of storage) and a compliance gap (lack of enforced private-only data paths). This pattern guarantees that only your VMs or whatever resources are inside your VNet and allowed by NSG rules can reach the Storage Account, and no one else can, not even accidentally.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><p>Standard Azure Storage endpoints are public by default, which is a problem if you need airtight security or must answer to auditors. If traffic from your app to your storage account ever leaves the Azure backbone, you risk data leakage, non-compliance, and exposure to internet-based attacks. Private Endpoints guarantee storage traffic is locked to private IPs inside your own VNet, with nothing exposed to the outside world. It also means you can actually prove to auditors and your security team that data never leaves Microsoft&#8217;s backbone.</p><p>This use case <strong>demonstrates</strong> how to enforce true network isolation for cloud storage in Azure. It&#8217;s not just about locking down a storage account&#8212;it&#8217;s about showing, step by step, how to:</p><ul><li><p>Cut off all public endpoints for storage access so data isn&#8217;t exposed, even by mistake.</p></li><li><p>Build an end-to-end private connectivity path from your application&#8217;s VMs to your storage account, using Azure Private Endpoint.</p></li><li><p>Prove that name resolution and traffic routing stay private with Private DNS Zones and NSG rules.</p></li><li><p>Test and validate that the only way to reach storage is through private IPs no shortcuts, no back doors.</p></li></ul><p>In short, it&#8217;s a practical demo of how to design for <strong>least privilege network access</strong> in Azure, enforce compliance policies, and actually verify (not just assume) that your storage access is fully private. This pattern is reusable anywhere you need airtight control over who and what can touch your data at the network level.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><ul><li><p>When you&#8217;re handling regulated or highly confidential data (think finance, healthcare, or government workloads)</p></li><li><p>When your security policy or auditor mandates &#8220;no public exposure&#8221; for storage accounts</p></li><li><p>If you want to tightly restrict access at the network layer, not just by SAS or RBAC</p></li><li><p>If your VMs or services need to access storage accounts securely without punching holes in NSGs or using service endpoints, which still allow some public access</p></li></ul><h2><strong>4. Challenge Scenarios for Students &amp; Interviews</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/compliance-first-architecture-implementing-azure-private-endpoints-for-storage">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Kubernetes Rolling Updates for Backend Services: Ensure 24/7 Availability During Deployments]]></title><description><![CDATA[AKS Rolling Updates: How to Deploy Without Breaking Production]]></description><link>https://careerbytecode.substack.com/p/mastering-azure-kubernetes-rolling-updates-how-to-deploy-backend-pods-without-a-second-of-downtime</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/mastering-azure-kubernetes-rolling-updates-how-to-deploy-backend-pods-without-a-second-of-downtime</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Fri, 08 Aug 2025 07:38:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mIpd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png" 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_!mIpd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mIpd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!mIpd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!mIpd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!mIpd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mIpd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:450439,&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://careerbytecode.substack.com/i/169884489?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.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_!mIpd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!mIpd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!mIpd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!mIpd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10f2f674-1d82-4c50-b070-a3e6560c4e9b_1280x720.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></p><h2><strong>1. Problem Statement :</strong></h2><p>Every time the backend microservice in the AKS cluster gets updated, users experience dropped requests and errors. The root cause is simple: the current deployment strategy kills off old pods before new pods are fully started and healthy. This creates a window where there are zero healthy pods serving traffic. That means active user sessions can be interrupted, APIs might become temporarily unavailable, and any critical transactions in flight are at risk of failure. This kind of outage isn&#8217;t just annoying&#8212;it can directly impact business reputation and user trust, especially for high-availability services.</p><p>This use case fixes the core problem of downtime during deployments in Kubernetes by showing how to safely update backend pods in AKS <strong>without disrupting live traffic</strong>. It solves the real-world issue of:</p><ul><li><p>Old pods terminating before new pods are ready (leading to unserved requests)</p></li><li><p>errors and connection failures for users during rollouts</p></li><li><p>Lack of automated health checks before switching traffic to new pods</p></li></ul><p>The use case demonstrates how to implement a proper rolling update strategy, using <code>maxUnavailable: 0</code>, <code>maxSurge: 1</code>, and readiness probes, so that there is always at least one healthy pod available, and updates happen without any impact to users. The ultimate goal: ensure seamless, zero-downtime deployments in a real production environment.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><p>This use case demonstrates how to <strong>keep your service available 24/7</strong>, even while rolling out new code. By configuring Kubernetes Deployments with a rolling update strategy, you:</p><ul><li><p>Make sure there&#8217;s always at least the current version running and accepting traffic while new pods spin up.</p></li><li><p>Validate that each new pod is actually ready to serve requests before switching traffic over, using readiness and liveness probes.</p></li><li><p>Allow for safe, automated rollouts&#8212;so you don&#8217;t have to babysit deployments or worry about manual intervention.</p></li><li><p>Track which version is running where, using labels and selectors, making troubleshooting and rollback easier.</p></li></ul><p>This use case demonstrates the right way to implement zero-downtime deployments using Kubernetes' rolling update strategy. It walks you through:</p><ul><li><p>How to configure a Deployment so that new pods <em>must</em> become healthy before old ones are terminated.</p></li><li><p>How readiness and liveness probes actually safeguard traffic flow during updates.</p></li><li><p>The impact of deployment parameters like <code>maxUnavailable</code> and <code>maxSurge</code> on your rollout stability.</p></li><li><p>Using real YAML manifests and rollout commands to move from a broken deployment process (with real, observable 5xx errors) to a safe one.</p></li><li><p>Version tracking and troubleshooting using rollout history.</p></li></ul><p>In short: it&#8217;s a practical, step-by-step demo of how to <em>avoid downtime</em> and keep every update safe, controlled, and observable.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><ul><li><p>When users can&#8217;t tolerate downtime or dropped requests during updates (e-commerce, APIs, finance, gaming, etc.).</p></li><li><p>When your team needs to deploy often, and reliability is a higher priority than speed of deployment.</p></li><li><p>When you want to automate health checks and traffic routing, rather than relying on manual testing.</p></li><li><p>When you need easy rollback or version tracking for debugging and compliance.</p></li></ul><ul><li><p>Any time you have user-facing apps or APIs that can&#8217;t afford downtime during releases.</p></li><li><p>If your business or SLAs require high availability at all times.</p></li></ul><h2><strong>4. Challenge-Based Scenario Questions</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/mastering-azure-kubernetes-rolling-updates-how-to-deploy-backend-pods-without-a-second-of-downtime">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[No More Hardcoded Secrets: Azure Key Vault + AKS kubernetes Done Right]]></title><description><![CDATA[Real-World Approaches for Securely Consuming Azure Key Vault Secrets in AKS: File Mount vs Environment Variable Injection]]></description><link>https://careerbytecode.substack.com/p/secrets-made-easy-how-to-sync-azure-key-vault-with-kubernetes-using-external-secrets-operator</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/secrets-made-easy-how-to-sync-azure-key-vault-with-kubernetes-using-external-secrets-operator</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Wed, 06 Aug 2025 18:21:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!WvXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WvXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WvXN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!WvXN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!WvXN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!WvXN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WvXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:267787,&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://careerbytecode.substack.com/i/169988583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.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_!WvXN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!WvXN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!WvXN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!WvXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff722f30-ea38-4b23-8e85-34e4848e1ef5_1280x720.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></p><h2><strong>1. Problem Statement :</strong></h2><p>Most teams start by hardcoding secrets database passwords, API keys directly into Kubernetes YAML as environment variables. These files are versioned in Git, passed around, and often end up on developer laptops. Every person who can view the YAML can see every secret, in plain text. It&#8217;s a compliance and security nightmare. Even &#8220;Kubernetes secrets&#8221; aren&#8217;t much better they&#8217;re just base64, not encrypted at rest unless you explicitly configure it, and still live in etcd where anyone with cluster admin can see them.</p><p><strong>What problem do these methods solve?</strong></p><ul><li><p><strong>Method 1 (Mount as files):</strong> The app never sees secrets in environment variables. Secrets are pulled just-in-time from Azure Key Vault and mounted inside the pod as files. The secret exists only in memory, not in YAML, not in Git, not in etcd.</p></li><li><p><strong>Method 2 (Inject as env vars):</strong> For apps that <em>must</em> consume secrets as environment variables, you can still avoid hardcoding. Key Vault secrets are synced as native Kubernetes secrets, and then referenced as env vars. At no point is the real value ever exposed in your codebase or manifests.</p></li></ul><p>In both cases, you remove hardcoded secrets entirely from code, YAML, and Git, and you get full control, rotation, and auditing via Key Vault.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><h4>Why do we need both methods?</h4><p>Some apps expect secrets as files (classic .pem, .crt, .json configs), others need them as environment variables. A modern platform team needs a secure, automated way to deliver both <strong>without ever hardcoding or storing secrets in version control</strong>.</p><h4>What do these two approaches demonstrate?</h4><ul><li><p><strong>How to connect AKS to Azure Key Vault securely with managed identity (no passwords, no service principals).</strong></p></li><li><p><strong>How to mount secrets directly as files using the CSI Secrets Store Driver most secure for apps that can read files.</strong></p></li><li><p><strong>How to inject secrets as environment variables, by syncing them from Key Vault to Kubernetes secrets, and referencing in pod specs ideal for legacy apps.</strong></p></li><li><p><strong>End-to-end Infrastructure-as-Code with Terraform and YAML, so the pattern is repeatable and auditable.</strong></p></li></ul><p>Both methods cover almost every real-world need for consuming secrets in Kubernetes, the right way.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><p>You need this pattern when:</p><ul><li><p>You have <em>any</em> secret that shouldn&#8217;t live in your code repo or be managed manually</p></li><li><p>You must support both apps that read from files and those that expect environment variables</p></li><li><p>You want to rotate secrets instantly, across all pods, with a single change in Key Vault</p></li><li><p>You need a &#8220;zero trust&#8221; posture nothing in the cluster should trust static credentials</p></li><li><p>You&#8217;re working in regulated environments where auditability and RBAC matter</p><p></p></li></ul><h2><strong>4. Challenge Scenarios</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/secrets-made-easy-how-to-sync-azure-key-vault-with-kubernetes-using-external-secrets-operator">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Secure CI/CD Pipeline with Trivy, SonarQube, and Azure DevOps]]></title><description><![CDATA[Integrating DevSecOps in Azure DevOps: Automating Code Quality, Dependency Scanning, and Secure Deployments to Kubernetes]]></description><link>https://careerbytecode.substack.com/p/automating-secure-builds-with-azure-devops-trivy-integration-and-sonarqube</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/automating-secure-builds-with-azure-devops-trivy-integration-and-sonarqube</guid><dc:creator><![CDATA[Vijesh Vijayan Nair]]></dc:creator><pubDate>Tue, 08 Jul 2025 21:46:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!z_nZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!z_nZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!z_nZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!z_nZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!z_nZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!z_nZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!z_nZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/dd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:232282,&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://careerbytecode.substack.com/i/167448542?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.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_!z_nZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!z_nZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!z_nZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!z_nZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdd91cf72-e192-44f0-baa2-58d32a807dbe_1280x720.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></p><h2>1. Problem Statement</h2><p>In modern software development, ensuring <strong>code quality</strong> and <strong>application security</strong> throughout the CI/CD lifecycle is essential to avoid vulnerabilities reaching production. However, integrating tools for <strong>dependency scanning</strong>, <strong>container security</strong>, and <strong>code quality checks</strong> into a seamless DevSecOps pipeline can be complex and error-prone.</p><p>The objective of this lab is to build a complete CI/CD pipeline using Azure DevOps that emphasizes security at every stage of the software delivery process. This includes:</p><ul><li><p>Provisioning a self-hosted build agent with tools like Maven, Docker, Trivy, and SonarQube.</p></li><li><p>Running unit tests, code quality scans with SonarQube, and vulnerability scans using Trivy for both dependencies and Docker images.</p></li><li><p>Enforcing quality gates and fail conditions to prevent insecure or low-quality code from progressing in the pipeline.</p></li><li><p>Automatically building and pushing a secure Docker image to a registry.</p></li><li><p>Deploying the application to a Kubernetes cluster via a release pipeline.</p></li><li><p>Demonstrating secure SDLC principles with continuous integration and delivery triggers.</p></li></ul><p>This lab helps teams adopt <strong>DevSecOps practices</strong> by integrating security scanning and code validation early into the CI/CD pipeline, ensuring reliable and secure application delivery.</p><div><hr></div><h2>2. Why We Need This Use Case</h2><ul><li><p>To catch vulnerabilities and code quality issues early in the software delivery lifecycle.</p></li><li><p>To automate secure software delivery with consistent standards using Azure DevOps.</p></li><li><p>To eliminate manual scanning processes, ensuring repeatable and reliable CI/CD practices.</p></li><li><p>To empower developers with security insights through SonarQube and Trivy before code is merged or deployed.</p></li><li><p>To integrate DevSecOps culture into the development cycle with minimal resistance.</p></li></ul><p>This use case represents a real-world, production-ready solution to enforce &#8220;shift-left&#8221; security in CI/CD pipelines.</p><div><hr></div><h2>3. When We Need This Use Case</h2><ul><li><p>When building microservices or containerized applications for production.</p></li><li><p>When you need compliance with security or audit standards (e.g., OWASP, ISO).</p></li><li><p>When teams are deploying to Kubernetes clusters via automated release pipelines.</p></li><li><p>When traditional manual QA and security steps become bottlenecks.</p></li><li><p>When vulnerabilities in dependencies or images could risk your delivery speed or reputation.</p></li></ul><div><hr></div><h2>4. Challenge Scenario Questions</h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/automating-secure-builds-with-azure-devops-trivy-integration-and-sonarqube">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[End-to-End CI/CD Pipeline with Jenkins and Kubernetes on Windows Using WSL, Docker, and Minikube]]></title><description><![CDATA[In a typical enterprise software delivery lifecycle, achieving reliable, repeatable, and production-grade CI/CD workflows is essential.]]></description><link>https://careerbytecode.substack.com/p/end-to-end-cicd-devops-pipeline-with-jenkins-and-kubernetes-on-windows-using-wsl-docker-and-minikube</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/end-to-end-cicd-devops-pipeline-with-jenkins-and-kubernetes-on-windows-using-wsl-docker-and-minikube</guid><dc:creator><![CDATA[Manoj]]></dc:creator><pubDate>Sat, 28 Jun 2025 18:17:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!nBbd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nBbd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nBbd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!nBbd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!nBbd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!nBbd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nBbd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:249061,&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://careerbytecode.substack.com/i/166234902?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.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_!nBbd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!nBbd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!nBbd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!nBbd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faa4bfec2-f857-4434-9098-3f75a39647e2_1280x720.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></p><h2>1. <strong>Problem Statement:</strong></h2><p>In a typical enterprise software delivery lifecycle, achieving <strong>reliable, repeatable, and production-grade CI/CD workflows</strong> is essential. However, setting up and managing an <strong>end-to-end pipeline on Windows</strong> that includes <strong>building, testing, containerizing, pushing Docker images, and deploying to Kubernetes</strong> poses several challenges, especially for developers working in Windows-native environments.</p><p>Most DevOps tools like Jenkins, Docker, and Kubernetes are optimized for Linux, which leads to <strong>compatibility issues, configuration complexity, and environment mismatch</strong> when working on Windows machines. Manual setup also makes the pipeline fragile and hard to scale or replicate across teams.</p><div><hr></div><h2>2. <strong>Key Challenges:</strong></h2><ul><li><p>Jenkins, Docker, and Minikube must be <strong>integrated on a Windows machine using WSL</strong>, which is non-trivial and often undocumented.</p></li><li><p>Developers often lack access to <strong>real Kubernetes clusters</strong>, making local Minikube-based testing a crucial alternative.</p></li><li><p><strong>Docker builds and Kubernetes deployments from Jenkins</strong> need secure credential management, correct pipeline logic, and environmental compatibility.</p></li><li><p>Managing <strong>version control, CI pipeline stability, and deployment consistency</strong> across tools becomes overwhelming without automation.</p></li><li><p>Organizations need an <strong>affordable, portable CI/CD lab setup</strong> for learning, experimentation, and PoC deployments.</p></li></ul><div><hr></div><h3>3. <strong>Objective:</strong></h3><p>To design and implement a <strong>complete CI/CD pipeline</strong> using:</p><ul><li><p><strong>Jenkins</strong> (CI server running inside WSL)</p></li><li><p><strong>Docker</strong> (for containerization)</p></li><li><p><strong>Minikube</strong> (for local Kubernetes simulation)</p></li><li><p><strong>GitHub</strong> (for source code management)</p></li></ul><p>This pipeline should:</p><ul><li><p>Clone code from GitHub.</p></li><li><p>Build the application using Maven.</p></li><li><p>Package it into a Docker image and push it to Docker Hub.</p></li><li><p>Deploy the containerized app into a local Minikube Kubernetes cluster.</p></li><li><p>Ensure the entire process runs seamlessly on a <strong>Windows machine with WSL</strong>.</p></li></ul><p>The goal is to provide a <strong>portable, production-simulated environment for DevOps automation</strong>, especially for learners, small teams, and Windows users aiming to upskill in containerized CI/CD deployments.</p><div><hr></div><h2><strong>4. Why We Need This Use Case :</strong></h2><p>In a real-world DevOps workflow, setting up a full CI/CD pipeline that can build, test, containerize, and deploy applications is essential. This use case demonstrates how to achieve this using <strong>Jenkins</strong>, <strong>Docker</strong>, and <strong>Minikube</strong> Kubernetes&#8212;all running inside <strong>WSL (Ubuntu)</strong> on <strong>Windows</strong>.</p><p>This setup simulates a <strong>production-like pipeline environment</strong> even on a local Windows machine, which is highly useful for:</p><ul><li><p>Training DevOps engineers in real-world workflows.</p></li><li><p>Building and testing microservices locally before cloud deployment.</p></li><li><p>Prototyping CI/CD solutions for internal teams.</p></li><li><p>Enabling developers and testers to independently validate deployments.</p></li></ul><div><hr></div><h2><strong>5. When We Need This Use Case :</strong></h2><p>This use case is especially valuable in the following situations:</p><ul><li><p>&#9989; When developers or DevOps learners are restricted to <strong>Windows OS</strong> but want to practice <strong>Linux-based DevOps workflows</strong>.</p></li><li><p>&#9989; When a team needs a <strong>local simulation</strong> of an end-to-end CI/CD pipeline including Jenkins, Docker, and Kubernetes.</p></li><li><p>&#9989; When a Jenkins pipeline must <strong>build Docker images</strong>, <strong>push them to Docker Hub</strong>, and <strong>deploy to a Kubernetes cluster</strong>.</p></li><li><p>&#9989; When preparing for <strong>DevOps interviews or certifications</strong> requiring hands-on CI/CD implementation skills.</p></li><li><p>&#9989; When needing a <strong>lightweight, self-contained CI/CD setup</strong> without requiring Azure AKS, GKE, or EKS.</p></li></ul><div><hr></div><h2><strong>6. Challenge Questions :</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/end-to-end-cicd-devops-pipeline-with-jenkins-and-kubernetes-on-windows-using-wsl-docker-and-minikube">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Jenkins pipeline with SonarQube integration, publishing artifacts to Nexus.]]></title><description><![CDATA[Building a Scalable Jenkins Pipeline Integrated with SonarQube and Nexus for Version-Aware Artifact Management]]></description><link>https://careerbytecode.substack.com/p/building-a-cicd-pipeline-from-scratch-using-jenkins-sonarqube-and-nexus-for-secure-java-artifact-delivery</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/building-a-cicd-pipeline-from-scratch-using-jenkins-sonarqube-and-nexus-for-secure-java-artifact-delivery</guid><dc:creator><![CDATA[Vijesh Vijayan Nair]]></dc:creator><pubDate>Thu, 26 Jun 2025 19:47:51 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8fDV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png" 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_!8fDV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8fDV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!8fDV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!8fDV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!8fDV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8fDV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:248112,&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://careerbytecode.substack.com/i/166484101?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.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_!8fDV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!8fDV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!8fDV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!8fDV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b088d29-8d8c-4752-805f-8a51dff300bb_1280x720.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></p><p></p><h2>1. Problem Statement:</h2><p>In modern DevOps-driven environments, delivering high-quality, version-controlled software rapidly is crucial. Manual build, test, and release processes often lead to inconsistencies, security risks, and delayed deployments. To overcome this, organizations implement Continuous Integration and Continuous Delivery (CI/CD) pipelines that ensure automated builds, code quality checks, and artifact management.</p><p>However, a significant challenge lies in <strong>setting up a production-grade CI/CD ecosystem</strong> from scratch that supports:</p><ul><li><p><strong>Automated code quality analysis</strong></p></li><li><p><strong>Version-controlled artifact management</strong></p></li><li><p><strong>Seamless integration of developer workflows</strong></p></li><li><p><strong>Enforcement of proper version tagging for artifact traceability</strong></p></li></ul><p></p><h2><strong>2. Why We Need This Use Case</strong></h2><p>In the modern DevOps landscape, <strong>Continuous Integration and Continuous Delivery (CI/CD)</strong> are at the heart of delivering high-quality software faster. A properly configured CI/CD pipeline ensures:</p><ul><li><p>Rapid feedback through code analysis</p></li><li><p>Automated build and testing</p></li><li><p>Reliable artifact publishing for version control</p></li><li><p>Seamless developer workflows</p></li></ul><p><strong>Manual processes</strong> for these steps often result in:</p><ul><li><p>Missed code quality checks</p></li><li><p>Undocumented or inconsistent artifact versioning</p></li><li><p>Delay in feedback cycles</p></li><li><p>Security risks due to unverified code in production</p></li></ul><p>This use case addresses the automation of a <strong>production-grade CI/CD pipeline</strong> using:</p><ul><li><p><strong>Jenkins</strong> (Build &amp; Orchestration)</p></li><li><p><strong>SonarQube</strong> (Code Quality Analysis)</p></li><li><p><strong>Nexus</strong> (Artifact Repository)</p></li></ul><p>It promotes <strong>version discipline</strong>, enables <strong>traceability</strong>, and ensures <strong>continuous quality assurance</strong>, making the pipeline robust, scalable, and production-ready.</p><div><hr></div><h2><strong>3. When We Need This Use Case </strong></h2><p>You need this setup when:</p><ul><li><p>Your team is building <strong>Java-based applications</strong> with Maven.</p></li><li><p>There&#8217;s a need for a <strong>centralized code quality gate</strong> before releasing artifacts.</p></li><li><p>You want to <strong>version-control all builds</strong>, either as production releases or development snapshots.</p></li><li><p>Your organization is adopting <strong>DevSecOps</strong> practices and wants <strong>traceability</strong> in artifact flow.</p></li><li><p>You&#8217;re deploying across multiple environments (e.g., QA, UAT, Prod) and need consistent artifacts from a <strong>central repository (Nexus)</strong>.</p></li></ul><div><hr></div><h2><strong>4. Challenge Questions Based on Scenarios</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/building-a-cicd-pipeline-from-scratch-using-jenkins-sonarqube-and-nexus-for-secure-java-artifact-delivery">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Automate Everything: Install DevOps Tools (Java, Maven, Trivy, Docker, and Jenkins) on Linux with Ansible.]]></title><description><![CDATA[Automatically install Java, Maven, Trivy, Docker & Jenkins with smart reboot control.]]></description><link>https://careerbytecode.substack.com/p/automate-everything-install-devops-tools-java-maven-trivy-docker-and-jenkins-on-linux-with-ansible</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/automate-everything-install-devops-tools-java-maven-trivy-docker-and-jenkins-on-linux-with-ansible</guid><dc:creator><![CDATA[Vijesh Vijayan Nair]]></dc:creator><pubDate>Tue, 24 Jun 2025 20:44:21 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!m5TN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!m5TN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!m5TN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!m5TN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!m5TN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!m5TN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!m5TN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:254459,&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://careerbytecode.substack.com/i/166062331?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.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_!m5TN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!m5TN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!m5TN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!m5TN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ac10c33-4049-4177-bed7-a99cb52334ac_1280x720.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></p><h1>1. Problem Statement</h1><p>Setting up a consistent DevOps environment across multiple Linux machines is a critical task for ensuring productivity, stability, and standardization in modern software delivery pipelines. However, manually installing and configuring essential tools like <strong>Java</strong>, <strong>Maven</strong>, <strong>Trivy</strong>, <strong>Docker</strong>, and <strong>Jenkins</strong> on each server is time-consuming, error-prone, and difficult to scale.</p><p><strong>Current Challenge:</strong></p><ul><li><p>DevOps tools must be installed uniformly across multiple machines (slaves).</p></li><li><p>Manual setup introduces inconsistency, delays, and configuration drift.</p></li><li><p>Scaling environments or onboarding new servers becomes inefficient.</p></li></ul><p><strong>Objective:</strong></p><p>To automate the provisioning and installation of core DevOps tools across multiple Ansible-managed Linux nodes (slaves) using an <strong>Ansible controller</strong>, ensuring:</p><ul><li><p>Consistency in versions and configurations.</p></li><li><p>Quick setup for new nodes or environments.</p></li><li><p>Repeatable, scalable, and reliable infrastructure automation.</p></li></ul><p>This approach aligns with Infrastructure as Code (IaC) principles, enabling seamless, agentless automation that saves time, reduces errors, and accelerates environment readiness.</p><p></p><div><hr></div><h2>2. Why We Need This Use Case</h2><p>In a DevOps environment, teams rely on consistent tooling across development, testing, and production systems. Manually configuring multiple Linux-based nodes with essential DevOps tools like Java, Maven, Trivy, Docker, and Jenkins is time-consuming, error-prone, and hard to replicate.</p><p>This use case solves that by using <strong>Ansible</strong> &#8212; a powerful, agentless automation tool &#8212; to automate the setup of all required tools across multiple nodes in a consistent, scalable, and repeatable way.</p><p>The automation ensures:</p><ul><li><p><strong>Uniform tool versions and configurations</strong></p></li><li><p><strong>Rapid onboarding of new machines</strong></p></li><li><p><strong>Infrastructure as Code (IaC)</strong> principles enforced</p></li><li><p><strong>Minimized human errors</strong> and reduced downtime</p></li></ul><p>This scenario is ideal for DevOps engineers, system administrators, or students setting up real-time labs or production-grade environments.</p><div><hr></div><h2>3. When We Need This Use Case</h2><p>You need this use case when:</p><ul><li><p>Setting up a <strong>DevOps lab</strong> with uniform configurations across multiple VMs or bare-metal servers</p></li><li><p>Building <strong>CI/CD environments</strong> that require tools like Jenkins, Docker, Maven, and Trivy pre-installed</p></li><li><p>Performing <strong>infrastructure provisioning</strong> using code (IaC approach)</p></li><li><p>Automating the setup of new Linux environments in <strong>cloud or on-premise systems</strong></p></li><li><p>Delivering <strong>hands-on training</strong> or demos with identical server configurations for each student</p></li></ul><div><hr></div><h2>4. Challenge Questions </h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/automate-everything-install-devops-tools-java-maven-trivy-docker-and-jenkins-on-linux-with-ansible">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Build an End-to-End CI/CD Pipeline Using Azure DevOps, Docker, and AKS]]></title><description><![CDATA[Cloud-native application development, teams struggle to maintain consistent, automated, and scalable deployment workflows.]]></description><link>https://careerbytecode.substack.com/p/build-push-deploy-full-cicd-with-azure-devops-docker-hub-aks-self-hosted-agents</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/build-push-deploy-full-cicd-with-azure-devops-docker-hub-aks-self-hosted-agents</guid><dc:creator><![CDATA[CareerByteCode]]></dc:creator><pubDate>Tue, 17 Jun 2025 20:33:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NvZu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png" 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_!NvZu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NvZu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!NvZu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!NvZu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!NvZu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NvZu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:285584,&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://careerbytecode.substack.com/i/166183893?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.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_!NvZu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!NvZu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!NvZu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!NvZu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb8db7ac-7be9-487f-8b32-879f65290697_1280x720.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></p><h2>1. <strong>Problem Statement</strong></h2><p>In modern cloud-native application development, teams struggle to maintain consistent, automated, and scalable deployment workflows. Manual build and deployment processes lead to:</p><ul><li><p><strong>Frequent human errors</strong></p></li><li><p><strong>Deployment delays</strong></p></li><li><p><strong>Inconsistent environments</strong></p></li><li><p><strong>Lack of traceability and visibility</strong></p></li></ul><p>Organizations face challenges in:</p><ul><li><p>Seamlessly integrating <strong>code from GitHub</strong></p></li><li><p>Automating the <strong>Docker image creation and publishing</strong></p></li><li><p>Deploying the application into a <strong>production-grade Kubernetes environment</strong></p></li><li><p>Managing secure, scalable, and <strong>repeatable CI/CD pipelines</strong></p></li><li><p>Setting up <strong>self-hosted agents</strong> to optimize cost and performance</p></li></ul><p>There is a critical need for an <strong>end-to-end CI/CD pipeline</strong> that connects source code to production deployment using modern DevOps tools like <strong>Azure DevOps, Docker, and Azure Kubernetes Service (AKS)</strong>.</p><p>This use case aims to address these challenges by building a robust, automated pipeline that:</p><ul><li><p>Builds code from GitHub</p></li><li><p>Creates Docker images and pushes to Docker Hub</p></li><li><p>Deploys to AKS using Kubernetes manifests</p></li><li><p>Uses a <strong>self-hosted agent</strong> for cost-efficient and controlled execution</p></li></ul><p>The goal is to empower developers and operations teams to deliver faster, safer, and more reliable software deployments.</p><div><hr></div><h2>2. Why We Need This Use Case</h2><p>Modern applications demand rapid deployment, continuous feedback, and high availability. Manual deployments are time-consuming and error-prone. To address this, enterprises and developers are adopting <strong>CI/CD pipelines</strong> integrated with containerization and orchestration tools.</p><p>This use case enables:</p><ul><li><p>Full automation of <strong>build, test, and deployment</strong> lifecycle</p></li><li><p><strong>Faster delivery</strong> of new features through pipelines</p></li><li><p><strong>Reliable deployment</strong> to Kubernetes clusters using containerized apps</p></li><li><p>End-to-end management of infrastructure from <strong>source code to Kubernetes cluster</strong></p></li></ul><p>This bridges gaps between development and operations, increases agility, and ensures application resilience.</p><div><hr></div><h2>3. When We Need This Use Case</h2><p>You will need this setup when:</p><ul><li><p>Building and deploying container-based apps using <strong>Azure DevOps + Docker + Kubernetes</strong></p></li><li><p>You want to <strong>implement GitHub-to-Kubernetes deployment</strong> using CI/CD</p></li><li><p>Need <strong>custom self-hosted agents</strong> for consistent builds inside your Azure VM</p></li><li><p>Automating deployment of microservices to <strong>Azure Kubernetes Service (AKS)</strong></p></li><li><p>You are mentoring or training teams on <strong>enterprise DevOps automation pipelines</strong></p></li></ul><div><hr></div><h2>4. Challenge Questions</h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/build-push-deploy-full-cicd-with-azure-devops-docker-hub-aks-self-hosted-agents">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[From Bare Metal to Build-Ready: Setting Up Jenkins & Docker with Ansible]]></title><description><![CDATA[Trivy, Java, Maven, and more all in one streamlined playbook]]></description><link>https://careerbytecode.substack.com/p/from-bare-metal-to-build-devops-ready-setting-up-jenkins-docker-with-ansible</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/from-bare-metal-to-build-devops-ready-setting-up-jenkins-docker-with-ansible</guid><dc:creator><![CDATA[Vijesh Vijayan Nair]]></dc:creator><pubDate>Tue, 17 Jun 2025 19:52:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5c4B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png" 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_!5c4B!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5c4B!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!5c4B!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!5c4B!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!5c4B!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5c4B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:325839,&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://careerbytecode.substack.com/i/166062608?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.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_!5c4B!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!5c4B!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!5c4B!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!5c4B!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d9daf20-5e8e-4b3c-a800-149bbd8b233b_1280x720.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></p><h2>1. Problem Statement</h2><p>In the dynamic world of DevOps, speed, consistency, and scalability are critical. Setting up a complete CI/CD ecosystem including tools like <strong>Java</strong>, <strong>Maven</strong>, <strong>Docker</strong>, <strong>Jenkins</strong>, and <strong>Trivy</strong> on freshly launched <strong>EC2 instances</strong> often involves multiple manual steps. This traditional approach is not only time-consuming but also increases the risk of human error, version mismatches, and configuration drift.</p><p><strong>Current Challenge:</strong></p><ul><li><p>Manual setup of CI/CD tools on multiple EC2 instances is repetitive and error-prone.</p></li><li><p>Ensuring consistent configurations across environments is difficult.</p></li><li><p>Scaling the setup or replicating it in new environments requires rework and documentation.</p></li></ul><p><strong>Objective:</strong></p><p>To <strong>automate the provisioning, configuration, and validation</strong> of a complete CI/CD toolchain on AWS EC2 instances using <strong>Ansible</strong>, enabling:</p><ul><li><p>Faster and repeatable infrastructure setup.</p></li><li><p>Consistent tool versions and configurations.</p></li><li><p>Infrastructure as Code (IaC) practices for better manageability and scalability.</p></li></ul><p>This automation not only saves time but also lays the foundation for a robust, production-ready DevOps environment with minimal manual intervention.</p><p></p><h2>2. Why We Need This Use Case</h2><p>In the world of DevOps, toolchain automation is crucial for minimizing errors and accelerating setup times. Manual installations of Jenkins, Docker, Java, Maven, and security tools like Trivy on multiple EC2 machines are time-consuming and error-prone. Every time a new EC2 instance is launched, repeating these tasks becomes inefficient.</p><p>Using <strong>Ansible with role-based modular automation</strong>, you can achieve:</p><ul><li><p><strong>Idempotent configurations</strong>: The playbooks can be rerun without breaking existing setups.</p></li><li><p><strong>Consistent environments</strong>: Ensures all machines have the same software versions and configurations.</p></li><li><p><strong>Infrastructure as Code (IaC)</strong>: Configuration is version-controlled, repeatable, and scalable.</p></li><li><p><strong>Faster onboarding</strong>: New build machines or Jenkins agents can be ready in minutes.</p></li><li><p><strong>Security validation</strong>: With Trivy integrated, vulnerability scanning is automatic during setup.</p></li></ul><p>This use case directly supports CI/CD maturity, production-readiness, and DevOps excellence.</p><div><hr></div><h2>3. When We Need This Use Case</h2><p>This use case becomes essential when:</p><ul><li><p>You are <strong>launching new AWS EC2 instances</strong> for a CI/CD environment.</p></li><li><p>Your team wants <strong>repeatable and error-free deployments</strong> of common DevOps tools.</p></li><li><p>You need <strong>fast infrastructure provisioning</strong> to scale Jenkins agents or Docker build servers.</p></li><li><p>You are <strong>migrating from manual setups to Infrastructure as Code</strong> practices.</p></li><li><p>You&#8217;re running <strong>multi-environment configurations</strong> (dev, staging, prod) and want consistent setups.</p></li><li><p>You want to <strong>train teams</strong> or students on real-world infrastructure automation with Ansible.</p></li></ul><div><hr></div><h2>4. Challenge Questions</h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/from-bare-metal-to-build-devops-ready-setting-up-jenkins-docker-with-ansible">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Securely Hosting Multiple Applications on Kubernetes Using NGINX Ingress and Let's Encrypt TLS]]></title><description><![CDATA[Step-by-Step TLS Setup with Ingress Controller and Let's Encrypt]]></description><link>https://careerbytecode.substack.com/p/securely-hosting-multiple-applications-on-kubernetes-using-nginx-ingress-and-lets-encrypt-tls</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/securely-hosting-multiple-applications-on-kubernetes-using-nginx-ingress-and-lets-encrypt-tls</guid><dc:creator><![CDATA[Vijesh Vijayan Nair]]></dc:creator><pubDate>Tue, 13 May 2025 13:53:22 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!KR82!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png" 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_!KR82!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KR82!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!KR82!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!KR82!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!KR82!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KR82!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d04e2874-1253-404a-ad46-89f408abfafe_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:236242,&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://careerbytecode.substack.com/i/163320816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.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_!KR82!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!KR82!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!KR82!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!KR82!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04e2874-1253-404a-ad46-89f408abfafe_1280x720.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></p><p></p><h2><strong>1. Problem Statement</strong></h2><p>In a typical Kubernetes setup, exposing multiple applications securely over the internet presents a variety of challenges. By default, each application often requires its own Load Balancer or NodePort, which leads to unnecessary cost, complexity, and management overhead&#8212;especially in cloud environments like Azure Kubernetes Service (AKS).</p><p>Additionally, enabling HTTPS (TLS/SSL) for secure communication traditionally requires manual generation, installation, and renewal of certificates, which is not scalable for a growing number of applications. For developers and DevOps engineers, managing these processes becomes tedious, error-prone, and inefficient.</p><p>Furthermore, managing DNS records across different cloud platforms and domain registrars adds another layer of complexity, especially when applications must be routed under different paths or subdomains from a single public endpoint.</p><p>This use case addresses these challenges by building a unified, scalable, and secure solution using:</p><ul><li><p><strong>NGINX Ingress Controller</strong> for intelligent traffic routing within Kubernetes.</p></li><li><p><strong>Let&#8217;s Encrypt</strong> with <strong>cert-manager</strong> for automatic TLS certificate management.</p></li><li><p><strong>AWS Route 53</strong> and <strong>custom domain configuration</strong> for simplified DNS management.</p></li><li><p>A single public IP to host multiple apps under different paths (e.g., <code>/nginx</code>, <code>/apache</code>).</p></li></ul><p>The goal is to reduce cost, simplify architecture, automate certificate renewal, and expose multiple containerized applications securely&#8212;without complex manual configurations&#8212;by leveraging open-source tools and cloud-native services.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-WGX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-WGX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 424w, https://substackcdn.com/image/fetch/$s_!-WGX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 848w, https://substackcdn.com/image/fetch/$s_!-WGX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 1272w, https://substackcdn.com/image/fetch/$s_!-WGX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-WGX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png" width="742" height="744" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:744,&quot;width&quot;:742,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&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="" srcset="https://substackcdn.com/image/fetch/$s_!-WGX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 424w, https://substackcdn.com/image/fetch/$s_!-WGX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 848w, https://substackcdn.com/image/fetch/$s_!-WGX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.png 1272w, https://substackcdn.com/image/fetch/$s_!-WGX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0f9a828-cd80-4270-8afc-84ef7ee5fade_742x744.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><h2><strong>2. Why We Need This Use Case</strong></h2><p>In modern DevOps and cloud-native architecture, deploying multiple applications securely over the internet is a common requirement. With Kubernetes becoming the backbone of container orchestration, it is crucial to understand how to expose these services externally in a secure, scalable, and cost-effective manner.</p><p>This use case teaches us how to:</p><ul><li><p><strong>Host multiple web applications on a single domain</strong> using Kubernetes.</p></li><li><p>Implement <strong>NGINX Ingress Controller</strong> to manage traffic routing based on URL paths.</p></li><li><p>Use <strong>Let&#8217;s Encrypt</strong> and <strong>cert-manager</strong> to automatically generate and renew <strong>TLS/SSL certificates</strong>, securing your applications with HTTPS.</p></li><li><p>Integrate <strong>AWS Route 53</strong> for DNS management and <strong>Azure Kubernetes Service (AKS)</strong> for hosting the cluster.</p></li></ul><p>The setup mimics a real-world production environment and addresses key challenges such as secure routing, domain validation, certificate management, and application exposure&#8212;all through open-source tools and native cloud services.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><p>You&#8217;ll need this use case when:</p><ul><li><p>You are deploying <strong>multiple web applications</strong> on a Kubernetes cluster and want them accessible securely over the internet.</p></li><li><p>You want to <strong>route traffic</strong> based on path or subdomain using a centralized Ingress Controller.</p></li><li><p>You need a <strong>cost-effective way</strong> to manage HTTPS/TLS certificates without buying expensive third-party SSL certs.</p></li><li><p>You&#8217;re building <strong>CI/CD pipelines</strong> that include infrastructure-as-code (IaC) and want to automate secure deployments.</p></li><li><p>You want to <strong>learn or demonstrate</strong> real-world Kubernetes skills like DNS setup, ingress configuration, and TLS termination in a hands-on way.</p></li><li><p>Your organization is migrating from monoliths to microservices and needs a robust traffic management and SSL solution.</p></li></ul><div><hr></div><h2><strong>4. Challenge Questions </strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/securely-hosting-multiple-applications-on-kubernetes-using-nginx-ingress-and-lets-encrypt-tls">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Deploy Custom Image in to Azure Kubernetes from Azure Container Registry using docker and Azure CLI]]></title><description><![CDATA[Organizations often need to deploy custom web applications packaged as Docker containers to scalable, secure, and highly available environments.]]></description><link>https://careerbytecode.substack.com/p/end-to-end-guide-deploying-custom-docker-images-from-azure-container-registry-to-azure-kubernetes-using-azure-cli</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/end-to-end-guide-deploying-custom-docker-images-from-azure-container-registry-to-azure-kubernetes-using-azure-cli</guid><dc:creator><![CDATA[Ranjith Nagamani]]></dc:creator><pubDate>Mon, 12 May 2025 08:36:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Ms9F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png" 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_!Ms9F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ms9F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!Ms9F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!Ms9F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!Ms9F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ms9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a607e205-7dba-4b4f-91a9-83f533026310_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:265038,&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://careerbytecode.substack.com/i/163330058?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.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_!Ms9F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!Ms9F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!Ms9F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!Ms9F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa607e205-7dba-4b4f-91a9-83f533026310_1280x720.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></p><h2>1. Problem Statement :</h2><p>Organizations often need to deploy custom web applications packaged as Docker containers to scalable, secure, and highly available environments. However, challenges arise when developers must:</p><ul><li><p>Build and package applications into Docker images.</p></li><li><p>Store and manage these container images securely.</p></li><li><p>Deploy these images into a Kubernetes cluster in the cloud.</p></li><li><p>Ensure authentication and seamless communication between Azure Kubernetes Service (AKS) and Azure Container Registry (ACR).</p></li></ul><p>This use case addresses the end-to-end automation of deploying a custom Nginx-based Docker image into Azure Kubernetes using Azure CLI. It simplifies how developers can build images locally, push them to ACR, and deploy them in AKS with proper access and namespace management&#8212;all from a single Ubuntu VM.</p><p>The core problem solved here is <strong>integrating Docker image creation, secure storage in Azure Container Registry, and seamless deployment into Azure Kubernetes Service using CLI-based automation</strong>, without needing any external tools or pipelines.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><p>In today&#8217;s cloud-native environments, the ability to create, store, and deploy containerized applications efficiently is vital for modern DevOps workflows. Organizations require a streamlined process to:</p><ul><li><p><strong>Build custom container images</strong>, tailored to their specific web applications.</p></li><li><p><strong>Securely store these images</strong> in a centralized and scalable registry.</p></li><li><p><strong>Deploy these images</strong> into a managed Kubernetes environment for scalability, high availability, and automation.</p></li></ul><p>This use case demonstrates the complete lifecycle of application deployment in a real-world Azure DevOps scenario. It helps DevOps engineers and cloud practitioners understand how to leverage <strong>Docker for image creation</strong>, <strong>Azure Container Registry (ACR) for storage</strong>, and <strong>Azure Kubernetes Service (AKS) for deployment</strong> using only CLI commands&#8212;essential for automation and scripting.</p><p>This end-to-end implementation mirrors what happens in production, where development teams package apps, push them to a secure registry, and deploy them to scalable infrastructure&#8212;all while maintaining security and CI/CD readiness.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><ul><li><p>When developers have a <strong>custom web application</strong> (like a modified NGINX server or app frontend) that needs to be containerized and made production-ready.</p></li><li><p>When organizations want to <strong>automate Kubernetes deployments</strong> directly from a private registry like ACR.</p></li><li><p>When transitioning from VM-based deployments to <strong>containerized and orchestrated environments</strong> for scalability and better resource management.</p></li><li><p>When training DevOps engineers to <strong>master cross-service integrations in Azure</strong>, such as Docker, ACR, and AKS.</p></li><li><p>In DevOps interviews and technical evaluations where <strong>hands-on implementation of build-and-deploy pipelines</strong> is tested.</p></li></ul><div><hr></div><h2><strong>4. Challenge Questions</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/end-to-end-guide-deploying-custom-docker-images-from-azure-container-registry-to-azure-kubernetes-using-azure-cli">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Cross-Cloud CI/CD in Action: Jenkins on GCP Deploying to AWS]]></title><description><![CDATA[Automate App Deployments Across Cloud Platforms Seamlessly]]></description><link>https://careerbytecode.substack.com/p/cross-cloud-cicd-in-action-jenkins-devops-on-gcp-deploying-to-aws-cloud</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/cross-cloud-cicd-in-action-jenkins-devops-on-gcp-deploying-to-aws-cloud</guid><dc:creator><![CDATA[Vijesh Vijayan Nair]]></dc:creator><pubDate>Fri, 09 May 2025 21:50:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BiSK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png" 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_!BiSK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BiSK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!BiSK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!BiSK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!BiSK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BiSK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:236072,&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://careerbytecode.substack.com/i/162966505?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.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_!BiSK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!BiSK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!BiSK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!BiSK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35a1b203-f086-422d-8c16-3d288e60f681_1280x720.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></p><h2><strong>1. Problem Statement</strong></h2><p>In modern DevOps environments, organizations are increasingly adopting <strong>multi-cloud architectures</strong> to optimize for performance, cost, and compliance. However, this introduces significant challenges in maintaining a <strong>unified and efficient CI/CD pipeline</strong> that spans across cloud boundaries. Most traditional CI/CD solutions are designed to operate within a single cloud ecosystem, creating <strong>silos between development and deployment environments</strong> when different cloud platforms are involved.</p><p>The specific problem this use case addresses is:</p><blockquote><p><strong>"How can we design and implement a secure, reliable, and automated CI/CD pipeline using Jenkins hosted on Google Cloud Platform (GCP) that can deploy and manage application updates to a production environment running on Amazon Web Services (AWS EC2)?"</strong></p></blockquote><p>This challenge involves solving real-world complexities such as:</p><ul><li><p><strong>Secure cross-cloud communication</strong> between Jenkins and remote EC2 instances</p></li><li><p><strong>Automation of app packaging, deployment, and service management</strong></p></li><li><p><strong>Triggering builds from GitHub events and ensuring seamless deployment flow</strong></p></li><li><p><strong>Overcoming network, permission, and infrastructure compatibility issues between clouds</strong></p></li></ul><p>This use case provides a <strong>practical, hands-on solution</strong> to building <strong>cloud-agnostic DevOps pipelines</strong>, a skill set that is increasingly demanded by modern IT organizations and a common topic in DevOps/SRE interviews.</p><div><hr></div><h2><strong>2. Why We Need This Use Case</strong></h2><p>In today&#8217;s increasingly hybrid cloud landscape, enterprises are adopting a <strong>multi-cloud strategy</strong> to leverage the unique strengths of different cloud providers. For example, an organization might choose <strong>Google Cloud Platform (GCP)</strong> for its superior data analytics tools and <strong>AWS</strong> for its reliable compute infrastructure. However, with this hybrid architecture comes the <strong>need for seamless CI/CD pipelines</strong> that work <strong>across clouds</strong>.</p><p>Traditional DevOps pipelines typically operate within a single cloud environment, but <strong>cross-cloud CI/CD enables flexibility, redundancy, and optimal cost management</strong>. This use case showcases how Jenkins, hosted on a <strong>GCP virtual machine</strong>, can be used to <strong>deploy a Python Flask application</strong> onto an <strong>AWS EC2 instance</strong>. It provides a practical implementation of cross-cloud deployment, serving as a <strong>blueprint for scalable, cloud-agnostic DevOps workflows</strong>.</p><div><hr></div><h2><strong>3. When We Need This Use Case</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/cross-cloud-cicd-in-action-jenkins-devops-on-gcp-deploying-to-aws-cloud">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Infrastructure-as-Code in Action: Automated NGINX Setup on Ubuntu via Ansible]]></title><description><![CDATA[There is a need to install the nginx package on multiple Ubuntu-based web servers to prepare a consistent environment for an upcoming project.]]></description><link>https://careerbytecode.substack.com/p/devops-fast-track-setup-nginx-web-servers-on-azure-ubuntu-vms-using-ansible</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/devops-fast-track-setup-nginx-web-servers-on-azure-ubuntu-vms-using-ansible</guid><dc:creator><![CDATA[Raghavendra]]></dc:creator><pubDate>Thu, 08 May 2025 21:22:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!r_wN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png" 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_!r_wN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r_wN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!r_wN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!r_wN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!r_wN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r_wN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:294280,&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://careerbytecode.substack.com/i/163122515?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.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_!r_wN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!r_wN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!r_wN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!r_wN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68b3bfe5-bc49-4ecc-8966-790ecbfaedec_1280x720.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><h2></h2><h2><strong>1. Problem Statement</strong></h2><p>There is a need to install the <strong>nginx</strong> package on multiple <strong>Ubuntu-based web servers</strong> to prepare a consistent environment for an upcoming project. The goal is to automate this process to minimize manual effort, reduce errors, and ensure uniformity across all servers.</p><div><hr></div><h2><strong>2. Scope of Work</strong></h2><p>Automate the installation and configuration of the <strong>nginx</strong> web server on all target Ubuntu machines using <strong>Ansible</strong>. The solution should:</p><ul><li><p>Install the <strong>nginx</strong> package.</p></li><li><p>Ensure the <strong>nginx</strong> service is started.</p></li><li><p>Enable the service to start automatically on system boot.</p></li><li><p>Be <strong>idempotent</strong>, so repeated runs do not reinstall or reconfigure unnecessarily.</p></li></ul><div><hr></div><h2><strong>3. Ansible Modules to Be Used</strong></h2><ul><li><p><code>apt</code>: To install the nginx package with the latest version.</p></li><li><p><code>service</code>: To start and enable the nginx service.</p></li></ul><div><hr></div><h2><strong>4. Approach</strong></h2><p>Create an <strong>Ansible playbook</strong> that performs the following tasks:</p><ol><li><p>Use the <code>apt</code> module to install <strong>nginx</strong> with <code>state: latest</code> to ensure the most recent version is present and avoid reinstallation if already installed.</p></li><li><p>Use the <code>service</code> module to:</p><ul><li><p>Start the <strong>nginx</strong> service.</p></li><li><p>Enable it to launch at system boot.</p></li></ul></li></ol><p>This approach ensures a reliable, repeatable, and efficient configuration process across all Ubuntu servers in the environment.</p><div><hr></div><h2><strong>5. Why We Need This Use Case:</strong></h2><p>Manually installing packages across multiple servers can lead to inconsistencies and increased human error. Automating this process using Ansible ensures consistent package management, saves time, and eliminates the need for repetitive manual steps. It is essential for setting up environments like web servers uniformly across all nodes.</p><div><hr></div><h2><strong>6. When We Need This Use Case:</strong></h2><ul><li><p>Setting up new web server environments on multiple Ubuntu machines.</p></li><li><p>During deployment of a standardized tech stack across dev and prod environments.</p></li><li><p>When scaling out applications requiring uniform configuration.</p></li><li><p>For maintaining infrastructure-as-code principles.</p></li><li><p>In DevOps workflows to reduce manual system administration.</p></li></ul><div><hr></div><h2><strong>7. Challenge Questions Based on Scenarios:</strong></h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/devops-fast-track-setup-nginx-web-servers-on-azure-ubuntu-vms-using-ansible">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[Understanding AZURE Blob Storage Tiers: Hot, Cool, and Archive Explained]]></title><description><![CDATA[Understand what AZURE lifecycle management is and why it matters for data durability and cost savings.]]></description><link>https://careerbytecode.substack.com/p/azure-blob-lifecycle-management-an-introduction-to-automated-tiering-blob-storage-tiers-hot-cool-and-archive-explained</link><guid isPermaLink="false">https://careerbytecode.substack.com/p/azure-blob-lifecycle-management-an-introduction-to-automated-tiering-blob-storage-tiers-hot-cool-and-archive-explained</guid><dc:creator><![CDATA[sonali kurade]]></dc:creator><pubDate>Thu, 01 May 2025 20:43:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3agt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png" 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_!3agt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3agt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!3agt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!3agt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!3agt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3agt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png" width="1280" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:243185,&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://careerbytecode.substack.com/i/161595946?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.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_!3agt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 424w, https://substackcdn.com/image/fetch/$s_!3agt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 848w, https://substackcdn.com/image/fetch/$s_!3agt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.png 1272w, https://substackcdn.com/image/fetch/$s_!3agt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F143d3060-9ac5-404b-8fdd-dd4516fd1f54_1280x720.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></p><h2><br>1. <strong>Problem Statement: </strong></h2><h4><strong>Azure Lifecycle Management &#8211; Automate Tiering (Hot &#8594; Cool &#8594; Archive)</strong></h4><p>Modern cloud applications generate and store massive amounts of data in Azure Blob Storage. While some of this data needs frequent access (Hot tier), a large portion becomes infrequently accessed over time (Cool) or must be retained for compliance and auditing (Archive). Manually identifying and moving blobs between access tiers is inefficient, error-prone, and costly. Without automation, organizations often face higher storage costs and compliance risks.</p><p><strong>The challenge is to implement an automated lifecycle management policy</strong> that optimally transitions blobs from Hot to Cool to Archive based on defined criteria such as last modified date or naming patterns (prefix), while maintaining compliance and minimizing storage costs.</p><p>You are required to:</p><ul><li><p>Configure a <strong>GPv2 storage account</strong> with lifecycle rules.</p></li><li><p>Define <strong>custom policies</strong> that automatically move blobs across access tiers.</p></li><li><p>Use <strong>Azure Portal or automation (CLI/ARM templates)</strong> to apply these policies.</p></li><li><p>Ensure that all blobs meet prerequisites (correct tiers, supported types, containers).</p></li><li><p>Validate that data moves as expected and complies with retention strategies.</p></li></ul><p>This lab focuses on building and applying practical lifecycle management policies that enable organizations to manage data at scale in a <strong>cost-efficient</strong>, <strong>automated</strong>, and <strong>compliant</strong> manner.</p><p></p><h2>2. Why We Need This Use Case</h2><p>As organizations increasingly rely on cloud platforms for data storage, managing storage costs and performance becomes crucial. In Azure Blob Storage, data is stored in three primary tiers: <strong>Hot</strong>, <strong>Cool</strong>, and <strong>Archive</strong>&#8212;each optimized for different access patterns and cost models.</p><p>Without a lifecycle management strategy:</p><ul><li><p>Frequently accessed (hot) data remains in expensive storage even when no longer needed.</p></li><li><p>Manual transitions between tiers are labor-intensive and error-prone.</p></li><li><p>Data required for compliance may be accidentally deleted or not archived properly.</p></li></ul><p>This use case helps organizations <strong>automate the transition of blobs</strong> based on their age or last access/modification date. It allows:</p><ul><li><p><strong>Cost optimization</strong> by automatically moving older or less-used data to cheaper tiers.</p></li><li><p><strong>Compliance enforcement</strong> by retaining data for fixed durations or archiving it securely.</p></li><li><p><strong>Operational efficiency</strong> by eliminating manual data tiering and reducing the risk of human error.</p></li></ul><div><hr></div><h2>3. When We Need This Use Case</h2><p>You need this use case in the following scenarios:</p><ul><li><p><strong>Massive Data Accumulation</strong>: When applications, logging systems, or data pipelines are generating large amounts of blob data daily.</p></li><li><p><strong>Cost Management</strong>: When you're looking to reduce Azure costs by automatically shifting less-used data from premium (Hot) to low-cost (Cool/Archive) tiers.</p></li><li><p><strong>Data Lifecycle Policies</strong>: When you want to align storage with compliance requirements like retaining data for 7 years.</p></li><li><p><strong>Data Analytics Pipelines</strong>: When historical data is accessed only occasionally but must be retained for audit or reporting.</p></li><li><p><strong>Cold Storage Use Cases</strong>: When backups, logs, and archives must be retained securely without being frequently accessed.</p></li></ul><div><hr></div><h2>4. Challenge Questions </h2><p></p>
      <p>
          <a href="https://careerbytecode.substack.com/p/azure-blob-lifecycle-management-an-introduction-to-automated-tiering-blob-storage-tiers-hot-cool-and-archive-explained">
              Read more
          </a>
      </p>
   ]]></content:encoded></item></channel></rss>