<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aisalkyn Aidarova</title>
    <description>The latest articles on DEV Community by Aisalkyn Aidarova (@jumptotech).</description>
    <link>https://dev.to/jumptotech</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3549986%2F7a403ca9-0459-412a-b618-71699480d58d.png</url>
      <title>DEV Community: Aisalkyn Aidarova</title>
      <link>https://dev.to/jumptotech</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jumptotech"/>
    <language>en</language>
    <item>
      <title>Lab – Route 53 + Custom Domain + HTTPS (AWS Certificate Manager)</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 27 Jul 2026 01:41:15 +0000</pubDate>
      <link>https://dev.to/jumptotech/lab-route-53-custom-domain-https-aws-certificate-manager-kl8</link>
      <guid>https://dev.to/jumptotech/lab-route-53-custom-domain-https-aws-certificate-manager-kl8</guid>
      <description>&lt;h1&gt;
  
  
  Lab Goal
&lt;/h1&gt;

&lt;p&gt;So far, your application is running on Amazon ECS behind an Application Load Balancer.&lt;/p&gt;

&lt;p&gt;Right now your application URL probably looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://restaurant-alb-123456789.us-east-1.elb.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This URL works, but it doesn't look professional.&lt;/p&gt;

&lt;p&gt;Real companies use custom domains such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.netflix.com" rel="noopener noreferrer"&gt;www.netflix.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.amazon.com" rel="noopener noreferrer"&gt;www.amazon.com&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.apple.com" rel="noopener noreferrer"&gt;www.apple.com&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By the end of this lab you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect your domain to your ALB.&lt;/li&gt;
&lt;li&gt;Learn how DNS works.&lt;/li&gt;
&lt;li&gt;Create a Route 53 Hosted Zone.&lt;/li&gt;
&lt;li&gt;Point your domain to your ALB.&lt;/li&gt;
&lt;li&gt;Secure your website with HTTPS.&lt;/li&gt;
&lt;li&gt;Request a free SSL certificate using AWS Certificate Manager (ACM).&lt;/li&gt;
&lt;li&gt;Redirect HTTP traffic to HTTPS.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Production Architecture
&lt;/h1&gt;

&lt;p&gt;Before this lab&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users

↓

ALB DNS Name

↓

Application Load Balancer

↓

Amazon ECS

↓

Containers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this lab&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users

↓

www.myrestaurant.com

↓

Route 53

↓

Application Load Balancer (HTTPS)

↓

Amazon ECS

↓

Containers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Why Do Companies Use Route 53?
&lt;/h1&gt;

&lt;p&gt;Imagine opening Amazon.&lt;/p&gt;

&lt;p&gt;You type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.amazon.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You never type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;amazon-alb-8723467.us-east-1.elb.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That long address belongs to AWS.&lt;/p&gt;

&lt;p&gt;Customers don't want to remember long AWS addresses.&lt;/p&gt;

&lt;p&gt;Instead,&lt;/p&gt;

&lt;p&gt;companies buy a domain.&lt;/p&gt;

&lt;p&gt;Route 53 tells the Internet:&lt;/p&gt;

&lt;p&gt;"When someone types this domain, send them to my Load Balancer."&lt;/p&gt;




&lt;h1&gt;
  
  
  What is DNS?
&lt;/h1&gt;

&lt;p&gt;DNS stands for&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Domain Name System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of DNS as the Internet's phone book.&lt;/p&gt;

&lt;p&gt;People remember&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.google.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Computers understand&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;142.250.72.206
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;DNS translates names into addresses.&lt;/p&gt;

&lt;p&gt;Without DNS,&lt;/p&gt;

&lt;p&gt;people would need to remember IP addresses.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is Route 53?
&lt;/h1&gt;

&lt;p&gt;Amazon Route 53 is AWS's DNS service.&lt;/p&gt;

&lt;p&gt;It allows you to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Register domains&lt;/li&gt;
&lt;li&gt;Manage DNS records&lt;/li&gt;
&lt;li&gt;Connect domains to AWS services&lt;/li&gt;
&lt;li&gt;Route users to your application&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Part 1 – Buy a Domain
&lt;/h1&gt;

&lt;p&gt;If you already own a domain,&lt;/p&gt;

&lt;p&gt;you can use it.&lt;/p&gt;

&lt;p&gt;Examples:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myrestaurant.com

jumptotech.com

studentproject.net
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you do not own one,&lt;/p&gt;

&lt;p&gt;purchase one from:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route 53&lt;/li&gt;
&lt;li&gt;Namecheap&lt;/li&gt;
&lt;li&gt;GoDaddy&lt;/li&gt;
&lt;li&gt;Squarespace Domains&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For this lab we assume you already have one.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 2 – Create a Hosted Zone
&lt;/h1&gt;

&lt;p&gt;Open&lt;/p&gt;

&lt;p&gt;AWS Console&lt;/p&gt;

&lt;p&gt;Search&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Route 53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Hosted Zones
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Hosted Zone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill in&lt;/p&gt;

&lt;p&gt;Domain Name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Public Hosted Zone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Hosted Zone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Why Public Hosted Zone?
&lt;/h1&gt;

&lt;p&gt;A Public Hosted Zone allows anyone on the Internet to reach your website.&lt;/p&gt;

&lt;p&gt;Private Hosted Zones are used only inside AWS VPCs.&lt;/p&gt;

&lt;p&gt;For websites,&lt;/p&gt;

&lt;p&gt;always choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Public Hosted Zone
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 3 – Understand the Records
&lt;/h1&gt;

&lt;p&gt;AWS automatically creates:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;NS

SOA
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Do not delete them.&lt;/p&gt;

&lt;p&gt;These records are required for DNS to work.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 4 – Create an Alias Record
&lt;/h1&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Record
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose&lt;/p&gt;

&lt;p&gt;Record Type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;A
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Turn ON&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Alias
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alias Target&lt;/p&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application Load Balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select your ALB.&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-alb
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Record
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Now&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;points to your Load Balancer.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Do We Use an Alias Record?
&lt;/h1&gt;

&lt;p&gt;Normally,&lt;/p&gt;

&lt;p&gt;an A record points to an IP address.&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;192.168.1.20
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;But an AWS Load Balancer does not have one fixed IP address.&lt;/p&gt;

&lt;p&gt;Its IP addresses can change.&lt;/p&gt;

&lt;p&gt;Instead,&lt;/p&gt;

&lt;p&gt;AWS provides an Alias Record.&lt;/p&gt;

&lt;p&gt;The Alias automatically follows your Load Balancer even if its IP addresses change.&lt;/p&gt;

&lt;p&gt;This is why AWS recommends using Alias records with ALBs.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 5 – Test the Website
&lt;/h1&gt;

&lt;p&gt;Wait a few minutes.&lt;/p&gt;

&lt;p&gt;Open your browser.&lt;/p&gt;

&lt;p&gt;Visit&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your website should load.&lt;/p&gt;

&lt;p&gt;If it does,&lt;/p&gt;

&lt;p&gt;Route 53 is working correctly.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why is the Website Still Not Secure?
&lt;/h1&gt;

&lt;p&gt;Look at your browser.&lt;/p&gt;

&lt;p&gt;You will probably see&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Not Secure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because your website is still using&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;instead of&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTPS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  What is HTTPS?
&lt;/h1&gt;

&lt;p&gt;HTTP sends information without encryption.&lt;/p&gt;

&lt;p&gt;Anyone between the user and your website could potentially read the traffic.&lt;/p&gt;

&lt;p&gt;HTTPS encrypts all communication.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login information&lt;/li&gt;
&lt;li&gt;Credit card numbers&lt;/li&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;Personal information&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Modern websites always use HTTPS.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is AWS Certificate Manager (ACM)?
&lt;/h1&gt;

&lt;p&gt;AWS Certificate Manager creates SSL certificates.&lt;/p&gt;

&lt;p&gt;Certificates prove that your website really belongs to you.&lt;/p&gt;

&lt;p&gt;Good news:&lt;/p&gt;

&lt;p&gt;AWS ACM public certificates are free to use with supported AWS services like an ALB.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 6 – Request a Certificate
&lt;/h1&gt;

&lt;p&gt;Open&lt;/p&gt;

&lt;p&gt;AWS Console&lt;/p&gt;

&lt;p&gt;Search&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Certificate Manager
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request Certificate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request a Public Certificate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Domain Name&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also add&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;www.myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Next
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Validation Method&lt;/p&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DNS Validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Request
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Why DNS Validation?
&lt;/h1&gt;

&lt;p&gt;AWS must verify that you own the domain.&lt;/p&gt;

&lt;p&gt;Instead of sending an email,&lt;/p&gt;

&lt;p&gt;AWS asks you to create a DNS record.&lt;/p&gt;

&lt;p&gt;This is easier and renews automatically while the DNS validation record remains in place.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 7 – Validate the Certificate
&lt;/h1&gt;

&lt;p&gt;Open the certificate.&lt;/p&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Records in Route 53
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;AWS automatically creates the required DNS validation record.&lt;/p&gt;

&lt;p&gt;Wait a few minutes.&lt;/p&gt;

&lt;p&gt;Certificate status changes from&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pending Validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Issued
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Only after the status becomes &lt;strong&gt;Issued&lt;/strong&gt; can the certificate be attached to your Load Balancer.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 8 – Add HTTPS to the ALB
&lt;/h1&gt;

&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2

↓

Load Balancers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select your ALB.&lt;/p&gt;

&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Listeners and Rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Listener
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTPS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Port&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Certificate&lt;/p&gt;

&lt;p&gt;Select&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default Action&lt;/p&gt;

&lt;p&gt;Forward to your existing Target Group.&lt;/p&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done.&lt;/p&gt;

&lt;p&gt;Your website now supports HTTPS.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Port 443?
&lt;/h1&gt;

&lt;p&gt;Port&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is used for HTTP.&lt;/p&gt;

&lt;p&gt;Port&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;is used for HTTPS.&lt;/p&gt;

&lt;p&gt;Most websites today use HTTPS on port 443.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 9 – Redirect HTTP to HTTPS
&lt;/h1&gt;

&lt;p&gt;Many users will still type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We want AWS to automatically redirect them.&lt;/p&gt;

&lt;p&gt;Select&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP Listener

Port 80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Edit Rules
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Default Action&lt;/p&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Redirect
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure:&lt;/p&gt;

&lt;p&gt;Protocol&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTPS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Port&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;443
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Status Code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HTTP 301
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save.&lt;/p&gt;

&lt;p&gt;Now every HTTP request automatically becomes HTTPS.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is HTTP 301?
&lt;/h1&gt;

&lt;p&gt;301 means&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Permanent Redirect&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Browsers remember this redirect.&lt;/p&gt;

&lt;p&gt;Users automatically use HTTPS in future visits.&lt;/p&gt;




&lt;h1&gt;
  
  
  Verify Everything Works
&lt;/h1&gt;

&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://myrestaurant.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check:&lt;/p&gt;

&lt;p&gt;✅ Website loads&lt;/p&gt;

&lt;p&gt;✅ Browser shows a lock icon&lt;/p&gt;

&lt;p&gt;✅ URL begins with&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you still see "Not Secure," verify that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The ACM certificate status is &lt;strong&gt;Issued&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The HTTPS listener is using the correct certificate.&lt;/li&gt;
&lt;li&gt;Your Route 53 Alias record points to the correct ALB.&lt;/li&gt;
&lt;li&gt;DNS changes have had time to propagate.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Common Problems
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Problem 1
&lt;/h3&gt;

&lt;p&gt;Certificate stuck in&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Pending Validation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible cause:&lt;/p&gt;

&lt;p&gt;DNS validation record was not created correctly or DNS changes have not propagated yet.&lt;/p&gt;




&lt;h3&gt;
  
  
  Problem 2
&lt;/h3&gt;

&lt;p&gt;Website still opens with HTTP&lt;/p&gt;

&lt;p&gt;Possible cause:&lt;/p&gt;

&lt;p&gt;No redirect rule on port 80.&lt;/p&gt;




&lt;h3&gt;
  
  
  Problem 3
&lt;/h3&gt;

&lt;p&gt;Browser says&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Certificate Error
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrong certificate attached.&lt;/li&gt;
&lt;li&gt;Certificate does not include the domain you are visiting.&lt;/li&gt;
&lt;li&gt;Certificate is not in the same AWS Region as the ALB.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Problem 4
&lt;/h3&gt;

&lt;p&gt;Website cannot be reached&lt;/p&gt;

&lt;p&gt;Possible causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Alias record points to the wrong ALB.&lt;/li&gt;
&lt;li&gt;Load Balancer is unhealthy.&lt;/li&gt;
&lt;li&gt;Security Groups are blocking traffic.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Production Best Practices
&lt;/h1&gt;

&lt;p&gt;Always:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use HTTPS for public websites.&lt;/li&gt;
&lt;li&gt;Redirect HTTP to HTTPS.&lt;/li&gt;
&lt;li&gt;Keep DNS records organized.&lt;/li&gt;
&lt;li&gt;Use Alias records for ALBs.&lt;/li&gt;
&lt;li&gt;Monitor certificate expiration (ACM-managed public certificates renew automatically when validation remains in place and the certificate is still in use).&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Lab Checklist
&lt;/h1&gt;

&lt;p&gt;Complete the following:&lt;/p&gt;

&lt;p&gt;✅ Create a Public Hosted Zone&lt;/p&gt;

&lt;p&gt;✅ Create an Alias Record&lt;/p&gt;

&lt;p&gt;✅ Point your domain to the ALB&lt;/p&gt;

&lt;p&gt;✅ Request an ACM Public Certificate&lt;/p&gt;

&lt;p&gt;✅ Validate the certificate using DNS&lt;/p&gt;

&lt;p&gt;✅ Wait for the certificate status to become &lt;strong&gt;Issued&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Add an HTTPS Listener (443)&lt;/p&gt;

&lt;p&gt;✅ Attach the ACM Certificate&lt;/p&gt;

&lt;p&gt;✅ Redirect HTTP (80) to HTTPS (443)&lt;/p&gt;

&lt;p&gt;✅ Open the website using HTTPS&lt;/p&gt;




&lt;h1&gt;
  
  
  Interview Questions
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1. What is Route 53?
&lt;/h3&gt;

&lt;p&gt;AWS's DNS service that maps domain names to AWS resources and other destinations.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. What is DNS?
&lt;/h3&gt;

&lt;p&gt;The Domain Name System translates human-readable domain names into network addresses.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Why do companies use custom domains?
&lt;/h3&gt;

&lt;p&gt;To provide a professional, memorable address for customers instead of AWS-generated hostnames.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. What is AWS Certificate Manager?
&lt;/h3&gt;

&lt;p&gt;A service that issues and manages SSL/TLS certificates for supported AWS services.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Why do we use HTTPS?
&lt;/h3&gt;

&lt;p&gt;To encrypt communication between users and the application, protecting sensitive data in transit.&lt;/p&gt;




&lt;h3&gt;
  
  
  6. What is the difference between HTTP and HTTPS?
&lt;/h3&gt;

&lt;p&gt;HTTP sends traffic without encryption. HTTPS uses TLS to encrypt the connection.&lt;/p&gt;




&lt;h3&gt;
  
  
  7. Why do we use an Alias Record instead of a normal A Record?
&lt;/h3&gt;

&lt;p&gt;Because an Application Load Balancer does not have a fixed IP address. Alias records automatically track the AWS resource.&lt;/p&gt;




&lt;h3&gt;
  
  
  8. Why do we redirect HTTP to HTTPS?
&lt;/h3&gt;

&lt;p&gt;To ensure all users access the secure version of the website, even if they initially enter an HTTP URL.&lt;/p&gt;




&lt;h2&gt;
  
  
  Homework
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Purchase or use an existing domain.&lt;/li&gt;
&lt;li&gt;Create a Public Hosted Zone in Route 53.&lt;/li&gt;
&lt;li&gt;Create an Alias A record pointing to your ALB.&lt;/li&gt;
&lt;li&gt;Request an ACM public certificate for your domain.&lt;/li&gt;
&lt;li&gt;Validate the certificate using DNS.&lt;/li&gt;
&lt;li&gt;Add an HTTPS listener (443) to your ALB.&lt;/li&gt;
&lt;li&gt;Configure HTTP (80) to redirect to HTTPS.&lt;/li&gt;
&lt;li&gt;Verify that your website loads with a valid HTTPS connection.&lt;/li&gt;
&lt;li&gt;Take screenshots of:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Hosted Zone&lt;/li&gt;
&lt;li&gt;Alias Record&lt;/li&gt;
&lt;li&gt;ACM Certificate (Issued)&lt;/li&gt;
&lt;li&gt;ALB Listeners&lt;/li&gt;
&lt;li&gt;Website showing the HTTPS lock icon&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After completing this lab, students will have a professional deployment with a custom domain and encrypted HTTPS traffic, similar to what is commonly used for public-facing applications in AWS.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Lab – Amazon CloudWatch Metrics, Dashboards &amp; Alarms</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 27 Jul 2026 01:40:03 +0000</pubDate>
      <link>https://dev.to/jumptotech/lab-amazon-cloudwatch-metrics-dashboards-alarms-503a</link>
      <guid>https://dev.to/jumptotech/lab-amazon-cloudwatch-metrics-dashboards-alarms-503a</guid>
      <description>&lt;h1&gt;
  
  
  Lab Goal
&lt;/h1&gt;

&lt;p&gt;In this lab you will learn how DevOps engineers monitor applications running in production.&lt;/p&gt;

&lt;p&gt;By the end of this lab you will be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand what CloudWatch Metrics are.&lt;/li&gt;
&lt;li&gt;Create a CloudWatch Dashboard.&lt;/li&gt;
&lt;li&gt;Monitor your ECS Service.&lt;/li&gt;
&lt;li&gt;Monitor your Application Load Balancer.&lt;/li&gt;
&lt;li&gt;Create CloudWatch Alarms.&lt;/li&gt;
&lt;li&gt;Receive notifications when something goes wrong.&lt;/li&gt;
&lt;li&gt;Understand how DevOps engineers detect problems before customers report them.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Production Scenario
&lt;/h1&gt;

&lt;p&gt;Imagine your application is running on ECS.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub

↓

GitHub Actions

↓

Amazon ECR

↓

Amazon ECS

↓

Application Load Balancer

↓

Users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Yesterday everything worked perfectly.&lt;/p&gt;

&lt;p&gt;Today users start saying:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The website is very slow."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a DevOps Engineer, the first question is:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What changed?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You don't guess.&lt;/p&gt;

&lt;p&gt;You look at monitoring.&lt;/p&gt;

&lt;p&gt;That is why companies use &lt;strong&gt;Amazon CloudWatch&lt;/strong&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is Amazon CloudWatch?
&lt;/h1&gt;

&lt;p&gt;CloudWatch is AWS's monitoring service.&lt;/p&gt;

&lt;p&gt;Think of it as a health monitor for your AWS resources.&lt;/p&gt;

&lt;p&gt;Instead of waiting for customers to complain, CloudWatch tells you when something is wrong.&lt;/p&gt;

&lt;p&gt;CloudWatch collects information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU Usage&lt;/li&gt;
&lt;li&gt;Memory Usage&lt;/li&gt;
&lt;li&gt;Network Traffic&lt;/li&gt;
&lt;li&gt;Requests&lt;/li&gt;
&lt;li&gt;Response Time&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  What is a Metric?
&lt;/h1&gt;

&lt;p&gt;A metric is simply a number measured over time.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Meaning&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;CPU Utilization&lt;/td&gt;
&lt;td&gt;How busy the server is&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Memory Utilization&lt;/td&gt;
&lt;td&gt;How much RAM is being used&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Request Count&lt;/td&gt;
&lt;td&gt;Number of users visiting&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response Time&lt;/td&gt;
&lt;td&gt;How long requests take&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Healthy Host Count&lt;/td&gt;
&lt;td&gt;Number of healthy ECS tasks&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Think of your smartwatch.&lt;/p&gt;

&lt;p&gt;It measures:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Heart Rate&lt;/li&gt;
&lt;li&gt;Steps&lt;/li&gt;
&lt;li&gt;Calories&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CloudWatch does the same thing for AWS resources.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Do Companies Monitor?
&lt;/h1&gt;

&lt;p&gt;Imagine this happens:&lt;/p&gt;

&lt;p&gt;At 2 AM&lt;/p&gt;

&lt;p&gt;CPU becomes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;98%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If nobody notices,&lt;/p&gt;

&lt;p&gt;the application becomes slow.&lt;/p&gt;

&lt;p&gt;Eventually&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU 100%

↓

Application Stops Responding
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Customers cannot use the website.&lt;/p&gt;

&lt;p&gt;Monitoring allows DevOps engineers to fix problems before they become outages.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Can CloudWatch Monitor?
&lt;/h1&gt;

&lt;p&gt;Today we will monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECS Service&lt;/li&gt;
&lt;li&gt;ECS Tasks&lt;/li&gt;
&lt;li&gt;Application Load Balancer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Later you can also monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;RDS&lt;/li&gt;
&lt;li&gt;DynamoDB&lt;/li&gt;
&lt;li&gt;API Gateway&lt;/li&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Part 1 – Open CloudWatch
&lt;/h1&gt;

&lt;p&gt;Open AWS Console&lt;/p&gt;

&lt;p&gt;Search&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CloudWatch
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open it.&lt;/p&gt;

&lt;p&gt;You will see:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Alarms&lt;/li&gt;
&lt;li&gt;Metrics&lt;/li&gt;
&lt;li&gt;Logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today we will use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Metrics&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Alarms&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Part 2 – View Metrics
&lt;/h1&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Metrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;All Metrics
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You will see many AWS services.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ECS&lt;/li&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;ApplicationELB&lt;/li&gt;
&lt;li&gt;Lambda&lt;/li&gt;
&lt;li&gt;RDS&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Part 3 – ECS Metrics
&lt;/h1&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ECS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ClusterName
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose your cluster.&lt;/p&gt;

&lt;p&gt;You should see metrics such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPUUtilization&lt;/li&gt;
&lt;li&gt;MemoryUtilization&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPUUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A graph appears.&lt;/p&gt;

&lt;p&gt;This graph shows how busy your ECS service has been.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why CPU Matters
&lt;/h1&gt;

&lt;p&gt;Imagine CPU usage stays around&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;15%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything is healthy.&lt;/p&gt;

&lt;p&gt;Now traffic increases.&lt;/p&gt;

&lt;p&gt;CPU becomes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;95%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The application may:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;become slow&lt;/li&gt;
&lt;li&gt;stop responding&lt;/li&gt;
&lt;li&gt;restart&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why DevOps engineers always monitor CPU.&lt;/p&gt;




&lt;h1&gt;
  
  
  Memory Utilization
&lt;/h1&gt;

&lt;p&gt;Return to Metrics.&lt;/p&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MemoryUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memory shows how much RAM the container is using.&lt;/p&gt;

&lt;p&gt;If memory reaches&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;100%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The container may crash.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 4 – Monitor the Load Balancer
&lt;/h1&gt;

&lt;p&gt;Go back.&lt;/p&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ApplicationELB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select your ALB.&lt;/p&gt;

&lt;p&gt;Useful metrics include:&lt;/p&gt;

&lt;h3&gt;
  
  
  RequestCount
&lt;/h3&gt;

&lt;p&gt;How many requests users are sending.&lt;/p&gt;

&lt;p&gt;If it suddenly increases,&lt;/p&gt;

&lt;p&gt;your website is getting more traffic.&lt;/p&gt;




&lt;h3&gt;
  
  
  TargetResponseTime
&lt;/h3&gt;

&lt;p&gt;How long your application takes to respond.&lt;/p&gt;

&lt;p&gt;Healthy example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;150 ms
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Bad example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3 seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Slow response usually means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;high CPU&lt;/li&gt;
&lt;li&gt;database problems&lt;/li&gt;
&lt;li&gt;slow application code&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  HealthyHostCount
&lt;/h3&gt;

&lt;p&gt;Shows how many healthy ECS tasks are receiving traffic.&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;2 Healthy
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Good.&lt;/p&gt;

&lt;p&gt;If it becomes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nobody can use your application.&lt;/p&gt;




&lt;h3&gt;
  
  
  HTTPCode_Target_5XX_Count
&lt;/h3&gt;

&lt;p&gt;Shows application errors.&lt;/p&gt;

&lt;p&gt;Examples&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;500

502

503

504
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These usually mean something is wrong with the application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 5 – Create a Dashboard
&lt;/h1&gt;

&lt;p&gt;Why create dashboards?&lt;/p&gt;

&lt;p&gt;Instead of opening many AWS pages,&lt;/p&gt;

&lt;p&gt;DevOps engineers want everything on one screen.&lt;/p&gt;

&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Dashboards

↓

Create Dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dashboard name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Restaurant-App
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Add Widgets
&lt;/h1&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add Widget
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Line
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add:&lt;/p&gt;

&lt;h3&gt;
  
  
  Widget 1
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPUUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Widget 2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MemoryUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Widget 3&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;RequestCount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Widget 4&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HealthyHostCount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Widget 5&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TargetResponseTime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save.&lt;/p&gt;

&lt;p&gt;Now one screen shows the health of your application.&lt;/p&gt;

&lt;p&gt;This is how many DevOps teams monitor production.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 6 – CloudWatch Alarms
&lt;/h1&gt;

&lt;p&gt;Monitoring is useful.&lt;/p&gt;

&lt;p&gt;But nobody watches dashboards 24 hours a day.&lt;/p&gt;

&lt;p&gt;Instead,&lt;/p&gt;

&lt;p&gt;CloudWatch sends alerts.&lt;/p&gt;

&lt;p&gt;Example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CPU

95%

↓

CloudWatch Alarm

↓

Email

↓

DevOps Engineer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now someone knows there is a problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 7 – Create CPU Alarm
&lt;/h1&gt;

&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;CloudWatch

↓

Alarms

↓

Create Alarm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose Metric&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ECS

↓

CPUUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Condition&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Greater Than

80
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning&lt;/p&gt;

&lt;p&gt;If CPU stays above&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;80%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CloudWatch creates an alarm.&lt;/p&gt;




&lt;h1&gt;
  
  
  Evaluation Period
&lt;/h1&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;5 minutes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;CPU can briefly spike.&lt;/p&gt;

&lt;p&gt;We don't want false alarms.&lt;/p&gt;

&lt;p&gt;Waiting a few minutes helps reduce unnecessary alerts.&lt;/p&gt;




&lt;h1&gt;
  
  
  Notification
&lt;/h1&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create New SNS Topic
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DevOpsAlerts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enter your email.&lt;/p&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check your email.&lt;/p&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Confirm Subscription
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without confirming, AWS cannot send notifications.&lt;/p&gt;




&lt;h1&gt;
  
  
  Alarm Name
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;High-CPU-Restaurant-App
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Alarm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 8 – Create Memory Alarm
&lt;/h1&gt;

&lt;p&gt;Repeat the process.&lt;/p&gt;

&lt;p&gt;Metric&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;MemoryUtilization
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Threshold&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;80%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alarm Name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;High-Memory
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Part 9 – Create Healthy Host Alarm
&lt;/h1&gt;

&lt;p&gt;Metric&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HealthyHostCount
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Condition&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Less Than

1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Meaning&lt;/p&gt;

&lt;p&gt;If no healthy ECS tasks exist,&lt;/p&gt;

&lt;p&gt;CloudWatch immediately sends an alert.&lt;/p&gt;

&lt;p&gt;This is one of the most important production alarms.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 10 – Create Target Response Time Alarm
&lt;/h1&gt;

&lt;p&gt;Metric&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;TargetResponseTime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Condition&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Greater Than

2 Seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If users wait too long,&lt;/p&gt;

&lt;p&gt;DevOps receives a notification.&lt;/p&gt;




&lt;h1&gt;
  
  
  Which Alarms Should Every DevOps Engineer Create?
&lt;/h1&gt;

&lt;p&gt;At a minimum:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Alarm&lt;/th&gt;
&lt;th&gt;Why It Matters&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;High CPU&lt;/td&gt;
&lt;td&gt;Application is overloaded&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;High Memory&lt;/td&gt;
&lt;td&gt;Prevent container crashes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Healthy Host Count &amp;lt; 1&lt;/td&gt;
&lt;td&gt;Application is unavailable&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Target Response Time High&lt;/td&gt;
&lt;td&gt;Website is slow&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;HTTP 5XX Errors&lt;/td&gt;
&lt;td&gt;Application is failing&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;As you gain experience, you can add alarms for other AWS services and business-specific metrics.&lt;/p&gt;




&lt;h1&gt;
  
  
  How DevOps Engineers Use CloudWatch
&lt;/h1&gt;

&lt;p&gt;Imagine your phone rings.&lt;/p&gt;

&lt;p&gt;Email says:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;High CPU

95%
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What should you check?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Is ECS running?&lt;/li&gt;
&lt;li&gt;Are tasks healthy?&lt;/li&gt;
&lt;li&gt;Open CloudWatch Logs.&lt;/li&gt;
&lt;li&gt;Look for application errors.&lt;/li&gt;
&lt;li&gt;Check database connectivity.&lt;/li&gt;
&lt;li&gt;Decide whether scaling or a code fix is needed.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;CloudWatch tells you &lt;strong&gt;something is wrong&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;CloudWatch Logs usually help explain &lt;strong&gt;why&lt;/strong&gt; it is happened.&lt;/p&gt;




&lt;h1&gt;
  
  
  Production Tips
&lt;/h1&gt;

&lt;p&gt;✔ Monitor trends, not just current values.&lt;/p&gt;

&lt;p&gt;✔ Use dashboards for daily monitoring.&lt;/p&gt;

&lt;p&gt;✔ Use alarms for important events.&lt;/p&gt;

&lt;p&gt;✔ Don't create hundreds of unnecessary alarms.&lt;/p&gt;

&lt;p&gt;✔ Review alarms regularly to remove ones that are noisy or no longer useful.&lt;/p&gt;




&lt;h1&gt;
  
  
  Lab Checklist
&lt;/h1&gt;

&lt;p&gt;Complete the following:&lt;/p&gt;

&lt;p&gt;✅ View ECS CPU metric&lt;/p&gt;

&lt;p&gt;✅ View ECS Memory metric&lt;/p&gt;

&lt;p&gt;✅ View ALB Request Count&lt;/p&gt;

&lt;p&gt;✅ View ALB Healthy Hosts&lt;/p&gt;

&lt;p&gt;✅ Create Dashboard&lt;/p&gt;

&lt;p&gt;✅ Add CPU Widget&lt;/p&gt;

&lt;p&gt;✅ Add Memory Widget&lt;/p&gt;

&lt;p&gt;✅ Add Request Widget&lt;/p&gt;

&lt;p&gt;✅ Add Healthy Host Widget&lt;/p&gt;

&lt;p&gt;✅ Create CPU Alarm&lt;/p&gt;

&lt;p&gt;✅ Create Memory Alarm&lt;/p&gt;

&lt;p&gt;✅ Create Healthy Host Alarm&lt;/p&gt;

&lt;p&gt;✅ Confirm SNS Email&lt;/p&gt;




&lt;h1&gt;
  
  
  Interview Questions
&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;1. What is CloudWatch?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AWS monitoring service used to collect metrics, logs, dashboards, and alarms.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;2. What is the difference between Metrics and Logs?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Metrics are numbers collected over time (CPU, memory, requests). Logs are detailed text records from your application or services that explain what happened.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3. Why do we create Dashboards?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To view the health of multiple AWS resources in one place.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4. Why do we create Alarms?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To notify the DevOps team automatically when a metric crosses a defined threshold.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;5. Which metrics do you monitor in ECS?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU Utilization&lt;/li&gt;
&lt;li&gt;Memory Utilization&lt;/li&gt;
&lt;li&gt;Healthy Host Count&lt;/li&gt;
&lt;li&gt;Request Count&lt;/li&gt;
&lt;li&gt;Target Response Time&lt;/li&gt;
&lt;li&gt;HTTP 5XX Errors&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;strong&gt;6. What happens if Healthy Host Count becomes 0?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The load balancer has no healthy targets to send traffic to, so users are likely to experience application failures.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;7. What is Amazon SNS used for in CloudWatch?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;SNS sends notifications, such as email, when an alarm changes to the ALARM state.&lt;/p&gt;




&lt;h2&gt;
  
  
  Homework
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Create a CloudWatch Dashboard with at least &lt;strong&gt;5 widgets&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Create &lt;strong&gt;4 CloudWatch Alarms&lt;/strong&gt;:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;High CPU (&amp;gt;80%)&lt;/li&gt;
&lt;li&gt;High Memory (&amp;gt;80%)&lt;/li&gt;
&lt;li&gt;Healthy Host Count (&amp;lt;1)&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;High Target Response Time (&amp;gt;2 seconds)&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Trigger one alarm (if possible) and verify that you receive an email notification.&lt;/li&gt;
&lt;li&gt;Take screenshots of:&lt;/li&gt;
&lt;/ol&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your Dashboard&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your Alarms&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your SNS subscription confirmation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Your ECS Metrics graph&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By completing this lab, students will have a basic monitoring setup similar to what many teams configure for an ECS application in AWS.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>LAB – AWS Secrets Manager &amp; CloudWatch Logs</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 27 Jul 2026 01:38:18 +0000</pubDate>
      <link>https://dev.to/jumptotech/lab-aws-secrets-manager-cloudwatch-logs-pjp</link>
      <guid>https://dev.to/jumptotech/lab-aws-secrets-manager-cloudwatch-logs-pjp</guid>
      <description>&lt;h2&gt;
  
  
  Goal
&lt;/h2&gt;

&lt;p&gt;Today you will learn how real companies keep passwords secure and how DevOps engineers troubleshoot applications running in Amazon ECS.&lt;/p&gt;

&lt;p&gt;By the end of this lab you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store a database password in AWS Secrets Manager.&lt;/li&gt;
&lt;li&gt;Connect your ECS application to the secret.&lt;/li&gt;
&lt;li&gt;Configure CloudWatch Logs.&lt;/li&gt;
&lt;li&gt;View application logs.&lt;/li&gt;
&lt;li&gt;Understand how DevOps engineers troubleshoot production issues.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Part 1 – Why do we need AWS Secrets Manager?
&lt;/h1&gt;

&lt;p&gt;Imagine your application needs to connect to a database.&lt;/p&gt;

&lt;p&gt;Most beginners write something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_HOST=mydatabase.amazonaws.com
DB_USER=admin
DB_PASSWORD=Password123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This works, but it is &lt;strong&gt;not secure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If you push this file to GitHub, anyone who can access the repository could see the password. If an employee leaves the company, the password might also be shared accidentally.&lt;/p&gt;

&lt;h3&gt;
  
  
  In production
&lt;/h3&gt;

&lt;p&gt;Large companies never store passwords inside:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub repositories&lt;/li&gt;
&lt;li&gt;Docker images&lt;/li&gt;
&lt;li&gt;Source code&lt;/li&gt;
&lt;li&gt;Terraform files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead, passwords are stored in &lt;strong&gt;AWS Secrets Manager&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The application asks AWS for the password when it starts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application

↓

AWS Secrets Manager

↓

Returns Password
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers cannot accidentally expose passwords.&lt;/li&gt;
&lt;li&gt;Passwords can be changed without changing application code.&lt;/li&gt;
&lt;li&gt;Access is controlled using IAM permissions.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Part 2 – Create a Secret
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Open the &lt;strong&gt;AWS Console&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Search for &lt;strong&gt;Secrets Manager&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Click &lt;strong&gt;Store a new secret&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Select:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Other type of secret&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Add the following key/value pairs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_HOST = your-database-endpoint
DB_USER = postgres
DB_PASSWORD = Password123
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;Replace these values with your own if you are using an RDS database.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Secret name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app-secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click &lt;strong&gt;Next&lt;/strong&gt; until the secret is created.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 3 – Why do we give the secret a name?
&lt;/h1&gt;

&lt;p&gt;Your application does not know the actual password.&lt;/p&gt;

&lt;p&gt;Instead, it asks AWS:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Please give me the secret called &lt;strong&gt;restaurant-app-secret&lt;/strong&gt;."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This allows you to change the password later without changing your application code.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 4 – Connect ECS to the Secret
&lt;/h1&gt;

&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ECS → Task Definitions&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select your task definition.&lt;/p&gt;

&lt;p&gt;Click:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Create new revision&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Scroll to:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Container&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Find the &lt;strong&gt;Environment&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;Choose:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Secrets&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Click:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add Secret&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Fill in:&lt;/p&gt;

&lt;p&gt;Secret name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;DB_PASSWORD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Value from:&lt;/p&gt;

&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app-secret
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the task definition.&lt;/p&gt;

&lt;p&gt;Now update your ECS service to use the newest task definition revision.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 5 – Why do we update the Service?
&lt;/h1&gt;

&lt;p&gt;The task definition is only a template.&lt;/p&gt;

&lt;p&gt;Updating the ECS Service launches new containers using the latest task definition.&lt;/p&gt;

&lt;p&gt;This is how changes are deployed in production.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 6 – Verify Everything Works
&lt;/h1&gt;

&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ECS → Cluster → Service → Tasks&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Wait until the task status is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Running
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the task stops immediately, something is wrong.&lt;/p&gt;

&lt;p&gt;This is when DevOps engineers begin troubleshooting.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 7 – CloudWatch Logs
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Why do we need CloudWatch Logs?
&lt;/h2&gt;

&lt;p&gt;Imagine a developer says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The application doesn't work."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That message is not enough.&lt;/p&gt;

&lt;p&gt;A DevOps engineer needs to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the application start?&lt;/li&gt;
&lt;li&gt;Did it crash?&lt;/li&gt;
&lt;li&gt;Why did it crash?&lt;/li&gt;
&lt;li&gt;Is the database reachable?&lt;/li&gt;
&lt;li&gt;Did the application receive traffic?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;CloudWatch Logs answers these questions.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 8 – Configure CloudWatch Logs
&lt;/h1&gt;

&lt;p&gt;When creating or updating your task definition, locate the &lt;strong&gt;Log configuration&lt;/strong&gt; section.&lt;/p&gt;

&lt;p&gt;Select:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Log driver

awslogs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Fill in:&lt;/p&gt;

&lt;p&gt;Log group&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ecs/restaurant-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Region&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;us-east-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Stream prefix&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ecs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the task definition.&lt;/p&gt;

&lt;p&gt;Deploy the new revision.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 9 – View Logs
&lt;/h1&gt;

&lt;p&gt;Open:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CloudWatch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log Groups&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;↓&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/ecs/restaurant-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Open the newest log stream.&lt;/p&gt;

&lt;p&gt;You should see application output such as:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application started

Server listening on port 3000

Connected to database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you see these messages, your container started successfully.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 10 – Common Production Errors
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Example 1
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Database connection failed
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible causes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Wrong password&lt;/li&gt;
&lt;li&gt;Database is stopped&lt;/li&gt;
&lt;li&gt;Security Group blocks access&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Example 2
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Port already in use
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible cause:&lt;/p&gt;

&lt;p&gt;Your application is listening on the wrong port.&lt;/p&gt;




&lt;h3&gt;
  
  
  Example 3
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Cannot find module
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Possible cause:&lt;/p&gt;

&lt;p&gt;The Docker image is missing required files.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 11 – What does a DevOps engineer check first?
&lt;/h1&gt;

&lt;p&gt;When a production incident happens, a typical workflow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Check if the ECS service is running.&lt;/li&gt;
&lt;li&gt;Check if tasks are healthy.&lt;/li&gt;
&lt;li&gt;Open CloudWatch Logs.&lt;/li&gt;
&lt;li&gt;Read the first error message.&lt;/li&gt;
&lt;li&gt;Identify the root cause.&lt;/li&gt;
&lt;li&gt;Fix the issue.&lt;/li&gt;
&lt;li&gt;Redeploy if necessary.&lt;/li&gt;
&lt;li&gt;Verify the application is healthy.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Logs are often the fastest way to understand why an application failed.&lt;/p&gt;




&lt;h1&gt;
  
  
  Part 12 – Good Logging Practices
&lt;/h1&gt;

&lt;p&gt;Applications should log useful information, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Application startup&lt;/li&gt;
&lt;li&gt;Database connection status&lt;/li&gt;
&lt;li&gt;API requests&lt;/li&gt;
&lt;li&gt;Errors and exceptions&lt;/li&gt;
&lt;li&gt;Unexpected shutdowns&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Avoid logging:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Passwords&lt;/li&gt;
&lt;li&gt;API keys&lt;/li&gt;
&lt;li&gt;Access tokens&lt;/li&gt;
&lt;li&gt;Sensitive customer data&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Lab Checklist
&lt;/h1&gt;

&lt;p&gt;Before finishing this lab, verify that you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a secret in AWS Secrets Manager.&lt;/li&gt;
&lt;li&gt;Update an ECS Task Definition.&lt;/li&gt;
&lt;li&gt;Attach a secret to an ECS container.&lt;/li&gt;
&lt;li&gt;Deploy the new task definition.&lt;/li&gt;
&lt;li&gt;Configure the &lt;code&gt;awslogs&lt;/code&gt; log driver.&lt;/li&gt;
&lt;li&gt;Find your Log Group.&lt;/li&gt;
&lt;li&gt;Open the latest Log Stream.&lt;/li&gt;
&lt;li&gt;Identify an application error using CloudWatch Logs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Interview Questions
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Why should passwords not be stored in GitHub?&lt;/li&gt;
&lt;li&gt;What problem does AWS Secrets Manager solve?&lt;/li&gt;
&lt;li&gt;Why do we update the ECS Service after creating a new task definition revision?&lt;/li&gt;
&lt;li&gt;What is CloudWatch Logs used for?&lt;/li&gt;
&lt;li&gt;Where do you look first when an ECS task crashes?&lt;/li&gt;
&lt;li&gt;What is the difference between an ECS task and a task definition?&lt;/li&gt;
&lt;li&gt;What information should never appear in application logs?&lt;/li&gt;
&lt;/ol&gt;

</description>
    </item>
    <item>
      <title>CI/CD Pipeline Lecture</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Wed, 22 Jul 2026 00:04:44 +0000</pubDate>
      <link>https://dev.to/jumptotech/cicd-pipeline-lecture-19a3</link>
      <guid>https://dev.to/jumptotech/cicd-pipeline-lecture-19a3</guid>
      <description>&lt;p&gt;If you look at almost every DevOps job description, you will see requirements like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Experience with CI/CD&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;GitHub Actions&lt;/li&gt;
&lt;li&gt;GitLab CI&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;Terraform&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because a DevOps engineer's main responsibility is to automate how software moves from a developer's computer to production where customers use it.&lt;/p&gt;

&lt;p&gt;Without CI/CD, companies would deploy software manually. That process is slow, error-prone, and expensive.&lt;/p&gt;

&lt;p&gt;With CI/CD, the entire deployment process can happen automatically in just a few minutes.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Does CI/CD Mean?
&lt;/h1&gt;

&lt;p&gt;CI/CD consists of two parts.&lt;/p&gt;

&lt;h2&gt;
  
  
  CI – Continuous Integration
&lt;/h2&gt;

&lt;p&gt;Continuous Integration means developers frequently merge their code into a shared Git repository.&lt;/p&gt;

&lt;p&gt;Every time code is pushed, the system automatically:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Downloads the latest code&lt;/li&gt;
&lt;li&gt;Builds the application&lt;/li&gt;
&lt;li&gt;Runs tests&lt;/li&gt;
&lt;li&gt;Checks code quality&lt;/li&gt;
&lt;li&gt;Looks for security issues&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal is to detect problems immediately instead of finding them weeks later.&lt;/p&gt;




&lt;h2&gt;
  
  
  CD – Continuous Delivery / Continuous Deployment
&lt;/h2&gt;

&lt;p&gt;After CI finishes successfully, CD takes over.&lt;/p&gt;

&lt;p&gt;CD automatically prepares the application for deployment.&lt;/p&gt;

&lt;p&gt;Depending on the company:&lt;/p&gt;

&lt;p&gt;Continuous Delivery:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployment waits for manual approval.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Continuous Deployment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Every successful build is automatically deployed to production.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Why Companies Use CI/CD
&lt;/h1&gt;

&lt;p&gt;Imagine Amazon has 5,000 developers.&lt;/p&gt;

&lt;p&gt;Each developer pushes code several times every day.&lt;/p&gt;

&lt;p&gt;Without CI/CD:&lt;/p&gt;

&lt;p&gt;Someone would need to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Download code manually&lt;/li&gt;
&lt;li&gt;Build it manually&lt;/li&gt;
&lt;li&gt;Test it manually&lt;/li&gt;
&lt;li&gt;Create Docker images manually&lt;/li&gt;
&lt;li&gt;Upload images manually&lt;/li&gt;
&lt;li&gt;Deploy manually&lt;/li&gt;
&lt;li&gt;Restart servers manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Imagine doing that hundreds of times every day.&lt;/p&gt;

&lt;p&gt;It would be impossible.&lt;/p&gt;

&lt;p&gt;Automation solves this problem.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real Company Scenario
&lt;/h1&gt;

&lt;p&gt;Let's imagine we work for Netflix.&lt;/p&gt;

&lt;p&gt;The frontend team creates a new search feature.&lt;/p&gt;

&lt;p&gt;The backend team fixes a bug.&lt;/p&gt;

&lt;p&gt;The payment team updates billing.&lt;/p&gt;

&lt;p&gt;The recommendation team improves suggestions.&lt;/p&gt;

&lt;p&gt;All these developers push code to GitHub throughout the day.&lt;/p&gt;

&lt;p&gt;Each push automatically starts a CI/CD pipeline.&lt;/p&gt;

&lt;p&gt;Nobody has to call the DevOps engineer and ask:&lt;/p&gt;

&lt;p&gt;"Can you deploy this?"&lt;/p&gt;

&lt;p&gt;The pipeline handles everything automatically.&lt;/p&gt;




&lt;h1&gt;
  
  
  Who Does What?
&lt;/h1&gt;

&lt;p&gt;Many beginners confuse the responsibilities.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developer
&lt;/h3&gt;

&lt;p&gt;The developer's responsibility is to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write application code&lt;/li&gt;
&lt;li&gt;Fix bugs&lt;/li&gt;
&lt;li&gt;Add new features&lt;/li&gt;
&lt;li&gt;Push code to GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The developer is &lt;strong&gt;not&lt;/strong&gt; responsible for deploying to production in most organizations.&lt;/p&gt;




&lt;h3&gt;
  
  
  DevOps Engineer
&lt;/h3&gt;

&lt;p&gt;The DevOps engineer creates the automation that deploys the application safely.&lt;/p&gt;

&lt;p&gt;Typical responsibilities include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing GitHub Actions workflows&lt;/li&gt;
&lt;li&gt;Creating Jenkins pipelines&lt;/li&gt;
&lt;li&gt;Building Docker images&lt;/li&gt;
&lt;li&gt;Managing Kubernetes or ECS&lt;/li&gt;
&lt;li&gt;Configuring AWS infrastructure&lt;/li&gt;
&lt;li&gt;Monitoring applications&lt;/li&gt;
&lt;li&gt;Managing deployments&lt;/li&gt;
&lt;li&gt;Automating repetitive tasks&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  The Complete CI/CD Pipeline
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer

↓

Git Push

↓

GitHub Repository

↓

GitHub Actions / Jenkins

↓

Checkout Code

↓

Install Dependencies

↓

Compile / Build

↓

Run Unit Tests

↓

Run Integration Tests

↓

Static Code Analysis (SonarQube)

↓

Security Scan (Trivy)

↓

Docker Build

↓

Push Image to Amazon ECR

↓

Deploy to ECS / Kubernetes

↓

Application Starts

↓

Load Balancer

↓

Customers

↓

Monitoring &amp;amp; Alerts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every stage has a specific purpose.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 1 — Developer Pushes Code
&lt;/h1&gt;

&lt;p&gt;The developer finishes a feature.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;The login page now supports Google authentication.&lt;/p&gt;

&lt;p&gt;The developer commits the changes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;

git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Added Google Login"&lt;/span&gt;

git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At this point nothing has been deployed.&lt;/p&gt;

&lt;p&gt;GitHub simply stores the latest version of the project.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Happens After Git Push?
&lt;/h1&gt;

&lt;p&gt;GitHub constantly watches the repository.&lt;/p&gt;

&lt;p&gt;Whenever someone pushes code, GitHub immediately checks whether a workflow exists.&lt;/p&gt;

&lt;p&gt;It looks inside:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/workflows/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside we might have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;deploy.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;or&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;ci.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;These files tell GitHub exactly what to do.&lt;/p&gt;




&lt;h1&gt;
  
  
  What is YAML?
&lt;/h1&gt;

&lt;p&gt;A YAML file is simply a list of instructions.&lt;/p&gt;

&lt;p&gt;Think of it like a recipe.&lt;/p&gt;

&lt;p&gt;Instead of saying:&lt;/p&gt;

&lt;p&gt;"Make a cake."&lt;/p&gt;

&lt;p&gt;The recipe says:&lt;/p&gt;

&lt;p&gt;Step 1&lt;/p&gt;

&lt;p&gt;Mix flour.&lt;/p&gt;

&lt;p&gt;Step 2&lt;/p&gt;

&lt;p&gt;Add eggs.&lt;/p&gt;

&lt;p&gt;Step 3&lt;/p&gt;

&lt;p&gt;Bake.&lt;/p&gt;

&lt;p&gt;CI/CD works exactly the same way.&lt;/p&gt;

&lt;p&gt;Instead of cooking, we deploy software.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 2 — Runner Starts
&lt;/h1&gt;

&lt;p&gt;GitHub itself cannot build your application.&lt;/p&gt;

&lt;p&gt;It needs a computer.&lt;/p&gt;

&lt;p&gt;This computer is called a &lt;strong&gt;Runner&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;There are two types.&lt;/p&gt;




&lt;h2&gt;
  
  
  GitHub Hosted Runner
&lt;/h2&gt;

&lt;p&gt;GitHub creates a temporary Linux virtual machine.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ubuntu-latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Easy to use&lt;/li&gt;
&lt;li&gt;No maintenance&lt;/li&gt;
&lt;li&gt;Automatically updated&lt;/li&gt;
&lt;li&gt;Secure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Disadvantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limited customization&lt;/li&gt;
&lt;li&gt;Internet restrictions in some companies&lt;/li&gt;
&lt;li&gt;Starts fresh every run&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Self Hosted Runner
&lt;/h2&gt;

&lt;p&gt;Many companies prefer their own servers.&lt;/p&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;AWS EC2&lt;/p&gt;

&lt;p&gt;Azure VM&lt;/p&gt;

&lt;p&gt;Physical server&lt;/p&gt;

&lt;p&gt;Advantages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Faster builds&lt;/li&gt;
&lt;li&gt;Internal network access&lt;/li&gt;
&lt;li&gt;Custom software&lt;/li&gt;
&lt;li&gt;Lower cost for large companies&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Step 3 — Checkout the Code
&lt;/h1&gt;

&lt;p&gt;The runner is empty.&lt;/p&gt;

&lt;p&gt;It knows nothing about our application.&lt;/p&gt;

&lt;p&gt;First it downloads the latest version from GitHub.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;actions/checkout
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now the runner contains:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Frontend

Backend

Dockerfile

README

package.json
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything needed for the build is now available.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 4 — Install Dependencies
&lt;/h1&gt;

&lt;p&gt;Applications depend on libraries.&lt;/p&gt;

&lt;p&gt;NodeJS:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn &lt;span class="nb"&gt;install&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Without these packages, the application cannot run.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 5 — Build the Application
&lt;/h1&gt;

&lt;p&gt;Now we compile the application.&lt;/p&gt;

&lt;p&gt;React example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm run build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Angular:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ng build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Java:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn package
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The build process creates production-ready files.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 6 — Run Automated Tests
&lt;/h1&gt;

&lt;p&gt;Testing is extremely important.&lt;/p&gt;

&lt;p&gt;Imagine deploying software that immediately crashes.&lt;/p&gt;

&lt;p&gt;Customers cannot use it.&lt;/p&gt;

&lt;p&gt;Money is lost.&lt;/p&gt;

&lt;p&gt;Automated tests verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Login works&lt;/li&gt;
&lt;li&gt;Registration works&lt;/li&gt;
&lt;li&gt;API works&lt;/li&gt;
&lt;li&gt;Payments work&lt;/li&gt;
&lt;li&gt;Search works&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If even one critical test fails...&lt;/p&gt;

&lt;p&gt;Pipeline immediately stops.&lt;/p&gt;

&lt;p&gt;Nothing is deployed.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Stop the Pipeline?
&lt;/h1&gt;

&lt;p&gt;Because broken software should never reach production.&lt;/p&gt;

&lt;p&gt;This is one of the biggest advantages of CI/CD.&lt;/p&gt;

&lt;p&gt;Problems are caught early.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 7 — SonarQube
&lt;/h1&gt;

&lt;p&gt;Testing verifies functionality.&lt;/p&gt;

&lt;p&gt;SonarQube checks code quality.&lt;/p&gt;

&lt;p&gt;It looks for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bugs&lt;/li&gt;
&lt;li&gt;Duplicate code&lt;/li&gt;
&lt;li&gt;Poor coding practices&lt;/li&gt;
&lt;li&gt;Hardcoded passwords&lt;/li&gt;
&lt;li&gt;Memory leaks&lt;/li&gt;
&lt;li&gt;SQL injection risks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight java"&gt;&lt;code&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s"&gt;"admin123"&lt;/span&gt;&lt;span class="o"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;SonarQube flags this immediately.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 8 — Trivy Security Scan
&lt;/h1&gt;

&lt;p&gt;Now we scan the Docker image.&lt;/p&gt;

&lt;p&gt;Trivy checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operating system vulnerabilities&lt;/li&gt;
&lt;li&gt;Library vulnerabilities&lt;/li&gt;
&lt;li&gt;CVEs&lt;/li&gt;
&lt;li&gt;Secrets accidentally committed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;/p&gt;

&lt;p&gt;Your Docker image contains an outdated OpenSSL version.&lt;/p&gt;

&lt;p&gt;Trivy reports:&lt;/p&gt;

&lt;p&gt;Critical Vulnerability.&lt;/p&gt;

&lt;p&gt;The deployment stops.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Scan Security?
&lt;/h1&gt;

&lt;p&gt;Because thousands of new vulnerabilities are discovered every year.&lt;/p&gt;

&lt;p&gt;Deploying vulnerable software puts customer data at risk.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 9 — Build Docker Image
&lt;/h1&gt;

&lt;p&gt;Now everything passed.&lt;/p&gt;

&lt;p&gt;We create a Docker image.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;docker build
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A Docker image contains:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux operating system&lt;/li&gt;
&lt;li&gt;Application&lt;/li&gt;
&lt;li&gt;Runtime&lt;/li&gt;
&lt;li&gt;Libraries&lt;/li&gt;
&lt;li&gt;Configuration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Everything needed to run the application anywhere.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why Docker?
&lt;/h1&gt;

&lt;p&gt;Imagine this situation.&lt;/p&gt;

&lt;p&gt;Developer:&lt;/p&gt;

&lt;p&gt;"It works on my laptop."&lt;/p&gt;

&lt;p&gt;Production server:&lt;/p&gt;

&lt;p&gt;"It doesn't work."&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Different environments.&lt;/p&gt;

&lt;p&gt;Docker solves this.&lt;/p&gt;

&lt;p&gt;The exact same image runs everywhere.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 10 — Push Image to Amazon ECR
&lt;/h1&gt;

&lt;p&gt;The image currently exists only on the runner.&lt;/p&gt;

&lt;p&gt;If the runner disappears...&lt;/p&gt;

&lt;p&gt;The image disappears too.&lt;/p&gt;

&lt;p&gt;We store it permanently.&lt;/p&gt;

&lt;p&gt;Amazon Elastic Container Registry (ECR)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;docker push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now Kubernetes or ECS can download it.&lt;/p&gt;




&lt;h1&gt;
  
  
  Why ECR?
&lt;/h1&gt;

&lt;p&gt;Think of ECR as GitHub for Docker images.&lt;/p&gt;

&lt;p&gt;Instead of storing source code...&lt;/p&gt;

&lt;p&gt;It stores application images.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 11 — Deploy
&lt;/h1&gt;

&lt;p&gt;The deployment stage begins.&lt;/p&gt;

&lt;p&gt;Depending on the company, deployment may use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon ECS&lt;/li&gt;
&lt;li&gt;Amazon EKS&lt;/li&gt;
&lt;li&gt;Kubernetes&lt;/li&gt;
&lt;li&gt;Azure AKS&lt;/li&gt;
&lt;li&gt;Google GKE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The platform pulls the newest image from ECR.&lt;/p&gt;

&lt;p&gt;Old containers are replaced with new ones.&lt;/p&gt;




&lt;h1&gt;
  
  
  Rolling Deployment
&lt;/h1&gt;

&lt;p&gt;Suppose five containers are running.&lt;/p&gt;

&lt;p&gt;The deployment system does not stop all five.&lt;/p&gt;

&lt;p&gt;Instead:&lt;/p&gt;

&lt;p&gt;Stop one.&lt;/p&gt;

&lt;p&gt;Start one.&lt;/p&gt;

&lt;p&gt;Health check.&lt;/p&gt;

&lt;p&gt;Repeat.&lt;/p&gt;

&lt;p&gt;Customers continue using the application with almost no downtime.&lt;/p&gt;




&lt;h1&gt;
  
  
  Health Checks
&lt;/h1&gt;

&lt;p&gt;After a new container starts, Kubernetes or ECS asks:&lt;/p&gt;

&lt;p&gt;"Are you healthy?"&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the container answers correctly...&lt;/p&gt;

&lt;p&gt;Traffic is sent to it.&lt;/p&gt;

&lt;p&gt;If not...&lt;/p&gt;

&lt;p&gt;It is automatically replaced.&lt;/p&gt;




&lt;h1&gt;
  
  
  Load Balancer
&lt;/h1&gt;

&lt;p&gt;Customers never connect directly to containers.&lt;/p&gt;

&lt;p&gt;Instead:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Users

↓

Application Load Balancer

↓

Container 1

Container 2

Container 3

Container 4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The Load Balancer distributes requests evenly.&lt;/p&gt;

&lt;p&gt;If one container crashes...&lt;/p&gt;

&lt;p&gt;Traffic automatically goes to the healthy containers.&lt;/p&gt;




&lt;h1&gt;
  
  
  Monitoring
&lt;/h1&gt;

&lt;p&gt;Deployment is complete.&lt;/p&gt;

&lt;p&gt;Now monitoring begins.&lt;/p&gt;

&lt;p&gt;Popular tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Amazon CloudWatch&lt;/li&gt;
&lt;li&gt;Prometheus&lt;/li&gt;
&lt;li&gt;Grafana&lt;/li&gt;
&lt;li&gt;Datadog&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We monitor:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU usage&lt;/li&gt;
&lt;li&gt;Memory usage&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;li&gt;Response time&lt;/li&gt;
&lt;li&gt;Container health&lt;/li&gt;
&lt;li&gt;Network traffic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If something goes wrong, alerts notify the DevOps team.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Does a DevOps Engineer Monitor Every Day?
&lt;/h1&gt;

&lt;p&gt;A DevOps engineer typically checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did the pipeline succeed?&lt;/li&gt;
&lt;li&gt;Did deployment complete successfully?&lt;/li&gt;
&lt;li&gt;Are all containers healthy?&lt;/li&gt;
&lt;li&gt;Is CPU usage too high?&lt;/li&gt;
&lt;li&gt;Is memory usage increasing?&lt;/li&gt;
&lt;li&gt;Are users reporting errors?&lt;/li&gt;
&lt;li&gt;Are logs showing failures?&lt;/li&gt;
&lt;li&gt;Is the application responding quickly?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitoring is an ongoing responsibility, not something done only during deployment.&lt;/p&gt;




&lt;h1&gt;
  
  
  Summary
&lt;/h1&gt;

&lt;p&gt;A CI/CD pipeline automates the journey of software from a developer's code commit to a running application in production.&lt;/p&gt;

&lt;p&gt;A typical flow is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Developer pushes code to GitHub.&lt;/li&gt;
&lt;li&gt;GitHub triggers a workflow.&lt;/li&gt;
&lt;li&gt;A runner downloads the code.&lt;/li&gt;
&lt;li&gt;Dependencies are installed.&lt;/li&gt;
&lt;li&gt;The application is built.&lt;/li&gt;
&lt;li&gt;Automated tests are executed.&lt;/li&gt;
&lt;li&gt;SonarQube analyzes code quality.&lt;/li&gt;
&lt;li&gt;Trivy scans for security vulnerabilities.&lt;/li&gt;
&lt;li&gt;A Docker image is created.&lt;/li&gt;
&lt;li&gt;The image is pushed to Amazon ECR.&lt;/li&gt;
&lt;li&gt;ECS or Kubernetes deploys the new version.&lt;/li&gt;
&lt;li&gt;A Load Balancer routes users to healthy containers.&lt;/li&gt;
&lt;li&gt;Monitoring tools watch the application and alert the DevOps team if problems occur.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This end-to-end automation is the foundation of modern DevOps and is one of the most common workflows you'll encounter in real-world engineering teams.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Lab 1 - Build Your First Playwright Automation Framework</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 20 Jul 2026 20:50:51 +0000</pubDate>
      <link>https://dev.to/jumptotech/lab-1-build-your-first-playwright-automation-framework-18ip</link>
      <guid>https://dev.to/jumptotech/lab-1-build-your-first-playwright-automation-framework-18ip</guid>
      <description>&lt;p&gt;By the end of this lab, you'll be able to answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is Maven?&lt;/li&gt;
&lt;li&gt;Why do you use Playwright?&lt;/li&gt;
&lt;li&gt;What is Page Object Model?&lt;/li&gt;
&lt;li&gt;How do you organize an automation framework?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Business Scenario
&lt;/h2&gt;

&lt;p&gt;You have joined &lt;strong&gt;United Airlines&lt;/strong&gt; as a QA Automation Engineer.&lt;/p&gt;

&lt;p&gt;The development team has completed the &lt;strong&gt;Login&lt;/strong&gt; feature for a new customer portal.&lt;/p&gt;

&lt;p&gt;Before the application goes to production, your task is to automate the login functionality.&lt;/p&gt;




&lt;h1&gt;
  
  
  Objective
&lt;/h1&gt;

&lt;p&gt;By the end of this lab, you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a Java automation framework&lt;/li&gt;
&lt;li&gt;Install Playwright&lt;/li&gt;
&lt;li&gt;Write your first automated UI test&lt;/li&gt;
&lt;li&gt;Push the project to GitHub&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
      │
      ▼
Application
      │
      ▼
Playwright Automation
      │
      ▼
Test Results
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 1 – Install Software
&lt;/h1&gt;

&lt;p&gt;Install these tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Java 21&lt;/li&gt;
&lt;li&gt;IntelliJ IDEA Community Edition&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;li&gt;Google Chrome&lt;/li&gt;
&lt;li&gt;Maven (or use IntelliJ's bundled Maven)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Verify installation:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;java &lt;span class="nt"&gt;-version&lt;/span&gt;
git &lt;span class="nt"&gt;--version&lt;/span&gt;
mvn &lt;span class="nt"&gt;-version&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see version numbers for each.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 2 – Create a New Project
&lt;/h1&gt;

&lt;p&gt;Open &lt;strong&gt;IntelliJ IDEA&lt;/strong&gt;.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;New Project&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Maven&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Choose &lt;strong&gt;Java 21&lt;/strong&gt; as the JDK.&lt;/li&gt;
&lt;li&gt;Group ID:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   com.company
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Artifact ID:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;   qa-playwright-framework
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Click &lt;strong&gt;Create&lt;/strong&gt;.&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Step 3 – Add Playwright
&lt;/h1&gt;

&lt;p&gt;Open &lt;code&gt;pom.xml&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Replace its contents with the official Playwright Maven dependencies (or add them if IntelliJ created a basic project).&lt;/p&gt;

&lt;p&gt;Reload the Maven project when IntelliJ prompts you.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 4 – Install Playwright Browsers
&lt;/h1&gt;

&lt;p&gt;Open the &lt;strong&gt;Terminal&lt;/strong&gt; inside IntelliJ.&lt;/p&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mvn &lt;span class="nb"&gt;exec&lt;/span&gt;:java &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="nt"&gt;-Dexec&lt;/span&gt;.mainClass&lt;span class="o"&gt;=&lt;/span&gt;com.microsoft.playwright.CLI &lt;span class="nt"&gt;-Dexec&lt;/span&gt;.args&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"install"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Wait until Chrome, Firefox, and WebKit are installed.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 5 – Create Project Structure
&lt;/h1&gt;

&lt;p&gt;Inside &lt;code&gt;src/test/java&lt;/code&gt;, create:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pages
tests
utils
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Your project should look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qa-playwright-framework
│
├── src
│   └── test
│       └── java
│            ├── pages
│            ├── tests
│            └── utils
│
├── pom.xml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 6 – Create Your First Test
&lt;/h1&gt;

&lt;p&gt;Create a class:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;LoginTest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Inside it:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Launch Chrome.&lt;/li&gt;
&lt;li&gt;Open a demo website (for example, SauceDemo).&lt;/li&gt;
&lt;li&gt;Verify the page title.&lt;/li&gt;
&lt;li&gt;Close the browser.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Run the test.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Expected Result&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chrome opens.&lt;/li&gt;
&lt;li&gt;The website loads.&lt;/li&gt;
&lt;li&gt;The title matches the expected value.&lt;/li&gt;
&lt;li&gt;The browser closes.&lt;/li&gt;
&lt;li&gt;The test passes.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Step 7 – Push to GitHub
&lt;/h1&gt;

&lt;p&gt;In the IntelliJ terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Initial Playwright framework"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create a new repository on GitHub named:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;qa-playwright-framework
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then push your code.&lt;/p&gt;




&lt;h1&gt;
  
  
  What You Learned
&lt;/h1&gt;

&lt;p&gt;By completing this lab, you can confidently say:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I created a Maven-based Playwright automation framework.&lt;/li&gt;
&lt;li&gt;I organized the project using packages for pages, tests, and utilities.&lt;/li&gt;
&lt;li&gt;I installed Playwright browsers.&lt;/li&gt;
&lt;li&gt;I wrote and executed my first UI automation test.&lt;/li&gt;
&lt;li&gt;I version-controlled the project with Git and GitHub.&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Interview Questions
&lt;/h1&gt;

&lt;h3&gt;
  
  
  1. Why did you choose Maven?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Maven manages project dependencies, standardizes the project structure, and simplifies builds using a single &lt;code&gt;pom.xml&lt;/code&gt; file.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Why Playwright instead of Selenium?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; Playwright provides automatic waiting, faster execution, built-in support for multiple browsers, better handling of modern web applications, and supports parallel execution.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Why do you separate &lt;code&gt;pages&lt;/code&gt; and &lt;code&gt;tests&lt;/code&gt;?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; This follows the &lt;strong&gt;Page Object Model (POM)&lt;/strong&gt; design pattern. It keeps UI locators and page actions separate from test logic, making the framework easier to maintain and reuse.&lt;/p&gt;




&lt;h3&gt;
  
  
  4. Why use GitHub?
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Answer:&lt;/strong&gt; GitHub stores the automation framework, enables collaboration, tracks changes, and integrates easily with CI/CD tools like GitHub Actions.&lt;/p&gt;




&lt;h3&gt;
  
  
  Homework
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;Add a second test that verifies the login page URL.&lt;/li&gt;
&lt;li&gt;Create a &lt;code&gt;HomePage&lt;/code&gt; class in the &lt;code&gt;pages&lt;/code&gt; package (it can be empty for now).&lt;/li&gt;
&lt;li&gt;Push your changes to GitHub with the commit message:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Added initial Playwright tests and project structure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the level of detail I'd recommend for each lab: focused on one real-world task, small enough to complete in under an hour, and directly tied to common interview questions.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deploy a New Version of the Application (v2)</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 20 Jul 2026 02:05:53 +0000</pubDate>
      <link>https://dev.to/jumptotech/deploy-a-new-version-of-the-application-v2-1kg0</link>
      <guid>https://dev.to/jumptotech/deploy-a-new-version-of-the-application-v2-1kg0</guid>
      <description>&lt;p&gt;you deployed version 1 of the application.&lt;/p&gt;

&lt;p&gt;Today, Jules (the developer) sends you a message:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"I fixed several bugs and added a new feature. Please deploy Version 2."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As a DevOps Engineer, you &lt;strong&gt;do not change the code&lt;/strong&gt;. You receive the updated code and deploy the new version safely.&lt;/p&gt;




&lt;h1&gt;
  
  
  Learning Objectives
&lt;/h1&gt;

&lt;p&gt;By the end of this lab, you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pull the latest code from GitHub&lt;/li&gt;
&lt;li&gt;Build a new Docker image&lt;/li&gt;
&lt;li&gt;Tag the image as v2&lt;/li&gt;
&lt;li&gt;Push the new image to Amazon ECR&lt;/li&gt;
&lt;li&gt;Update the ECS Task Definition&lt;/li&gt;
&lt;li&gt;Deploy the new version to ECS&lt;/li&gt;
&lt;li&gt;Verify that the new version is running&lt;/li&gt;
&lt;li&gt;Understand rolling deployments&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
      │
      ▼
Updated Source Code
      │
      ▼
Docker Image v2
      │
      ▼
Amazon ECR
      │
      ▼
New ECS Task Definition
      │
      ▼
ECS Service Update
      │
      ▼
Application Load Balancer
      │
      ▼
Users See Version 2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 1 – Receive the Updated Code
&lt;/h1&gt;

&lt;p&gt;The developer pushes new code to GitHub.&lt;/p&gt;

&lt;p&gt;Open the updated project.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Developers continuously improve applications by fixing bugs and adding features.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 2 – Build a New Docker Image
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; restaurant-app:v2 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now see:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app:v1

restaurant-app:v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Every application change requires a new Docker image.&lt;/p&gt;

&lt;p&gt;Never overwrite an existing image with the same version tag.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 3 – Test Version 2
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 restaurant-app:v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the application works.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Always test before deploying.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 4 – Tag the Image
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag restaurant-app:v2 ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/restaurant-app:v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Step 5 – Push Version 2 to Amazon ECR
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/restaurant-app:v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open Amazon ECR.&lt;/p&gt;

&lt;p&gt;Verify that both images exist:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v1

v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Keeping multiple image versions allows you to roll back if something goes wrong.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 6 – Create a New ECS Task Definition Revision
&lt;/h1&gt;

&lt;p&gt;Open Amazon ECS.&lt;/p&gt;

&lt;p&gt;Select the existing Task Definition.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Create New Revision&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Change only the image URI from:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app:v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the new revision.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Task Definitions are versioned.&lt;/p&gt;

&lt;p&gt;Instead of editing the old one, AWS creates a new revision for each deployment.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 7 – Update the ECS Service
&lt;/h1&gt;

&lt;p&gt;Select your ECS Service.&lt;/p&gt;

&lt;p&gt;Click &lt;strong&gt;Update Service&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Choose the latest Task Definition revision.&lt;/p&gt;

&lt;p&gt;Deploy.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;The ECS Service replaces old containers with new ones using the updated image.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 8 – Watch the Rolling Deployment
&lt;/h1&gt;

&lt;p&gt;Open the ECS Service.&lt;/p&gt;

&lt;p&gt;Observe:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;New task starts.&lt;/li&gt;
&lt;li&gt;Health checks pass.&lt;/li&gt;
&lt;li&gt;Old task stops.&lt;/li&gt;
&lt;li&gt;New task becomes active.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;This is called a &lt;strong&gt;rolling deployment&lt;/strong&gt;. It helps reduce downtime because the new container starts before the old one is removed.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 9 – Test the Application
&lt;/h1&gt;

&lt;p&gt;Open the ALB DNS name.&lt;/p&gt;

&lt;p&gt;Verify that Version 2 is displayed or that the new feature is available.&lt;/p&gt;




&lt;h1&gt;
  
  
  Lab Complete
&lt;/h1&gt;

&lt;p&gt;You have successfully:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Deployed Version 2&lt;/li&gt;
&lt;li&gt;Created a new Docker image&lt;/li&gt;
&lt;li&gt;Pushed it to ECR&lt;/li&gt;
&lt;li&gt;Created a new Task Definition revision&lt;/li&gt;
&lt;li&gt;Updated the ECS Service&lt;/li&gt;
&lt;li&gt;Completed a rolling deployment&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Questions
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Why did we create a new image instead of modifying &lt;code&gt;v1&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;Why is a new Task Definition revision required?&lt;/li&gt;
&lt;li&gt;What is a rolling deployment?&lt;/li&gt;
&lt;li&gt;How does ECS reduce downtime during deployments?&lt;/li&gt;
&lt;li&gt;Why is it useful to keep old image versions in ECR?&lt;/li&gt;
&lt;li&gt;What would you do if Version 2 failed after deployment?&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>aws</category>
      <category>devops</category>
      <category>docker</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Deploy a Developer's Application to AWS Using Docker, Amazon ECR, Amazon ECS, and Application Load Balancer</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Mon, 20 Jul 2026 02:02:33 +0000</pubDate>
      <link>https://dev.to/jumptotech/deploy-a-developers-application-to-aws-using-docker-amazon-ecr-amazon-ecs-and-application-load-3434</link>
      <guid>https://dev.to/jumptotech/deploy-a-developers-application-to-aws-using-docker-amazon-ecr-amazon-ecs-and-application-load-3434</guid>
      <description>&lt;h1&gt;
  
  
  Objective
&lt;/h1&gt;

&lt;p&gt;In this lab, you will act as a &lt;strong&gt;DevOps Engineer&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The developer (Jules) has already written the application and pushed the source code to GitHub.&lt;/p&gt;

&lt;p&gt;Your responsibility is &lt;strong&gt;not to write the application&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Your responsibility is to package it, deploy it, and make it available to users.&lt;/p&gt;

&lt;p&gt;By the end of this lab, you will:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build a Docker image&lt;/li&gt;
&lt;li&gt;Push the image to Amazon ECR&lt;/li&gt;
&lt;li&gt;Deploy the container to Amazon ECS (Fargate)&lt;/li&gt;
&lt;li&gt;Configure an Application Load Balancer&lt;/li&gt;
&lt;li&gt;Access the application through the browser&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer
      │
      ▼
Application Source Code
      │
      ▼
Docker Image
      │
      ▼
Amazon ECR
      │
      ▼
Amazon ECS (Fargate)
      │
      ▼
Application Load Balancer
      │
      ▼
Users
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Scenario
&lt;/h1&gt;

&lt;p&gt;Jules is a Software Developer.&lt;/p&gt;

&lt;p&gt;He finished developing the application.&lt;/p&gt;

&lt;p&gt;He informs the DevOps team:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"The application is ready. Please deploy it."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now your work begins.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 1 – Open the Project
&lt;/h1&gt;

&lt;p&gt;Open the project in VS Code.&lt;/p&gt;

&lt;p&gt;Look at the project structure.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app/

Dockerfile
package.json
src/
public/
README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;Before deploying an application, a DevOps engineer needs to understand the project structure.&lt;/p&gt;

&lt;p&gt;You should identify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which programming language is used&lt;/li&gt;
&lt;li&gt;Which package manager is used&lt;/li&gt;
&lt;li&gt;Which port the application runs on&lt;/li&gt;
&lt;li&gt;Whether a Dockerfile already exists&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Step 2 – Verify the Application
&lt;/h1&gt;

&lt;p&gt;Run the application locally.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;npm &lt;span class="nb"&gt;install

&lt;/span&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the application works.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Never deploy an application you haven't tested.&lt;/p&gt;

&lt;p&gt;If it doesn't work locally, it won't work in AWS.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 3 – Review the Dockerfile
&lt;/h1&gt;

&lt;p&gt;Open the Dockerfile.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; node:20&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; package*.json .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;npm &lt;span class="nb"&gt;install&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 3000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["npm","start"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Docker packages the application and all of its dependencies into a container.&lt;/p&gt;

&lt;p&gt;This allows the application to run consistently on any machine.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 4 – Build the Docker Image
&lt;/h1&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; restaurant-app:v1 &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker images
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app
v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;A Docker image is a portable package containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operating System&lt;/li&gt;
&lt;li&gt;Runtime&lt;/li&gt;
&lt;li&gt;Dependencies&lt;/li&gt;
&lt;li&gt;Application Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Amazon ECS runs Docker images, not source code.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 5 – Test the Docker Image
&lt;/h1&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker run &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; 3000:3000 restaurant-app:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://localhost:3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Verify the application loads successfully.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Always test the Docker image before pushing it to AWS.&lt;/p&gt;

&lt;p&gt;This prevents deployment failures later.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 6 – Create an Amazon ECR Repository
&lt;/h1&gt;

&lt;p&gt;Open AWS Console.&lt;/p&gt;

&lt;p&gt;Navigate to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Amazon ECR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Repository
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Repository Name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-app
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Amazon ECR is a private Docker registry.&lt;/p&gt;

&lt;p&gt;It stores Docker images.&lt;/p&gt;

&lt;p&gt;Amazon ECS downloads images from Amazon ECR.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 7 – Authenticate Docker to Amazon ECR
&lt;/h1&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecr get-login-password &lt;span class="nt"&gt;--region&lt;/span&gt; us-east-1 &lt;span class="se"&gt;\&lt;/span&gt;
| docker login &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--username&lt;/span&gt; AWS &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--password-stdin&lt;/span&gt; ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Expected output:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Login Succeeded
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Docker must authenticate before pushing images into Amazon ECR.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 8 – Tag the Docker Image
&lt;/h1&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag restaurant-app:v1 ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/restaurant-app:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Docker needs to know where the image will be stored.&lt;/p&gt;

&lt;p&gt;Tagging associates the image with the ECR repository.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 9 – Push the Image
&lt;/h1&gt;

&lt;p&gt;Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push ACCOUNT_ID.dkr.ecr.us-east-1.amazonaws.com/restaurant-app:v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open Amazon ECR.&lt;/p&gt;

&lt;p&gt;Verify the image appears.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Amazon ECS cannot deploy images stored only on your laptop.&lt;/p&gt;

&lt;p&gt;The image must first be stored in Amazon ECR.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 10 – Create an Amazon ECS Cluster
&lt;/h1&gt;

&lt;p&gt;Navigate to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Amazon ECS
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Choose&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Networking only (Fargate)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Cluster Name&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;restaurant-cluster
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create the cluster.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;The cluster is the environment where containers run.&lt;/p&gt;

&lt;p&gt;Using AWS Fargate means AWS manages the servers.&lt;/p&gt;

&lt;p&gt;As a DevOps engineer, you don't need to install or patch operating systems.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 11 – Create a Task Definition
&lt;/h1&gt;

&lt;p&gt;Create a new Task Definition.&lt;/p&gt;

&lt;p&gt;Configure:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Launch Type:
Fargate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Container Image&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ECR Image URI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;CPU&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;0.5 vCPU
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Memory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1 GB
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Port&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the Task Definition.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;The Task Definition is the blueprint for running the container.&lt;/p&gt;

&lt;p&gt;It tells ECS:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which image to use&lt;/li&gt;
&lt;li&gt;CPU allocation&lt;/li&gt;
&lt;li&gt;Memory allocation&lt;/li&gt;
&lt;li&gt;Port mapping&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Step 12 – Create an ECS Service
&lt;/h1&gt;

&lt;p&gt;Inside the cluster&lt;/p&gt;

&lt;p&gt;Click&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create Service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Task Definition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Desired Tasks&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Launch Type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Fargate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;A Task runs only once.&lt;/p&gt;

&lt;p&gt;A Service continuously monitors the application.&lt;/p&gt;

&lt;p&gt;If the container crashes, ECS automatically starts a new one.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 13 – Create an Application Load Balancer
&lt;/h1&gt;

&lt;p&gt;Navigate to&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;EC2

Load Balancers
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Create&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application Load Balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Configure:&lt;/p&gt;

&lt;p&gt;Internet Facing&lt;/p&gt;

&lt;p&gt;HTTP&lt;/p&gt;

&lt;p&gt;Port 80&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Containers have private IP addresses.&lt;/p&gt;

&lt;p&gt;Users on the internet cannot access them directly.&lt;/p&gt;

&lt;p&gt;The Application Load Balancer receives traffic from users and forwards requests to healthy ECS tasks.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 14 – Create a Target Group
&lt;/h1&gt;

&lt;p&gt;Create a Target Group.&lt;/p&gt;

&lt;p&gt;Type&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Health Check Path&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;The Target Group monitors the health of the application.&lt;/p&gt;

&lt;p&gt;Only healthy containers receive traffic.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 15 – Connect ECS Service to the Load Balancer
&lt;/h1&gt;

&lt;p&gt;Edit the ECS Service.&lt;/p&gt;

&lt;p&gt;Attach&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Application Load Balancer
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Select&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Target Group
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Container Port&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;3000
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deploy.&lt;/p&gt;




&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Without connecting ECS to the Load Balancer, users cannot reach the application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Step 16 – Test the Application
&lt;/h1&gt;

&lt;p&gt;Copy the ALB DNS name.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://restaurant-alb-123456.us-east-1.elb.amazonaws.com
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Open it in your browser.&lt;/p&gt;

&lt;p&gt;Verify that the application loads successfully.&lt;/p&gt;




&lt;h1&gt;
  
  
  Lab Complete
&lt;/h1&gt;

&lt;p&gt;Congratulations!&lt;/p&gt;

&lt;p&gt;You have successfully completed the responsibilities of a DevOps Engineer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ Received application code from the developer&lt;/li&gt;
&lt;li&gt;✅ Built a Docker image&lt;/li&gt;
&lt;li&gt;✅ Tested the container locally&lt;/li&gt;
&lt;li&gt;✅ Created an Amazon ECR repository&lt;/li&gt;
&lt;li&gt;✅ Pushed the image to Amazon ECR&lt;/li&gt;
&lt;li&gt;✅ Created an Amazon ECS cluster&lt;/li&gt;
&lt;li&gt;✅ Created a Task Definition&lt;/li&gt;
&lt;li&gt;✅ Created an ECS Service&lt;/li&gt;
&lt;li&gt;✅ Created an Application Load Balancer&lt;/li&gt;
&lt;li&gt;✅ Deployed the application to AWS&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Questions
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;Why do we use Docker instead of deploying source code directly?&lt;/li&gt;
&lt;li&gt;What is the purpose of Amazon ECR?&lt;/li&gt;
&lt;li&gt;Why can't Amazon ECS run source code directly?&lt;/li&gt;
&lt;li&gt;What information is stored in an ECS Task Definition?&lt;/li&gt;
&lt;li&gt;What is the difference between an ECS Task and an ECS Service?&lt;/li&gt;
&lt;li&gt;Why do we need an Application Load Balancer?&lt;/li&gt;
&lt;li&gt;What happens if an ECS task becomes unhealthy?&lt;/li&gt;
&lt;li&gt;Why do we test the Docker container before pushing it to ECR?&lt;/li&gt;
&lt;li&gt;What would happen if the security group did not allow traffic from the ALB to ECS?&lt;/li&gt;
&lt;li&gt;In your own words, describe the complete deployment flow from the developer's code to the running application.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is a beginner-friendly lab that closely reflects a real-world DevOps deployment workflow while keeping the scope focused on &lt;strong&gt;Docker → ECR → ECS → ALB&lt;/strong&gt; before introducing CI/CD in later labs.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>7-Month Cybersecurity Engineer Roadmap</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Thu, 16 Jul 2026 19:53:28 +0000</pubDate>
      <link>https://dev.to/jumptotech/7-month-cybersecurity-engineer-roadmap-235b</link>
      <guid>https://dev.to/jumptotech/7-month-cybersecurity-engineer-roadmap-235b</guid>
      <description>&lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt; 7 Months (28 Weeks)&lt;/p&gt;

&lt;p&gt;Each month includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Theory&lt;/li&gt;
&lt;li&gt;Hands-on labs&lt;/li&gt;
&lt;li&gt;Enterprise project&lt;/li&gt;
&lt;li&gt;Interview preparation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By graduation, every student should have:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5 enterprise projects&lt;/li&gt;
&lt;li&gt;1 capstone&lt;/li&gt;
&lt;li&gt;GitHub portfolio&lt;/li&gt;
&lt;li&gt;LinkedIn profile&lt;/li&gt;
&lt;li&gt;Resume showing enterprise experience&lt;/li&gt;
&lt;li&gt;Experience with 40–50 industry tools&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Month 1 — IT &amp;amp; Networking Foundations
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Goal
&lt;/h3&gt;

&lt;p&gt;Become a junior system administrator before learning security.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week 1
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Computer Hardware
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;SSD&lt;/li&gt;
&lt;li&gt;HDD&lt;/li&gt;
&lt;li&gt;BIOS&lt;/li&gt;
&lt;li&gt;UEFI&lt;/li&gt;
&lt;li&gt;Motherboard&lt;/li&gt;
&lt;li&gt;NIC&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;IP Address&lt;/li&gt;
&lt;li&gt;MAC Address&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;TCP/IP&lt;/li&gt;
&lt;li&gt;OSI Model&lt;/li&gt;
&lt;li&gt;HTTP&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wireshark&lt;/li&gt;
&lt;li&gt;Nmap&lt;/li&gt;
&lt;li&gt;Cisco Packet Tracer&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Week 2
&lt;/h2&gt;

&lt;p&gt;Linux Administration&lt;/p&gt;

&lt;p&gt;Skills&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Linux filesystem&lt;/li&gt;
&lt;li&gt;users&lt;/li&gt;
&lt;li&gt;groups&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;sudo&lt;/li&gt;
&lt;li&gt;services&lt;/li&gt;
&lt;li&gt;logs&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ubuntu&lt;/li&gt;
&lt;li&gt;Kali Linux&lt;/li&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;Vim&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Week 3
&lt;/h2&gt;

&lt;p&gt;Windows Administration&lt;/p&gt;

&lt;p&gt;Skills&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows Server&lt;/li&gt;
&lt;li&gt;Active Directory&lt;/li&gt;
&lt;li&gt;Group Policy&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;Event Viewer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PowerShell&lt;/li&gt;
&lt;li&gt;Active Directory Users &amp;amp; Computers&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Week 4
&lt;/h2&gt;

&lt;p&gt;Git&lt;/p&gt;

&lt;p&gt;GitHub&lt;/p&gt;

&lt;p&gt;Python Basics&lt;/p&gt;

&lt;p&gt;REST API&lt;/p&gt;

&lt;p&gt;JSON&lt;/p&gt;

&lt;p&gt;Virtualization&lt;/p&gt;

&lt;p&gt;VMware&lt;/p&gt;

&lt;p&gt;VirtualBox&lt;/p&gt;




&lt;p&gt;Enterprise Project&lt;/p&gt;

&lt;p&gt;Build a company network with&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Windows Domain Controller&lt;/li&gt;
&lt;li&gt;Linux Server&lt;/li&gt;
&lt;li&gt;Active Directory&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;File Server&lt;/li&gt;
&lt;li&gt;GitHub Repository&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Month 2 — Security Foundations
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Goal
&lt;/h3&gt;

&lt;p&gt;Learn how hackers attack systems.&lt;/p&gt;




&lt;p&gt;Week 5&lt;/p&gt;

&lt;p&gt;Linux Security&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SSH hardening&lt;/li&gt;
&lt;li&gt;firewall&lt;/li&gt;
&lt;li&gt;ufw&lt;/li&gt;
&lt;li&gt;iptables&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Week 6&lt;/p&gt;

&lt;p&gt;Windows Security&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Group Policy&lt;/li&gt;
&lt;li&gt;Windows Defender&lt;/li&gt;
&lt;li&gt;BitLocker&lt;/li&gt;
&lt;li&gt;Event Logs&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Week 7&lt;/p&gt;

&lt;p&gt;Network Security&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Firewalls&lt;/li&gt;
&lt;li&gt;IDS&lt;/li&gt;
&lt;li&gt;IPS&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;li&gt;NAC&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pfSense&lt;/li&gt;
&lt;li&gt;Snort&lt;/li&gt;
&lt;li&gt;Suricata&lt;/li&gt;
&lt;li&gt;Zeek&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Week 8&lt;/p&gt;

&lt;p&gt;Web Security&lt;/p&gt;

&lt;p&gt;OWASP Top 10&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQL Injection&lt;/li&gt;
&lt;li&gt;XSS&lt;/li&gt;
&lt;li&gt;CSRF&lt;/li&gt;
&lt;li&gt;Authentication&lt;/li&gt;
&lt;li&gt;Session Hijacking&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Burp Suite&lt;/li&gt;
&lt;li&gt;OWASP ZAP&lt;/li&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enterprise Project&lt;/p&gt;

&lt;p&gt;Secure a company network and web application.&lt;/p&gt;




&lt;h1&gt;
  
  
  Month 3 — SOC &amp;amp; Detection Engineering
&lt;/h1&gt;

&lt;p&gt;Goal&lt;/p&gt;

&lt;p&gt;Become a SOC Analyst.&lt;/p&gt;




&lt;p&gt;Week 9&lt;/p&gt;

&lt;p&gt;SIEM&lt;/p&gt;

&lt;p&gt;Splunk&lt;/p&gt;

&lt;p&gt;Microsoft Sentinel&lt;/p&gt;

&lt;p&gt;Elastic&lt;/p&gt;




&lt;p&gt;Week 10&lt;/p&gt;

&lt;p&gt;Windows Logging&lt;/p&gt;

&lt;p&gt;Sysmon&lt;/p&gt;

&lt;p&gt;Windows Events&lt;/p&gt;

&lt;p&gt;Event Forwarding&lt;/p&gt;




&lt;p&gt;Week 11&lt;/p&gt;

&lt;p&gt;Threat Hunting&lt;/p&gt;

&lt;p&gt;MITRE ATT&amp;amp;CK&lt;/p&gt;

&lt;p&gt;Sigma Rules&lt;/p&gt;

&lt;p&gt;IOC&lt;/p&gt;

&lt;p&gt;IOA&lt;/p&gt;

&lt;p&gt;Threat Intelligence&lt;/p&gt;




&lt;p&gt;Week 12&lt;/p&gt;

&lt;p&gt;Detection Engineering&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sigma&lt;/li&gt;
&lt;li&gt;YARA&lt;/li&gt;
&lt;li&gt;Velociraptor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Students create&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;detection rules&lt;/li&gt;
&lt;li&gt;dashboards&lt;/li&gt;
&lt;li&gt;alerts&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;Enterprise Project&lt;/p&gt;

&lt;p&gt;Build an enterprise SOC.&lt;/p&gt;

&lt;p&gt;Generate attacks.&lt;/p&gt;

&lt;p&gt;Detect them.&lt;/p&gt;

&lt;p&gt;Write reports.&lt;/p&gt;




&lt;h1&gt;
  
  
  Month 4 — Incident Response &amp;amp; Digital Forensics
&lt;/h1&gt;

&lt;p&gt;Goal&lt;/p&gt;

&lt;p&gt;Become Incident Responder.&lt;/p&gt;




&lt;p&gt;Week 13&lt;/p&gt;

&lt;p&gt;Incident Response Lifecycle&lt;/p&gt;

&lt;p&gt;NIST&lt;/p&gt;

&lt;p&gt;MITRE&lt;/p&gt;

&lt;p&gt;Playbooks&lt;/p&gt;




&lt;p&gt;Week 14&lt;/p&gt;

&lt;p&gt;Memory Forensics&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Volatility&lt;/p&gt;

&lt;p&gt;FTK Imager&lt;/p&gt;

&lt;p&gt;Autopsy&lt;/p&gt;




&lt;p&gt;Week 15&lt;/p&gt;

&lt;p&gt;Malware Analysis&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;PEStudio&lt;/p&gt;

&lt;p&gt;Any.Run&lt;/p&gt;

&lt;p&gt;VirusTotal&lt;/p&gt;

&lt;p&gt;ProcMon&lt;/p&gt;

&lt;p&gt;Process Explorer&lt;/p&gt;




&lt;p&gt;Week 16&lt;/p&gt;

&lt;p&gt;Threat Intelligence&lt;/p&gt;

&lt;p&gt;MISP&lt;/p&gt;

&lt;p&gt;Shodan&lt;/p&gt;

&lt;p&gt;AbuseIPDB&lt;/p&gt;

&lt;p&gt;GreyNoise&lt;/p&gt;

&lt;p&gt;AlienVault OTX&lt;/p&gt;




&lt;p&gt;Enterprise Project&lt;/p&gt;

&lt;p&gt;Simulate ransomware attack.&lt;/p&gt;

&lt;p&gt;Contain.&lt;/p&gt;

&lt;p&gt;Recover.&lt;/p&gt;

&lt;p&gt;Write executive report.&lt;/p&gt;




&lt;h1&gt;
  
  
  Month 5 — Cloud Security + DevSecOps
&lt;/h1&gt;

&lt;p&gt;Goal&lt;/p&gt;

&lt;p&gt;Protect cloud infrastructure.&lt;/p&gt;




&lt;p&gt;Week 17&lt;/p&gt;

&lt;p&gt;AWS&lt;/p&gt;

&lt;p&gt;IAM&lt;/p&gt;

&lt;p&gt;VPC&lt;/p&gt;

&lt;p&gt;EC2&lt;/p&gt;

&lt;p&gt;CloudTrail&lt;/p&gt;

&lt;p&gt;CloudWatch&lt;/p&gt;

&lt;p&gt;Security Groups&lt;/p&gt;




&lt;p&gt;Week 18&lt;/p&gt;

&lt;p&gt;AWS Security&lt;/p&gt;

&lt;p&gt;GuardDuty&lt;/p&gt;

&lt;p&gt;Inspector&lt;/p&gt;

&lt;p&gt;Security Hub&lt;/p&gt;

&lt;p&gt;AWS Config&lt;/p&gt;

&lt;p&gt;KMS&lt;/p&gt;

&lt;p&gt;Secrets Manager&lt;/p&gt;




&lt;p&gt;Week 19&lt;/p&gt;

&lt;p&gt;Containers&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;Docker Security&lt;/p&gt;

&lt;p&gt;Kubernetes&lt;/p&gt;

&lt;p&gt;RBAC&lt;/p&gt;

&lt;p&gt;Network Policies&lt;/p&gt;




&lt;p&gt;Week 20&lt;/p&gt;

&lt;p&gt;DevSecOps&lt;/p&gt;

&lt;p&gt;GitHub Actions&lt;/p&gt;

&lt;p&gt;Jenkins&lt;/p&gt;

&lt;p&gt;Terraform&lt;/p&gt;

&lt;p&gt;SonarQube&lt;/p&gt;

&lt;p&gt;Trivy&lt;/p&gt;

&lt;p&gt;Checkov&lt;/p&gt;

&lt;p&gt;Semgrep&lt;/p&gt;

&lt;p&gt;OWASP Dependency Check&lt;/p&gt;




&lt;p&gt;Enterprise Project&lt;/p&gt;

&lt;p&gt;Deploy secure cloud application.&lt;/p&gt;

&lt;p&gt;Implement CI/CD.&lt;/p&gt;

&lt;p&gt;Add security scanning.&lt;/p&gt;




&lt;h1&gt;
  
  
  Month 6 — Red Team + Purple Team
&lt;/h1&gt;

&lt;p&gt;Goal&lt;/p&gt;

&lt;p&gt;Understand attacker mindset.&lt;/p&gt;




&lt;p&gt;Week 21&lt;/p&gt;

&lt;p&gt;MITRE ATT&amp;amp;CK&lt;/p&gt;

&lt;p&gt;Atomic Red Team&lt;/p&gt;




&lt;p&gt;Week 22&lt;/p&gt;

&lt;p&gt;Active Directory Attacks&lt;/p&gt;

&lt;p&gt;BloodHound&lt;/p&gt;

&lt;p&gt;Impacket&lt;/p&gt;

&lt;p&gt;Responder&lt;/p&gt;

&lt;p&gt;Kerberoasting&lt;/p&gt;




&lt;p&gt;Week 23&lt;/p&gt;

&lt;p&gt;Ethical Hacking&lt;/p&gt;

&lt;p&gt;Metasploit&lt;/p&gt;

&lt;p&gt;Burp&lt;/p&gt;

&lt;p&gt;Nmap&lt;/p&gt;

&lt;p&gt;Hydra&lt;/p&gt;

&lt;p&gt;SQLMap&lt;/p&gt;




&lt;p&gt;Week 24&lt;/p&gt;

&lt;p&gt;Purple Team&lt;/p&gt;

&lt;p&gt;Caldera&lt;/p&gt;

&lt;p&gt;MITRE&lt;/p&gt;

&lt;p&gt;Detection Validation&lt;/p&gt;




&lt;p&gt;Enterprise Project&lt;/p&gt;

&lt;p&gt;Blue Team detects attacks generated by Red Team.&lt;/p&gt;




&lt;h1&gt;
  
  
  Month 7 — Enterprise Experience
&lt;/h1&gt;

&lt;p&gt;Goal&lt;/p&gt;

&lt;p&gt;Work exactly like a Cybersecurity Engineer.&lt;/p&gt;




&lt;p&gt;Week 25&lt;/p&gt;

&lt;p&gt;Project 1&lt;/p&gt;

&lt;p&gt;Enterprise SOC&lt;/p&gt;




&lt;p&gt;Week 26&lt;/p&gt;

&lt;p&gt;Project 2&lt;/p&gt;

&lt;p&gt;Cloud Security Engineer&lt;/p&gt;

&lt;p&gt;Secure AWS infrastructure.&lt;/p&gt;




&lt;p&gt;Week 27&lt;/p&gt;

&lt;p&gt;Project 3&lt;/p&gt;

&lt;p&gt;DevSecOps Engineer&lt;/p&gt;

&lt;p&gt;Secure CI/CD pipeline.&lt;/p&gt;




&lt;p&gt;Week 28&lt;/p&gt;

&lt;p&gt;Capstone&lt;/p&gt;

&lt;p&gt;Students build an enterprise security environment.&lt;/p&gt;

&lt;p&gt;They present to instructors acting as CIO, CISO, and Security Director.&lt;/p&gt;




&lt;h1&gt;
  
  
  Interview Preparation (Every Week)
&lt;/h1&gt;

&lt;p&gt;Every week students practice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Tell me about yourself&lt;/li&gt;
&lt;li&gt;Incident response scenarios&lt;/li&gt;
&lt;li&gt;SOC analyst questions&lt;/li&gt;
&lt;li&gt;Windows troubleshooting&lt;/li&gt;
&lt;li&gt;Linux troubleshooting&lt;/li&gt;
&lt;li&gt;Cloud troubleshooting&lt;/li&gt;
&lt;li&gt;Active Directory&lt;/li&gt;
&lt;li&gt;Threat hunting&lt;/li&gt;
&lt;li&gt;Malware analysis&lt;/li&gt;
&lt;li&gt;Detection engineering&lt;/li&gt;
&lt;li&gt;AWS security&lt;/li&gt;
&lt;li&gt;DevSecOps&lt;/li&gt;
&lt;li&gt;Behavioral interview&lt;/li&gt;
&lt;li&gt;Resume review&lt;/li&gt;
&lt;li&gt;LinkedIn optimization&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Enterprise Projects (Portfolio)
&lt;/h1&gt;

&lt;p&gt;By graduation, each student completes:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Enterprise Windows Active Directory Domain&lt;/li&gt;
&lt;li&gt;SOC with Splunk/Sentinel&lt;/li&gt;
&lt;li&gt;Ransomware Incident Response&lt;/li&gt;
&lt;li&gt;Secure AWS Cloud Environment&lt;/li&gt;
&lt;li&gt;DevSecOps Pipeline (GitHub Actions, Terraform, Docker, Kubernetes)&lt;/li&gt;
&lt;li&gt;Purple Team Attack &amp;amp; Detection Lab&lt;/li&gt;
&lt;li&gt;Capstone Enterprise Security Architecture&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Skills After Graduation
&lt;/h1&gt;

&lt;p&gt;Students should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build and secure Windows Active Directory environments&lt;/li&gt;
&lt;li&gt;Administer Linux servers securely&lt;/li&gt;
&lt;li&gt;Analyze network traffic with Wireshark and Zeek&lt;/li&gt;
&lt;li&gt;Detect attacks using Splunk, Sentinel, and Sigma rules&lt;/li&gt;
&lt;li&gt;Perform threat hunting and digital forensics&lt;/li&gt;
&lt;li&gt;Respond to incidents using industry-standard playbooks&lt;/li&gt;
&lt;li&gt;Secure AWS workloads using IAM, GuardDuty, Security Hub, Inspector, Config, and KMS&lt;/li&gt;
&lt;li&gt;Build secure CI/CD pipelines with GitHub Actions, Jenkins, Terraform, Docker, Kubernetes, SonarQube, Trivy, Checkov, and Semgrep&lt;/li&gt;
&lt;li&gt;Conduct vulnerability assessments and web application testing&lt;/li&gt;
&lt;li&gt;Collaborate with developers, DevOps engineers, and IT teams&lt;/li&gt;
&lt;li&gt;Produce executive reports and communicate technical findings to management&lt;/li&gt;
&lt;li&gt;Pass technical interviews for Cybersecurity Engineer, Cloud Security Engineer, SOC Analyst, Incident Response Analyst, Security Engineer, and DevSecOps Engineer roles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This roadmap is intentionally designed around how enterprise security teams operate, so students are learning workflows and projects that closely resemble real production environments rather than isolated labs.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>cybersecurity program</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Thu, 16 Jul 2026 19:49:21 +0000</pubDate>
      <link>https://dev.to/jumptotech/cybersecurity-program-3n2c</link>
      <guid>https://dev.to/jumptotech/cybersecurity-program-3n2c</guid>
      <description>&lt;p&gt;to get students hired as cybersecurity engineers in the U.S.&lt;/p&gt;

&lt;p&gt;If your goal is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;✅ 7 months&lt;/li&gt;
&lt;li&gt;✅ Students become employable&lt;/li&gt;
&lt;li&gt;✅ Resume with 5 years of experience (through realistic enterprise projects)&lt;/li&gt;
&lt;li&gt;✅ Pass technical interviews&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;then they need to learn much more than what is listed on that poster.&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 1. Computer &amp;amp; Networking (Weeks 1-4)
&lt;/h1&gt;

&lt;p&gt;Without this foundation students struggle later.&lt;/p&gt;

&lt;h3&gt;
  
  
  Operating Systems
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Windows 10/11&lt;/li&gt;
&lt;li&gt;Windows Server&lt;/li&gt;
&lt;li&gt;Active Directory&lt;/li&gt;
&lt;li&gt;Linux (Ubuntu)&lt;/li&gt;
&lt;li&gt;Kali Linux&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;OSI Model&lt;/li&gt;
&lt;li&gt;TCP/IP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;HTTP/HTTPS&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;FTP&lt;/li&gt;
&lt;li&gt;SMTP&lt;/li&gt;
&lt;li&gt;VPN&lt;/li&gt;
&lt;li&gt;Firewalls&lt;/li&gt;
&lt;li&gt;Routing&lt;/li&gt;
&lt;li&gt;VLAN&lt;/li&gt;
&lt;li&gt;NAT&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tools
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Wireshark&lt;/li&gt;
&lt;li&gt;Nmap&lt;/li&gt;
&lt;li&gt;tcpdump&lt;/li&gt;
&lt;li&gt;PuTTY&lt;/li&gt;
&lt;li&gt;OpenSSH&lt;/li&gt;
&lt;li&gt;VirtualBox&lt;/li&gt;
&lt;li&gt;VMware&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 2. Linux Administration
&lt;/h1&gt;

&lt;p&gt;Students should become comfortable using Linux every day.&lt;/p&gt;

&lt;p&gt;Topics&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;users&lt;/li&gt;
&lt;li&gt;groups&lt;/li&gt;
&lt;li&gt;permissions&lt;/li&gt;
&lt;li&gt;chmod&lt;/li&gt;
&lt;li&gt;chown&lt;/li&gt;
&lt;li&gt;grep&lt;/li&gt;
&lt;li&gt;awk&lt;/li&gt;
&lt;li&gt;sed&lt;/li&gt;
&lt;li&gt;cron&lt;/li&gt;
&lt;li&gt;bash scripting&lt;/li&gt;
&lt;li&gt;services&lt;/li&gt;
&lt;li&gt;systemctl&lt;/li&gt;
&lt;li&gt;journalctl&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bash&lt;/li&gt;
&lt;li&gt;Vim&lt;/li&gt;
&lt;li&gt;Nano&lt;/li&gt;
&lt;li&gt;Git&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 3. Windows Administration
&lt;/h1&gt;

&lt;p&gt;Topics&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active Directory&lt;/li&gt;
&lt;li&gt;Group Policy&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;DHCP&lt;/li&gt;
&lt;li&gt;Certificate Services&lt;/li&gt;
&lt;li&gt;PowerShell&lt;/li&gt;
&lt;li&gt;Windows Event Logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PowerShell&lt;/li&gt;
&lt;li&gt;Active Directory Users and Computers&lt;/li&gt;
&lt;li&gt;Event Viewer&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 4. Python
&lt;/h1&gt;

&lt;p&gt;Students do NOT need to become software developers.&lt;/p&gt;

&lt;p&gt;Enough to automate.&lt;/p&gt;

&lt;p&gt;Topics&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requests&lt;/li&gt;
&lt;li&gt;json&lt;/li&gt;
&lt;li&gt;csv&lt;/li&gt;
&lt;li&gt;API&lt;/li&gt;
&lt;li&gt;file automation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Libraries&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;requests&lt;/li&gt;
&lt;li&gt;pandas&lt;/li&gt;
&lt;li&gt;psutil&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 5. SIEM (SOC)
&lt;/h1&gt;

&lt;p&gt;This is where companies hire.&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;✅ Splunk&lt;/p&gt;

&lt;p&gt;✅ Microsoft Sentinel&lt;/p&gt;

&lt;p&gt;✅ Elastic SIEM&lt;/p&gt;

&lt;p&gt;✅ QRadar&lt;/p&gt;

&lt;p&gt;Concepts&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log ingestion&lt;/li&gt;
&lt;li&gt;Dashboards&lt;/li&gt;
&lt;li&gt;Alerts&lt;/li&gt;
&lt;li&gt;Correlation Rules&lt;/li&gt;
&lt;li&gt;MITRE ATT&amp;amp;CK Mapping&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 6. Threat Hunting
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sysmon&lt;/li&gt;
&lt;li&gt;Sigma Rules&lt;/li&gt;
&lt;li&gt;Velociraptor&lt;/li&gt;
&lt;li&gt;Chainsaw&lt;/li&gt;
&lt;li&gt;Hayabusa&lt;/li&gt;
&lt;li&gt;KAPE&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Students should investigate&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;malware&lt;/li&gt;
&lt;li&gt;persistence&lt;/li&gt;
&lt;li&gt;credential dumping&lt;/li&gt;
&lt;li&gt;lateral movement&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 7. Incident Response
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Velociraptor&lt;/li&gt;
&lt;li&gt;FTK Imager&lt;/li&gt;
&lt;li&gt;Autopsy&lt;/li&gt;
&lt;li&gt;Volatility3&lt;/li&gt;
&lt;li&gt;Redline&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Students learn&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Memory analysis&lt;/li&gt;
&lt;li&gt;Disk analysis&lt;/li&gt;
&lt;li&gt;Timeline&lt;/li&gt;
&lt;li&gt;IOC creation&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 8. Malware Analysis
&lt;/h1&gt;

&lt;p&gt;Beginner level&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PEStudio&lt;/li&gt;
&lt;li&gt;Detect It Easy&lt;/li&gt;
&lt;li&gt;VirusTotal&lt;/li&gt;
&lt;li&gt;Any.Run&lt;/li&gt;
&lt;li&gt;ProcMon&lt;/li&gt;
&lt;li&gt;Process Explorer&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 9. Cloud Security
&lt;/h1&gt;

&lt;p&gt;This is extremely important because many companies are moving workloads to the cloud.&lt;/p&gt;

&lt;p&gt;AWS&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;VPC&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;CloudTrail&lt;/li&gt;
&lt;li&gt;GuardDuty&lt;/li&gt;
&lt;li&gt;Security Hub&lt;/li&gt;
&lt;li&gt;Inspector&lt;/li&gt;
&lt;li&gt;Config&lt;/li&gt;
&lt;li&gt;CloudWatch&lt;/li&gt;
&lt;li&gt;S3 Security&lt;/li&gt;
&lt;li&gt;KMS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Azure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Azure Defender&lt;/li&gt;
&lt;li&gt;Sentinel&lt;/li&gt;
&lt;li&gt;Entra ID&lt;/li&gt;
&lt;li&gt;Key Vault&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 10. DevSecOps
&lt;/h1&gt;

&lt;p&gt;Most bootcamps ignore this.&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Git&lt;/p&gt;

&lt;p&gt;GitHub&lt;/p&gt;

&lt;p&gt;GitHub Actions&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;Kubernetes&lt;/p&gt;

&lt;p&gt;Terraform&lt;/p&gt;

&lt;p&gt;Jenkins&lt;/p&gt;

&lt;p&gt;Trivy&lt;/p&gt;

&lt;p&gt;OWASP Dependency Check&lt;/p&gt;

&lt;p&gt;SonarQube&lt;/p&gt;

&lt;p&gt;Semgrep&lt;/p&gt;

&lt;p&gt;Checkov&lt;/p&gt;

&lt;p&gt;Snyk&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 11. Web Security
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Burp Suite&lt;/p&gt;

&lt;p&gt;OWASP ZAP&lt;/p&gt;

&lt;p&gt;Postman&lt;/p&gt;

&lt;p&gt;ffuf&lt;/p&gt;

&lt;p&gt;Gobuster&lt;/p&gt;

&lt;p&gt;Nikto&lt;/p&gt;

&lt;p&gt;SQLMap&lt;/p&gt;

&lt;p&gt;Topics&lt;/p&gt;

&lt;p&gt;OWASP Top 10&lt;/p&gt;

&lt;p&gt;XSS&lt;/p&gt;

&lt;p&gt;SQL Injection&lt;/p&gt;

&lt;p&gt;CSRF&lt;/p&gt;

&lt;p&gt;Authentication&lt;/p&gt;

&lt;p&gt;JWT&lt;/p&gt;

&lt;p&gt;API Security&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 12. Vulnerability Management
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Tenable Nessus&lt;/p&gt;

&lt;p&gt;OpenVAS&lt;/p&gt;

&lt;p&gt;Qualys&lt;/p&gt;

&lt;p&gt;Nuclei&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 13. Email Security
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Microsoft Defender&lt;/p&gt;

&lt;p&gt;Proofpoint&lt;/p&gt;

&lt;p&gt;Mimecast&lt;/p&gt;

&lt;p&gt;Topics&lt;/p&gt;

&lt;p&gt;SPF&lt;/p&gt;

&lt;p&gt;DKIM&lt;/p&gt;

&lt;p&gt;DMARC&lt;/p&gt;

&lt;p&gt;Phishing&lt;/p&gt;

&lt;p&gt;BEC&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 14. Identity Security
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Microsoft Entra ID&lt;/p&gt;

&lt;p&gt;Okta&lt;/p&gt;

&lt;p&gt;Duo&lt;/p&gt;

&lt;p&gt;CyberArk&lt;/p&gt;

&lt;p&gt;HashiCorp Vault&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 15. Threat Intelligence
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;MISP&lt;/p&gt;

&lt;p&gt;VirusTotal&lt;/p&gt;

&lt;p&gt;AbuseIPDB&lt;/p&gt;

&lt;p&gt;Shodan&lt;/p&gt;

&lt;p&gt;GreyNoise&lt;/p&gt;

&lt;p&gt;AlienVault OTX&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 16. Detection Engineering
&lt;/h1&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;Sigma&lt;/p&gt;

&lt;p&gt;YARA&lt;/p&gt;

&lt;p&gt;Suricata&lt;/p&gt;

&lt;p&gt;Snort&lt;/p&gt;

&lt;p&gt;Zeek&lt;/p&gt;

&lt;p&gt;Students should write&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sigma rules&lt;/li&gt;
&lt;li&gt;YARA rules&lt;/li&gt;
&lt;li&gt;Detection logic&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 17. Purple Team
&lt;/h1&gt;

&lt;p&gt;Exactly what your tutor teaches.&lt;/p&gt;

&lt;p&gt;Tools&lt;/p&gt;

&lt;p&gt;MITRE ATT&amp;amp;CK&lt;/p&gt;

&lt;p&gt;Atomic Red Team&lt;/p&gt;

&lt;p&gt;Caldera&lt;/p&gt;

&lt;p&gt;Metasploit&lt;/p&gt;

&lt;p&gt;BloodHound&lt;/p&gt;

&lt;p&gt;CrackMapExec&lt;/p&gt;

&lt;p&gt;Responder&lt;/p&gt;

&lt;p&gt;Impacket&lt;/p&gt;




&lt;h1&gt;
  
  
  Phase 18. Reporting
&lt;/h1&gt;

&lt;p&gt;Students should know how to write&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incident Reports&lt;/li&gt;
&lt;li&gt;Executive Summary&lt;/li&gt;
&lt;li&gt;Risk Assessment&lt;/li&gt;
&lt;li&gt;Vulnerability Reports&lt;/li&gt;
&lt;li&gt;Remediation Plans&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Phase 19. Professional Skills
&lt;/h1&gt;

&lt;p&gt;Recruiters care about these too.&lt;/p&gt;

&lt;p&gt;Students should learn&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Resume&lt;/li&gt;
&lt;li&gt;LinkedIn&lt;/li&gt;
&lt;li&gt;Technical interview&lt;/li&gt;
&lt;li&gt;Behavioral interview&lt;/li&gt;
&lt;li&gt;STAR method&lt;/li&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Documentation&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Enterprise Projects (This is what creates "5 years of experience")
&lt;/h1&gt;

&lt;p&gt;Instead of only labs, students should complete projects that resemble real work:&lt;/p&gt;

&lt;h3&gt;
  
  
  Project 1 – Enterprise SOC
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build a Windows Active Directory domain&lt;/li&gt;
&lt;li&gt;Generate attack traffic&lt;/li&gt;
&lt;li&gt;Collect logs in Splunk&lt;/li&gt;
&lt;li&gt;Create alerts&lt;/li&gt;
&lt;li&gt;Investigate incidents&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project 2 – Ransomware Incident Response
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simulate ransomware&lt;/li&gt;
&lt;li&gt;Contain affected hosts&lt;/li&gt;
&lt;li&gt;Recover systems&lt;/li&gt;
&lt;li&gt;Produce an executive report&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project 3 – AWS Cloud Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Deploy an application in AWS&lt;/li&gt;
&lt;li&gt;Configure CloudTrail, GuardDuty, Security Hub, IAM least privilege&lt;/li&gt;
&lt;li&gt;Detect and investigate suspicious activity&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project 4 – DevSecOps Pipeline
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Build a CI/CD pipeline with GitHub Actions or Jenkins&lt;/li&gt;
&lt;li&gt;Integrate SonarQube, Trivy, Semgrep, and Checkov&lt;/li&gt;
&lt;li&gt;Deploy to Docker/Kubernetes&lt;/li&gt;
&lt;li&gt;Remediate vulnerabilities and redeploy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Project 5 – Purple Team Capstone
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Use Atomic Red Team or Caldera to emulate attacks&lt;/li&gt;
&lt;li&gt;Detect them with Splunk or Microsoft Sentinel&lt;/li&gt;
&lt;li&gt;Hunt threats, perform incident response, and present findings to "management"&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Recommended tool stack for a 2026 job-ready cybersecurity bootcamp
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Primary Tools&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Operating Systems&lt;/td&gt;
&lt;td&gt;Windows Server, Ubuntu, Kali&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Networking&lt;/td&gt;
&lt;td&gt;Wireshark, Nmap&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SIEM&lt;/td&gt;
&lt;td&gt;Splunk, Microsoft Sentinel&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Threat Hunting&lt;/td&gt;
&lt;td&gt;Sysmon, Sigma, Velociraptor&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Incident Response&lt;/td&gt;
&lt;td&gt;Autopsy, FTK Imager, Volatility3&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Vulnerability Scanning&lt;/td&gt;
&lt;td&gt;Nessus, OpenVAS&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Web Security&lt;/td&gt;
&lt;td&gt;Burp Suite, OWASP ZAP, Postman&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud Security&lt;/td&gt;
&lt;td&gt;AWS (CloudTrail, GuardDuty, Security Hub, IAM)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;DevSecOps&lt;/td&gt;
&lt;td&gt;Git, GitHub, Docker, Kubernetes, Terraform, Jenkins, SonarQube, Trivy, Semgrep, Checkov&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Threat Intelligence&lt;/td&gt;
&lt;td&gt;VirusTotal, MISP, Shodan, AbuseIPDB&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Detection Engineering&lt;/td&gt;
&lt;td&gt;Sigma, YARA, Zeek, Suricata&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;This combination gives students exposure to the tools and workflows commonly encountered in SOC Analyst, Incident Response, Cloud Security, Security Engineer, and DevSecOps roles. Combined with strong enterprise-style projects and interview preparation, it provides a much stronger foundation for entering the cybersecurity job market than the Purple Team curriculum alone.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>strong senior-level DevOps/Platform Engineer answers.</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Thu, 16 Jul 2026 14:38:59 +0000</pubDate>
      <link>https://dev.to/jumptotech/strong-senior-level-devopsplatform-engineer-answers-5a1j</link>
      <guid>https://dev.to/jumptotech/strong-senior-level-devopsplatform-engineer-answers-5a1j</guid>
      <description>&lt;p&gt;Based on this interview transcript, these are the questions the interviewers asked (or were trying to ask), along with strong senior-level DevOps/Platform Engineer answers.&lt;/p&gt;




&lt;h1&gt;
  
  
  1. Tell me about yourself.
&lt;/h1&gt;

&lt;h3&gt;
  
  
  What they are testing
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Career progression&lt;/li&gt;
&lt;li&gt;Why you are changing jobs&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I have around eight years of experience in infrastructure, cloud, and DevOps engineering. I started my career as a System Administrator, which gave me a strong Linux, networking, and infrastructure foundation. From there I moved into Cloud Engineering where I worked extensively with AWS, GCP, Kubernetes, CI/CD automation, and Infrastructure as Code.&lt;/p&gt;

&lt;p&gt;During my career I've helped modernize deployment processes, automate infrastructure with Terraform, migrate applications to Kubernetes, and improve software delivery through GitHub Actions and GitOps practices.&lt;/p&gt;

&lt;p&gt;In my current role I work closely with developers, security teams, and platform engineers to maintain production Kubernetes clusters, build CI/CD pipelines, improve observability, and support cloud infrastructure.&lt;/p&gt;

&lt;p&gt;I'm now looking for a role where I can work on larger platform engineering challenges, contribute to architectural decisions, and continue growing technically.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  2. Your resume says deployments became 40% faster. What exactly made them faster?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  What they are testing
&lt;/h3&gt;

&lt;p&gt;Did YOU understand the improvement?&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;The speed improvement wasn't simply because we moved from Jenkins to GitHub Actions. The improvement came from redesigning the entire delivery process.&lt;/p&gt;

&lt;p&gt;We reduced manual steps, optimized pipeline stages, introduced parallel execution where possible, improved dependency caching, reduced unnecessary Docker rebuilds, and integrated directly with GitHub instead of maintaining separate Jenkins jobs.&lt;/p&gt;

&lt;p&gt;GitHub Actions also simplified authentication and repository integration, reducing operational overhead.&lt;/p&gt;

&lt;p&gt;Overall deployment time improved because the pipeline became more efficient, easier to maintain, and required less manual intervention.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  3. Why did moving from Jenkins to GitHub Actions improve deployment?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;GitHub Actions integrates directly with GitHub repositories, so there is no need to manage separate Jenkins jobs, webhooks, or credentials in many cases.&lt;/p&gt;

&lt;p&gt;The workflows are stored as YAML alongside the application code, making version control and code review much easier.&lt;/p&gt;

&lt;p&gt;GitHub-hosted or self-hosted runners scale more easily than maintaining Jenkins agents.&lt;/p&gt;

&lt;p&gt;We also eliminated plugin management, which was one of the biggest maintenance burdens in Jenkins.&lt;/p&gt;

&lt;p&gt;The improvement wasn't because Jenkins is bad—Jenkins is extremely powerful—but GitHub Actions was a better fit for our GitHub-centric development workflow.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  4. Suppose your manager says:
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;Jenkins works fine. Why should we migrate?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I wouldn't argue that Jenkins is wrong. Instead I'd present measurable business benefits.&lt;/p&gt;

&lt;p&gt;I'd compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;maintenance effort&lt;/li&gt;
&lt;li&gt;plugin upgrades&lt;/li&gt;
&lt;li&gt;security patching&lt;/li&gt;
&lt;li&gt;onboarding time&lt;/li&gt;
&lt;li&gt;pipeline reliability&lt;/li&gt;
&lt;li&gt;deployment speed&lt;/li&gt;
&lt;li&gt;operational cost&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I'd propose a proof of concept by migrating one application first.&lt;/p&gt;

&lt;p&gt;If the pilot demonstrates lower maintenance, faster deployments, and improved developer experience, then we can gradually migrate additional projects.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Senior engineers convince people with data, not opinions.&lt;/p&gt;




&lt;h1&gt;
  
  
  5. What arguments would you use to convince someone to migrate?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I would explain that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub Actions keeps CI/CD configuration inside the repository.&lt;/li&gt;
&lt;li&gt;Developers own their pipelines.&lt;/li&gt;
&lt;li&gt;Less infrastructure maintenance.&lt;/li&gt;
&lt;li&gt;Fewer Jenkins plugins.&lt;/li&gt;
&lt;li&gt;Better GitHub integration.&lt;/li&gt;
&lt;li&gt;Easier secrets management.&lt;/li&gt;
&lt;li&gt;Easier code reviews.&lt;/li&gt;
&lt;li&gt;Better scalability with runners.&lt;/li&gt;
&lt;li&gt;Reduced operational overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I would also present metrics from a pilot project instead of relying on personal preference.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  6. Do you use GitHub-hosted runners or self-hosted runners?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;We use self-hosted runners connected to our internal infrastructure because many deployments require access to private Kubernetes clusters, internal services, private container registries, and corporate networks.&lt;/p&gt;

&lt;p&gt;Self-hosted runners also provide more control over installed software and security policies.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  7. How do you know if your CI/CD pipeline is healthy?
&lt;/h1&gt;

&lt;p&gt;This was one of their favorite questions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;A healthy pipeline isn't just one that passes.&lt;/p&gt;

&lt;p&gt;I monitor several indicators:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Success rate&lt;/li&gt;
&lt;li&gt;Pipeline duration&lt;/li&gt;
&lt;li&gt;Failure trends&lt;/li&gt;
&lt;li&gt;Queue times&lt;/li&gt;
&lt;li&gt;Runner availability&lt;/li&gt;
&lt;li&gt;Deployment success rate&lt;/li&gt;
&lt;li&gt;Rollback frequency&lt;/li&gt;
&lt;li&gt;Test stability&lt;/li&gt;
&lt;li&gt;Security scan completion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I also monitor infrastructure supporting the pipeline, including runner CPU, memory, disk space, Kubernetes cluster health, network connectivity, and artifact repositories.&lt;/p&gt;

&lt;p&gt;Finally, I verify post-deployment health using monitoring dashboards, application logs, readiness probes, and production alerts.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  8. How do you know if a failing pipeline is caused by infrastructure instead of developer code?
&lt;/h1&gt;

&lt;p&gt;This is actually a very senior Platform Engineering question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I start by identifying where the failure occurred.&lt;/p&gt;

&lt;p&gt;If compilation or unit tests fail immediately after a code change, it's likely an application issue.&lt;/p&gt;

&lt;p&gt;If unrelated pull requests suddenly begin failing at the same stage, that's a strong indicator of infrastructure or shared environment issues.&lt;/p&gt;

&lt;p&gt;I compare:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recent pipeline history&lt;/li&gt;
&lt;li&gt;Multiple PR failures&lt;/li&gt;
&lt;li&gt;Runner logs&lt;/li&gt;
&lt;li&gt;Kubernetes cluster health&lt;/li&gt;
&lt;li&gt;Network connectivity&lt;/li&gt;
&lt;li&gt;Container registry availability&lt;/li&gt;
&lt;li&gt;Cloud service status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If many unrelated builds fail simultaneously, I investigate the CI infrastructure rather than the application code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  9. Suppose you have 100 pull requests and tests randomly fail. How do you identify flaky tests?
&lt;/h1&gt;

&lt;p&gt;Excellent question.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I first review historical execution data.&lt;/p&gt;

&lt;p&gt;If the same test fails across unrelated code changes and passes when rerun without modifications, it's likely flaky.&lt;/p&gt;

&lt;p&gt;I analyze:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Failure frequency&lt;/li&gt;
&lt;li&gt;Test duration&lt;/li&gt;
&lt;li&gt;Retry success rate&lt;/li&gt;
&lt;li&gt;Environment consistency&lt;/li&gt;
&lt;li&gt;Infrastructure logs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I compare failures across multiple pull requests.&lt;/p&gt;

&lt;p&gt;If unrelated changes fail the same test, the problem is likely the test or environment rather than the application.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  10. How do you distinguish infrastructure failures from flaky tests?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Infrastructure failures usually affect many pipelines simultaneously.&lt;/p&gt;

&lt;p&gt;Examples include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Kubernetes unavailable&lt;/li&gt;
&lt;li&gt;Docker registry unavailable&lt;/li&gt;
&lt;li&gt;DNS failures&lt;/li&gt;
&lt;li&gt;Runner offline&lt;/li&gt;
&lt;li&gt;Network outages&lt;/li&gt;
&lt;li&gt;Cloud API failures&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Flaky tests usually:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fail inconsistently&lt;/li&gt;
&lt;li&gt;Pass after rerun&lt;/li&gt;
&lt;li&gt;Fail without code changes&lt;/li&gt;
&lt;li&gt;Are isolated to specific test suites&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Looking at historical patterns helps distinguish between the two.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  11. How do you manage technical debt?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Technical debt should be managed continuously rather than postponed indefinitely.&lt;/p&gt;

&lt;p&gt;During sprint planning we reserve capacity specifically for technical improvements.&lt;/p&gt;

&lt;p&gt;We prioritize debt based on business impact, operational risk, and engineering productivity.&lt;/p&gt;

&lt;p&gt;Larger items become backlog stories with estimated effort, while smaller improvements are completed alongside feature work.&lt;/p&gt;

&lt;p&gt;This prevents technical debt from accumulating to the point where it slows future delivery.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  12. How do you convince management to spend time reducing technical debt?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;I connect technical debt to business outcomes.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;slower deployments&lt;/li&gt;
&lt;li&gt;increased outages&lt;/li&gt;
&lt;li&gt;higher maintenance costs&lt;/li&gt;
&lt;li&gt;slower feature delivery&lt;/li&gt;
&lt;li&gt;increased operational risk&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Rather than saying "the code needs cleaning," I explain how reducing technical debt improves delivery speed, reliability, and customer experience.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  13. Should technical debt always be fixed immediately?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;No.&lt;/p&gt;

&lt;p&gt;We prioritize technical debt based on risk and business value.&lt;/p&gt;

&lt;p&gt;Critical security issues or production stability problems should be addressed immediately.&lt;/p&gt;

&lt;p&gt;Lower-priority improvements are scheduled into future sprints to balance feature delivery with long-term maintainability.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  14. Why do companies migrate from Jenkins to GitHub Actions?
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Strong Answer
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;Companies migrate when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Source code is already hosted in GitHub.&lt;/li&gt;
&lt;li&gt;They want simpler pipeline management.&lt;/li&gt;
&lt;li&gt;They want Infrastructure as Code for CI/CD.&lt;/li&gt;
&lt;li&gt;They want fewer plugins.&lt;/li&gt;
&lt;li&gt;They want easier maintenance.&lt;/li&gt;
&lt;li&gt;They want tighter GitHub integration.&lt;/li&gt;
&lt;li&gt;They want better developer experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However, organizations with very complex enterprise workflows often continue using Jenkins because it provides greater flexibility and plugin extensibility.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;These are classic senior DevOps/Platform Engineering interview questions. The interviewers were less interested in tool names and more interested in your engineering reasoning, troubleshooting approach, and ability to justify technical decisions with operational and business benefits.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>interveiw questions</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Tue, 14 Jul 2026 22:49:21 +0000</pubDate>
      <link>https://dev.to/jumptotech/interveiw-questions-2l93</link>
      <guid>https://dev.to/jumptotech/interveiw-questions-2l93</guid>
      <description>&lt;ol&gt;
&lt;li&gt;&lt;p&gt;What is Docker?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Docker image?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Docker container?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the difference between a Docker image and a Docker container?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use Docker?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What problem does Docker solve?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command lists running Docker containers?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command lists all Docker containers?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command lists Docker images?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command builds a Docker image?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command starts a Docker container?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command stops a Docker container?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command removes a Docker container?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command removes a Docker image?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command downloads an image from Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which command uploads an image to Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Dockerfile?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the purpose of a Dockerfile?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which instruction specifies the base image in a Dockerfile?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which instruction copies files into a Docker image?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which instruction installs software during the image build?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which instruction specifies the default command to run?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the purpose of EXPOSE in a Dockerfile?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Docker volume?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why are Docker volumes important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Docker networking?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the bridge network in Docker?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens when a Docker container stops?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Do Docker containers share the host operating system kernel?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why are containers faster than virtual machines?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do developers use Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Docker registry?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is Docker Hub public or private?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an official Docker image?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why should you use official Docker images?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What command logs into Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What command pushes an image to Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What command pulls an image from Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why would a company use private repositories in Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does ECR stand for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Amazon ECR?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use Amazon ECR instead of Docker Hub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Is Amazon ECR public or private by default?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which AWS service commonly pulls images from ECR?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can Amazon ECR scan images for vulnerabilities?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How do you authenticate Docker with ECR?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens if ECR authentication expires?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is image scanning important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does ECR store?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does EC2 stand for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an EC2 instance?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use EC2?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What operating systems can run on EC2?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a key pair in EC2?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is SSH used?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the default SSH port?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the default HTTP port?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the default HTTPS port?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an Elastic IP?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Amazon EBS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why are EBS volumes important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an EC2 Security Group?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do we use Security Groups?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens if port 22 is blocked?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens if port 80 is blocked?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is User Data in EC2?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an EC2 AMI?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies create custom AMIs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the difference between stopping and terminating an EC2 instance?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does ALB stand for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an Application Load Balancer?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use an ALB?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which OSI layer does ALB operate on?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What protocols does ALB support?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Target Group?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Health Check?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why are Health Checks important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens if one EC2 instance becomes unhealthy?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can one ALB route traffic to multiple applications?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is path-based routing?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is host-based routing?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why does an ALB improve availability?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens if there is no Load Balancer?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can ALB distribute traffic across multiple Availability Zones?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does ASG stand for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an Auto Scaling Group?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use Auto Scaling?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Scale Out?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Scale In?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Desired Capacity?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Minimum Capacity?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Maximum Capacity?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which AWS service provides metrics for Auto Scaling?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which metric commonly triggers Auto Scaling?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens when CPU usage reaches 90%?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens when traffic decreases?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How does Auto Scaling help reduce costs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Can Auto Scaling replace failed EC2 instances automatically?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is Auto Scaling important for production?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a CPU?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the main function of a CPU?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does CPU utilization mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens when CPU usage reaches 100%?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is RAM?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is RAM important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens when RAM is full?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is swapping?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is SSD?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is the difference between SSD and HDD?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which is faster: SSD or HDD?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies prefer SSDs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which component stores files permanently?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which component temporarily stores running applications?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which component performs calculations?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is hardware?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is software?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is firmware?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a motherboard?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is BIOS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is UEFI?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a GPU?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Network Interface Card (NIC)?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a power supply (PSU)?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a server?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a workstation?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a laptop?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a peripheral device?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which components are considered hardware?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Which are examples of software?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a network?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an IP address?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a private IP address?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a public IP address?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a MAC address?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is DNS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is DHCP?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a router?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a switch?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a firewall?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a subnet?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a gateway?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is NAT?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is ping used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is traceroute used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is latency?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is bandwidth?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is packet loss?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is TCP?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is UDP?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is HTTP?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is HTTPS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is FTP?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is SSH?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is SSL/TLS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is port 22 used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is port 80 used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is port 443 used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is port 53 used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is port 3306 commonly used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does API stand for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an API?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do developers use APIs?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an API endpoint?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a REST API?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is JSON?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is XML?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an HTTP request?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an HTTP response?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does the GET method do?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does the POST method do?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does the PUT method do?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does the DELETE method do?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does the PATCH method do?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an API client?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an API server?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 200 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 201 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 400 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 401 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 403 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 404 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What does HTTP status code 500 mean?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is authentication?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is authorization?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is an API token?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a Bearer Token?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Postman used for?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is Swagger/OpenAPI?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is API documentation important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What happens when a developer pushes code to GitHub?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why is CI/CD important?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is a build?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is testing in CI/CD?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What is deployment?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use Docker with CI/CD?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use ECR with ECS?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why do companies use ALB with EC2?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How do Auto Scaling and ALB work together?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How do Docker, ECR, EC2, ALB, ASG, APIs, networking, hardware, and software work together in a modern cloud application?&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                Developer
                    │
            git add .
            git commit
            git push
                    │
                    ▼
              GitHub Repository
                    │
                    ▼
             GitHub Actions (CI/CD)
                    │
        ┌───────────┼────────────┐
        ▼           ▼            ▼
 Build Frontend  Build Backend  Build AI Service
        │           │            │
        ▼           ▼            ▼
 Push to ECR    Push to ECR   Push to ECR
        │           │            │
        └───────────┼────────────┘
                    ▼
              Amazon ECR
                    │
                    ▼
            Amazon ECS Cluster
                    │
        ┌───────────┼────────────┐
        ▼           ▼            ▼
 frontend-service backend-service ai-service
        │           │            │
        ▼           ▼            ▼
     New Tasks   New Tasks    New Tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Developer
&lt;/h1&gt;

&lt;p&gt;The developer only does:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;

git commit &lt;span class="nt"&gt;-m&lt;/span&gt; &lt;span class="s2"&gt;"Deploy to Dev"&lt;/span&gt;

git push origin main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  GitHub Actions
&lt;/h1&gt;

&lt;p&gt;Automatically executes:&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1
&lt;/h2&gt;

&lt;p&gt;Checkout latest code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;GitHub
↓

Latest Source Code
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 2
&lt;/h2&gt;

&lt;p&gt;Login to AWS&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;AWS Credentials
↓

Authenticate
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 3
&lt;/h2&gt;

&lt;p&gt;Login to Amazon ECR&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Docker Login
↓

Amazon ECR
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 4
&lt;/h2&gt;

&lt;p&gt;Build Frontend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; frontend ./frontend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 5
&lt;/h2&gt;

&lt;p&gt;Tag Frontend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag frontend:latest &lt;span class="se"&gt;\&lt;/span&gt;
230026708124.dkr.ecr.us-east-1.amazonaws.com/frontend:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 6
&lt;/h2&gt;

&lt;p&gt;Push Frontend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push &lt;span class="se"&gt;\&lt;/span&gt;
230026708124.dkr.ecr.us-east-1.amazonaws.com/frontend:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 7
&lt;/h2&gt;

&lt;p&gt;Build Backend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; backend ./backend
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 8
&lt;/h2&gt;

&lt;p&gt;Tag Backend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag backend:latest &lt;span class="se"&gt;\&lt;/span&gt;
230026708124.dkr.ecr.us-east-1.amazonaws.com/backend:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 9
&lt;/h2&gt;

&lt;p&gt;Push Backend&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push &lt;span class="se"&gt;\&lt;/span&gt;
230026708124.dkr.ecr.us-east-1.amazonaws.com/backend:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 10
&lt;/h2&gt;

&lt;p&gt;Build AI Service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker build &lt;span class="nt"&gt;-t&lt;/span&gt; ai-service ./ai-service
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 11
&lt;/h2&gt;

&lt;p&gt;Tag AI Service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker tag ai-service:latest &lt;span class="se"&gt;\&lt;/span&gt;
230026708124.dkr.ecr.us-east-1.amazonaws.com/ai-service:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 12
&lt;/h2&gt;

&lt;p&gt;Push AI Service&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker push &lt;span class="se"&gt;\&lt;/span&gt;
230026708124.dkr.ecr.us-east-1.amazonaws.com/ai-service:latest
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Step 13
&lt;/h2&gt;

&lt;p&gt;Deploy to Dev&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs update-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--cluster&lt;/span&gt; fde-ai-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--service&lt;/span&gt; frontend-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--force-new-deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs update-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--cluster&lt;/span&gt; fde-ai-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--service&lt;/span&gt; backend-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--force-new-deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;aws ecs update-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--cluster&lt;/span&gt; fde-ai-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--service&lt;/span&gt; ai-service &lt;span class="se"&gt;\&lt;/span&gt;
&lt;span class="nt"&gt;--force-new-deployment&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  ECS
&lt;/h1&gt;

&lt;p&gt;Amazon ECS notices the deployment.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Old Container

↓

Stop

↓

Pull New Image

↓

Start New Container
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This happens independently for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;frontend-service&lt;/li&gt;
&lt;li&gt;backend-service&lt;/li&gt;
&lt;li&gt;ai-service&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Result
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer

↓

Git Push

↓

GitHub Actions

↓

Docker Build

↓

Amazon ECR

↓

Amazon ECS

↓

Dev Environment Updated
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  How to explain it in your YouTube video
&lt;/h1&gt;

&lt;blockquote&gt;
&lt;p&gt;"The developer never logs into AWS to deploy code. They simply push their changes to GitHub. GitHub Actions builds Docker images for the frontend, backend, and AI service, pushes those images to Amazon ECR, and tells Amazon ECS to start a new deployment. ECS pulls the latest images from ECR, replaces the running containers, and the Dev environment is updated automatically."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  One recommendation before you record
&lt;/h2&gt;

&lt;p&gt;For the next version of the project, consider using a dedicated &lt;strong&gt;&lt;code&gt;dev&lt;/code&gt; branch&lt;/strong&gt; instead of deploying from &lt;code&gt;main&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feature/login
        │
        ▼
      dev
        │
   GitHub Actions
        │
   Deploy to Dev (ECS)
        │
   Testing / QA
        │
      main
        │
   Production Deployment
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That lets you demonstrate a more realistic enterprise workflow where developers merge to &lt;code&gt;dev&lt;/code&gt; for testing, and only approved changes reach &lt;code&gt;main&lt;/code&gt; for production.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>LEVEL 2 – CI/CD Production Deployment with GitHub Actions</title>
      <dc:creator>Aisalkyn Aidarova</dc:creator>
      <pubDate>Sat, 11 Jul 2026 00:51:36 +0000</pubDate>
      <link>https://dev.to/jumptotech/level-2-cicd-production-deployment-with-github-actions-5bg4</link>
      <guid>https://dev.to/jumptotech/level-2-cicd-production-deployment-with-github-actions-5bg4</guid>
      <description>&lt;h2&gt;
  
  
  Production Scenario
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;You joined &lt;strong&gt;ABC Financial Bank&lt;/strong&gt; as a Junior DevOps Engineer.&lt;/p&gt;

&lt;p&gt;Developers don't want to send ZIP files anymore.&lt;/p&gt;

&lt;p&gt;They don't want you to SSH into servers every day.&lt;/p&gt;

&lt;p&gt;Every time a developer pushes code to GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The application should automatically build.&lt;/li&gt;
&lt;li&gt;Tests should run.&lt;/li&gt;
&lt;li&gt;A Docker image should be created.&lt;/li&gt;
&lt;li&gt;The application should automatically deploy to AWS EC2.&lt;/li&gt;
&lt;li&gt;Users should immediately see the new version.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is Continuous Integration (CI) and Continuous Deployment (CD).&lt;/p&gt;




&lt;h1&gt;
  
  
  What Students Will Learn
&lt;/h1&gt;

&lt;h3&gt;
  
  
  Git
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Repository&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;Branch&lt;/li&gt;
&lt;li&gt;Merge&lt;/li&gt;
&lt;li&gt;Clone&lt;/li&gt;
&lt;li&gt;Pull&lt;/li&gt;
&lt;li&gt;Push&lt;/li&gt;
&lt;li&gt;Remote&lt;/li&gt;
&lt;li&gt;HEAD&lt;/li&gt;
&lt;li&gt;Merge conflicts&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  GitHub
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Repository&lt;/li&gt;
&lt;li&gt;Branch protection&lt;/li&gt;
&lt;li&gt;Pull Requests&lt;/li&gt;
&lt;li&gt;Issues&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;li&gt;Actions&lt;/li&gt;
&lt;li&gt;Collaboration&lt;/li&gt;
&lt;li&gt;Forks&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  GitHub Actions
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Workflow&lt;/li&gt;
&lt;li&gt;Runner&lt;/li&gt;
&lt;li&gt;Jobs&lt;/li&gt;
&lt;li&gt;Steps&lt;/li&gt;
&lt;li&gt;Events&lt;/li&gt;
&lt;li&gt;Triggers&lt;/li&gt;
&lt;li&gt;Secrets&lt;/li&gt;
&lt;li&gt;Variables&lt;/li&gt;
&lt;li&gt;SSH Deployment&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Docker
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Dockerfile&lt;/li&gt;
&lt;li&gt;Image&lt;/li&gt;
&lt;li&gt;Container&lt;/li&gt;
&lt;li&gt;Build&lt;/li&gt;
&lt;li&gt;Push&lt;/li&gt;
&lt;li&gt;Pull&lt;/li&gt;
&lt;li&gt;Restart&lt;/li&gt;
&lt;li&gt;Remove&lt;/li&gt;
&lt;li&gt;Volumes&lt;/li&gt;
&lt;li&gt;Networks&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  AWS
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;EC2&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Elastic IP&lt;/li&gt;
&lt;li&gt;IAM&lt;/li&gt;
&lt;li&gt;SSH Keys&lt;/li&gt;
&lt;li&gt;CloudWatch (introduction)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Linux
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;chmod&lt;/li&gt;
&lt;li&gt;chown&lt;/li&gt;
&lt;li&gt;systemctl&lt;/li&gt;
&lt;li&gt;apt&lt;/li&gt;
&lt;li&gt;nano&lt;/li&gt;
&lt;li&gt;vim&lt;/li&gt;
&lt;li&gt;journalctl&lt;/li&gt;
&lt;li&gt;docker logs&lt;/li&gt;
&lt;li&gt;ps&lt;/li&gt;
&lt;li&gt;top&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Networking
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;IP&lt;/li&gt;
&lt;li&gt;DNS&lt;/li&gt;
&lt;li&gt;HTTP&lt;/li&gt;
&lt;li&gt;HTTPS&lt;/li&gt;
&lt;li&gt;TCP&lt;/li&gt;
&lt;li&gt;Ports&lt;/li&gt;
&lt;li&gt;SSH&lt;/li&gt;
&lt;li&gt;NAT&lt;/li&gt;
&lt;li&gt;Security Groups&lt;/li&gt;
&lt;li&gt;Load Balancer (preview)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  API
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;REST&lt;/li&gt;
&lt;li&gt;HTTP Methods&lt;/li&gt;
&lt;li&gt;JSON&lt;/li&gt;
&lt;li&gt;Headers&lt;/li&gt;
&lt;li&gt;Status Codes&lt;/li&gt;
&lt;li&gt;curl&lt;/li&gt;
&lt;li&gt;Postman&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  DevOps Concepts
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;CI&lt;/li&gt;
&lt;li&gt;CD&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;Build&lt;/li&gt;
&lt;li&gt;Test&lt;/li&gt;
&lt;li&gt;Release&lt;/li&gt;
&lt;li&gt;Deployment&lt;/li&gt;
&lt;li&gt;Rollback&lt;/li&gt;
&lt;li&gt;Monitoring&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  Final Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer

↓

Git

↓

GitHub Repository

↓

GitHub Actions

↓

Ubuntu Runner

↓

SSH

↓

AWS EC2

↓

Docker Build

↓

Docker Container

↓

Application

↓

Browser
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Module 1 – Introduction
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What is Hardware?
&lt;/h2&gt;

&lt;p&gt;Hardware is the physical equipment.&lt;/p&gt;

&lt;p&gt;Examples&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CPU&lt;/li&gt;
&lt;li&gt;RAM&lt;/li&gt;
&lt;li&gt;SSD&lt;/li&gt;
&lt;li&gt;Motherboard&lt;/li&gt;
&lt;li&gt;Network Card&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Without hardware nothing can run.&lt;/p&gt;




&lt;h2&gt;
  
  
  What is Software?
&lt;/h2&gt;

&lt;p&gt;Software is instructions.&lt;/p&gt;

&lt;p&gt;Examples&lt;/p&gt;

&lt;p&gt;Linux&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;Git&lt;/p&gt;

&lt;p&gt;Python&lt;/p&gt;

&lt;p&gt;Chrome&lt;/p&gt;

&lt;p&gt;Nginx&lt;/p&gt;




&lt;p&gt;Question&lt;/p&gt;

&lt;p&gt;Can software exist without hardware?&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;




&lt;p&gt;Can hardware work without software?&lt;/p&gt;

&lt;p&gt;No.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 2 – How Internet Works
&lt;/h1&gt;

&lt;p&gt;Show&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Browser

↓

Internet

↓

AWS

↓

Linux Server

↓

Docker

↓

Application
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Explain every layer.&lt;/p&gt;

&lt;p&gt;Students understand what happens after pressing Enter.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 3 – Client Server
&lt;/h1&gt;

&lt;p&gt;Client&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Requests information&lt;/p&gt;

&lt;p&gt;Server&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Returns information&lt;/p&gt;

&lt;p&gt;Example&lt;/p&gt;

&lt;p&gt;Browser&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Amazon&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Product page&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 4 – HTTP
&lt;/h1&gt;

&lt;p&gt;Teach&lt;/p&gt;

&lt;p&gt;GET&lt;/p&gt;

&lt;p&gt;POST&lt;/p&gt;

&lt;p&gt;PUT&lt;/p&gt;

&lt;p&gt;PATCH&lt;/p&gt;

&lt;p&gt;DELETE&lt;/p&gt;

&lt;p&gt;Explain real examples.&lt;/p&gt;

&lt;p&gt;Amazon&lt;/p&gt;

&lt;p&gt;Facebook&lt;/p&gt;

&lt;p&gt;Netflix&lt;/p&gt;

&lt;p&gt;Banking&lt;/p&gt;




&lt;p&gt;Status Codes&lt;/p&gt;

&lt;p&gt;200&lt;/p&gt;

&lt;p&gt;201&lt;/p&gt;

&lt;p&gt;301&lt;/p&gt;

&lt;p&gt;400&lt;/p&gt;

&lt;p&gt;401&lt;/p&gt;

&lt;p&gt;403&lt;/p&gt;

&lt;p&gt;404&lt;/p&gt;

&lt;p&gt;500&lt;/p&gt;

&lt;p&gt;502&lt;/p&gt;

&lt;p&gt;503&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 5 – REST API
&lt;/h1&gt;

&lt;p&gt;Students build&lt;/p&gt;

&lt;p&gt;GET&lt;/p&gt;

&lt;p&gt;/products&lt;/p&gt;

&lt;p&gt;POST&lt;/p&gt;

&lt;p&gt;/products&lt;/p&gt;

&lt;p&gt;DELETE&lt;/p&gt;

&lt;p&gt;/products&lt;/p&gt;

&lt;p&gt;Test&lt;/p&gt;

&lt;p&gt;Postman&lt;/p&gt;

&lt;p&gt;curl&lt;/p&gt;

&lt;p&gt;Browser&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 6 – Git
&lt;/h1&gt;

&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Git is local.&lt;/p&gt;

&lt;p&gt;GitHub is remote.&lt;/p&gt;

&lt;p&gt;Diagram&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Laptop

↓

Git

↓

GitHub
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Commands&lt;/p&gt;

&lt;p&gt;git init&lt;/p&gt;

&lt;p&gt;git status&lt;/p&gt;

&lt;p&gt;git add&lt;/p&gt;

&lt;p&gt;git commit&lt;/p&gt;

&lt;p&gt;git log&lt;/p&gt;

&lt;p&gt;git diff&lt;/p&gt;

&lt;p&gt;git restore&lt;/p&gt;

&lt;p&gt;git branch&lt;/p&gt;

&lt;p&gt;git switch&lt;/p&gt;

&lt;p&gt;git merge&lt;/p&gt;

&lt;p&gt;git clone&lt;/p&gt;

&lt;p&gt;git fetch&lt;/p&gt;

&lt;p&gt;git pull&lt;/p&gt;

&lt;p&gt;git push&lt;/p&gt;




&lt;p&gt;Explain every command.&lt;/p&gt;

&lt;p&gt;Why it exists.&lt;/p&gt;

&lt;p&gt;Where companies use it.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 7 – GitHub
&lt;/h1&gt;

&lt;p&gt;Repository&lt;/p&gt;

&lt;p&gt;Branch&lt;/p&gt;

&lt;p&gt;Pull Request&lt;/p&gt;

&lt;p&gt;Review&lt;/p&gt;

&lt;p&gt;Merge&lt;/p&gt;

&lt;p&gt;Actions&lt;/p&gt;

&lt;p&gt;Secrets&lt;/p&gt;




&lt;p&gt;Students create&lt;/p&gt;

&lt;p&gt;Production branch&lt;/p&gt;

&lt;p&gt;Development branch&lt;/p&gt;

&lt;p&gt;Feature branch&lt;/p&gt;




&lt;p&gt;Workflow&lt;/p&gt;

&lt;p&gt;Developer&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;feature/login&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Pull Request&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Review&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Merge&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;main&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 8 – Docker
&lt;/h1&gt;

&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Why Docker exists.&lt;/p&gt;

&lt;p&gt;Problem before Docker.&lt;/p&gt;

&lt;p&gt;"It works on my machine."&lt;/p&gt;

&lt;p&gt;Docker solves&lt;/p&gt;

&lt;p&gt;Different operating systems.&lt;/p&gt;

&lt;p&gt;Different libraries.&lt;/p&gt;

&lt;p&gt;Different environments.&lt;/p&gt;




&lt;p&gt;Students build&lt;/p&gt;

&lt;p&gt;Dockerfile&lt;/p&gt;

&lt;p&gt;Build Image&lt;/p&gt;

&lt;p&gt;Run Container&lt;/p&gt;

&lt;p&gt;Stop Container&lt;/p&gt;

&lt;p&gt;Remove Container&lt;/p&gt;

&lt;p&gt;Volumes&lt;/p&gt;

&lt;p&gt;Networks&lt;/p&gt;




&lt;p&gt;Explain difference&lt;/p&gt;

&lt;p&gt;Image&lt;/p&gt;

&lt;p&gt;Container&lt;/p&gt;

&lt;p&gt;Registry&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 9 – AWS
&lt;/h1&gt;

&lt;p&gt;Launch EC2&lt;/p&gt;

&lt;p&gt;Ubuntu&lt;/p&gt;

&lt;p&gt;Security Groups&lt;/p&gt;

&lt;p&gt;SSH&lt;/p&gt;

&lt;p&gt;Elastic IP&lt;/p&gt;

&lt;p&gt;Docker installation&lt;/p&gt;

&lt;p&gt;Git installation&lt;/p&gt;




&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Why cloud?&lt;/p&gt;

&lt;p&gt;Why not physical servers?&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 10 – SSH
&lt;/h1&gt;

&lt;p&gt;Generate keys&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh-keygen
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Private key&lt;/p&gt;

&lt;p&gt;Public key&lt;/p&gt;

&lt;p&gt;Encryption&lt;/p&gt;

&lt;p&gt;Authentication&lt;/p&gt;




&lt;p&gt;Students login&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;ssh ubuntu@EC2-IP
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Module 11 – GitHub Secrets
&lt;/h1&gt;

&lt;p&gt;Create&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;HOST

USERNAME

SSH_KEY

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Why passwords should never be in workflows.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 12 – GitHub Actions
&lt;/h1&gt;

&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;GitHub Actions is a CI/CD platform.&lt;/p&gt;

&lt;p&gt;Workflow&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Runner&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Job&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Step&lt;/p&gt;

&lt;p&gt;Students create&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;.github/

workflows/

deploy.yml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Trigger&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;push&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="na"&gt;branches&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;

&lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;main&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Developer pushes.&lt;/p&gt;

&lt;p&gt;Workflow starts.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 13 – Build Pipeline
&lt;/h1&gt;

&lt;p&gt;Steps&lt;/p&gt;

&lt;p&gt;Checkout&lt;/p&gt;

&lt;p&gt;Install&lt;/p&gt;

&lt;p&gt;Build&lt;/p&gt;

&lt;p&gt;Test&lt;/p&gt;

&lt;p&gt;Deploy&lt;/p&gt;

&lt;p&gt;Explain each stage.&lt;/p&gt;




&lt;p&gt;Students write&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;Checkout&lt;/span&gt;

&lt;span class="s"&gt;↓&lt;/span&gt;

&lt;span class="s"&gt;Docker Build&lt;/span&gt;

&lt;span class="s"&gt;↓&lt;/span&gt;

&lt;span class="s"&gt;SSH&lt;/span&gt;

&lt;span class="s"&gt;↓&lt;/span&gt;

&lt;span class="s"&gt;Deploy&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Module 14 – Deployment Pipeline
&lt;/h1&gt;

&lt;p&gt;Workflow&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer

↓

git push

↓

GitHub

↓

GitHub Actions

↓

SSH

↓

EC2

↓

docker stop

↓

docker rm

↓

docker build

↓

docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Students understand&lt;/p&gt;

&lt;p&gt;No manual deployment.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 15 – Linux Production
&lt;/h1&gt;

&lt;p&gt;Students practice&lt;/p&gt;

&lt;p&gt;systemctl&lt;/p&gt;

&lt;p&gt;journalctl&lt;/p&gt;

&lt;p&gt;docker logs&lt;/p&gt;

&lt;p&gt;docker ps&lt;/p&gt;

&lt;p&gt;top&lt;/p&gt;

&lt;p&gt;free&lt;/p&gt;

&lt;p&gt;df&lt;/p&gt;

&lt;p&gt;netstat&lt;/p&gt;

&lt;p&gt;ss&lt;/p&gt;

&lt;p&gt;ps&lt;/p&gt;

&lt;p&gt;kill&lt;/p&gt;

&lt;p&gt;pkill&lt;/p&gt;

&lt;p&gt;tail&lt;/p&gt;

&lt;p&gt;cat&lt;/p&gt;

&lt;p&gt;less&lt;/p&gt;

&lt;p&gt;nano&lt;/p&gt;

&lt;p&gt;chmod&lt;/p&gt;




&lt;p&gt;Explain when DevOps engineers use each command.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 16 – Docker Logs
&lt;/h1&gt;

&lt;p&gt;Students break application.&lt;/p&gt;

&lt;p&gt;Read logs.&lt;/p&gt;

&lt;p&gt;Fix application.&lt;/p&gt;

&lt;p&gt;Deploy again.&lt;/p&gt;

&lt;p&gt;Exactly what companies do.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 17 – Rollback
&lt;/h1&gt;

&lt;p&gt;Bad deployment.&lt;/p&gt;

&lt;p&gt;Website broken.&lt;/p&gt;

&lt;p&gt;Restore previous version.&lt;/p&gt;

&lt;p&gt;Students understand&lt;/p&gt;

&lt;p&gt;Rollback.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 18 – Versioning
&lt;/h1&gt;

&lt;p&gt;Deploy&lt;/p&gt;

&lt;p&gt;v1&lt;/p&gt;

&lt;p&gt;v2&lt;/p&gt;

&lt;p&gt;v3&lt;/p&gt;

&lt;p&gt;Rollback&lt;/p&gt;

&lt;p&gt;v2&lt;/p&gt;

&lt;p&gt;Students finally understand Docker tags.&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 19 – Production Security
&lt;/h1&gt;

&lt;p&gt;Secrets&lt;/p&gt;

&lt;p&gt;SSH Keys&lt;/p&gt;

&lt;p&gt;Least Privilege&lt;/p&gt;

&lt;p&gt;IAM&lt;/p&gt;

&lt;p&gt;Security Groups&lt;/p&gt;

&lt;p&gt;HTTPS overview&lt;/p&gt;

&lt;p&gt;Never expose credentials&lt;/p&gt;




&lt;h1&gt;
  
  
  Module 20 – Troubleshooting Scenarios
&lt;/h1&gt;

&lt;p&gt;Students solve real incidents.&lt;/p&gt;

&lt;p&gt;Scenario 1&lt;/p&gt;

&lt;p&gt;GitHub Action failed.&lt;/p&gt;

&lt;p&gt;Find logs.&lt;/p&gt;




&lt;p&gt;Scenario 2&lt;/p&gt;

&lt;p&gt;Docker build failed.&lt;/p&gt;

&lt;p&gt;Fix Dockerfile.&lt;/p&gt;




&lt;p&gt;Scenario 3&lt;/p&gt;

&lt;p&gt;SSH permission denied.&lt;/p&gt;

&lt;p&gt;Fix key.&lt;/p&gt;




&lt;p&gt;Scenario 4&lt;/p&gt;

&lt;p&gt;Website unavailable.&lt;/p&gt;

&lt;p&gt;Check&lt;/p&gt;

&lt;p&gt;EC2&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Docker&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Container&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Logs&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Ports&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Security Groups&lt;/p&gt;




&lt;p&gt;Scenario 5&lt;/p&gt;

&lt;p&gt;Container exited.&lt;/p&gt;

&lt;p&gt;Read logs.&lt;/p&gt;

&lt;p&gt;Restart.&lt;/p&gt;




&lt;p&gt;Scenario 6&lt;/p&gt;

&lt;p&gt;Application running&lt;/p&gt;

&lt;p&gt;Browser doesn't open&lt;/p&gt;

&lt;p&gt;Check&lt;/p&gt;

&lt;p&gt;Port mapping&lt;/p&gt;

&lt;p&gt;Security Group&lt;/p&gt;

&lt;p&gt;Firewall&lt;/p&gt;




&lt;p&gt;Scenario 7&lt;/p&gt;

&lt;p&gt;Developer says&lt;/p&gt;

&lt;p&gt;"I pushed code."&lt;/p&gt;

&lt;p&gt;Production unchanged.&lt;/p&gt;

&lt;p&gt;Investigate&lt;/p&gt;

&lt;p&gt;GitHub Actions&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Deployment&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Container&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Browser cache&lt;/p&gt;




&lt;h1&gt;
  
  
  Final Enterprise Workflow
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer

↓

Git Add

↓

Git Commit

↓

Git Push

↓

GitHub Repository

↓

GitHub Actions Trigger

↓

GitHub Runner

↓

Checkout Code

↓

Build Docker Image

↓

(Optional: Run Unit Tests)

↓

SSH to EC2

↓

Pull Latest Code

↓

Stop Old Container

↓

Remove Old Container

↓

Build New Docker Image

↓

Run New Container

↓

Health Check

↓

Users Access Website
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You're absolutely right. What I gave you was the &lt;strong&gt;curriculum&lt;/strong&gt;, not the &lt;strong&gt;project&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A DevOps engineer learns best by working on &lt;strong&gt;one realistic project&lt;/strong&gt; from start to finish. The project should evolve as new technologies are introduced, just like it does in a real company.&lt;/p&gt;

&lt;h2&gt;
  
  
  Level 2 Project
&lt;/h2&gt;

&lt;h1&gt;
  
  
  Project: FreshMart Online Grocery Store
&lt;/h1&gt;

&lt;p&gt;Instead of deploying a simple HTML page, students deploy a small application that looks like a real business.&lt;/p&gt;




&lt;h2&gt;
  
  
  Company Story
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;FreshMart is an online grocery company.&lt;/p&gt;

&lt;p&gt;Developers built a new version of the website.&lt;/p&gt;

&lt;p&gt;Customers use the website every day.&lt;/p&gt;

&lt;p&gt;Your DevOps team is responsible for deploying every new release safely and automatically.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Final Architecture
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;                     Customer

                        │

                        ▼

                Internet Browser

                        │

                        ▼

                  AWS EC2 Ubuntu

                        │

                Docker Container

                        │

              Flask API Application

                        │

                products.json

                        │

                 GitHub Repository

                        ▲

                        │

              GitHub Actions CI/CD

                        ▲

                        │

                 Developer Laptop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice there is now an &lt;strong&gt;application&lt;/strong&gt;, not just static HTML.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Students Build
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;freshmart-app/

│

├── app.py

├── products.json

├── templates/

│      index.html

├── static/

│      style.css

│

├── Dockerfile

├── requirements.txt

├── .github/

│      workflows/

│             deploy.yml

└── README.md
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is exactly what many small production applications look like.&lt;/p&gt;




&lt;h1&gt;
  
  
  What Does the Application Do?
&lt;/h1&gt;

&lt;p&gt;Customers open&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;http://server-ip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;They see&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FreshMart Grocery

--------------------------

Apple

Milk

Eggs

Rice

Orange Juice

Chicken

Bread

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The page loads data from an API.&lt;/p&gt;




&lt;h1&gt;
  
  
  API Endpoints
&lt;/h1&gt;

&lt;p&gt;Students create&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /products
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Milk"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;4.99&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Apple"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;1.29&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;Second endpoint&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /health
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Returns&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
   &lt;/span&gt;&lt;span class="nl"&gt;"status"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"healthy"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Production companies use health endpoints.&lt;/p&gt;

&lt;p&gt;Load Balancers check&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/health
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;every few seconds.&lt;/p&gt;




&lt;p&gt;Third endpoint&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight http"&gt;&lt;code&gt;&lt;span class="err"&gt;GET /
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Displays HTML page.&lt;/p&gt;




&lt;h1&gt;
  
  
  Developer Workflow
&lt;/h1&gt;

&lt;p&gt;Developer changes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;products.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Adds&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="s2"&gt;"Watermelon"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="nl"&gt;"price"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mf"&gt;7.99&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Commits&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git add &lt;span class="nb"&gt;.&lt;/span&gt;

git commit

git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  DevOps Workflow
&lt;/h1&gt;

&lt;p&gt;GitHub detects&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git push
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Starts GitHub Actions&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Checks out repository&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Builds Docker image&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Runs syntax check&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;SSH into EC2&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Stops old container&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Deletes old container&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Builds new image&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Runs new container&lt;/p&gt;

&lt;p&gt;↓&lt;/p&gt;

&lt;p&gt;Deployment complete&lt;/p&gt;

&lt;p&gt;Students refresh browser.&lt;/p&gt;

&lt;p&gt;Watermelon appears.&lt;/p&gt;

&lt;p&gt;Nobody logged into the server manually.&lt;/p&gt;




&lt;h1&gt;
  
  
  Dockerfile
&lt;/h1&gt;

&lt;p&gt;Students write&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; python:3.12-slim&lt;/span&gt;

&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;

&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . .&lt;/span&gt;

&lt;span class="k"&gt;RUN &lt;/span&gt;pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-r&lt;/span&gt; requirements.txt

&lt;span class="k"&gt;EXPOSE&lt;/span&gt;&lt;span class="s"&gt; 5000&lt;/span&gt;

&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["python","app.py"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now they understand why every line exists.&lt;/p&gt;




&lt;h1&gt;
  
  
  requirements.txt
&lt;/h1&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Flask
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h1&gt;
  
  
  Application
&lt;/h1&gt;

&lt;p&gt;Students write Flask routes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/

↓

HTML

/products

↓

JSON

/health

↓

Health Check
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now they understand&lt;/p&gt;

&lt;p&gt;Frontend&lt;/p&gt;

&lt;p&gt;Backend&lt;/p&gt;

&lt;p&gt;API&lt;/p&gt;

&lt;p&gt;JSON&lt;/p&gt;

&lt;p&gt;Browser&lt;/p&gt;




&lt;h1&gt;
  
  
  CI/CD Workflow
&lt;/h1&gt;

&lt;p&gt;Students create&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;.github/workflows/deploy.yml&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Workflow&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Developer Push

↓

GitHub

↓

GitHub Actions

↓

Ubuntu Runner

↓

SSH

↓

EC2

↓

docker stop

↓

docker rm

↓

docker build

↓

docker run
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Exactly like production.&lt;/p&gt;




&lt;h1&gt;
  
  
  Real DevOps Tasks During the Lab
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Task 1
&lt;/h2&gt;

&lt;p&gt;Developer says&lt;/p&gt;

&lt;p&gt;"I changed prices."&lt;/p&gt;

&lt;p&gt;Deploy new version.&lt;/p&gt;




&lt;h2&gt;
  
  
  Task 2
&lt;/h2&gt;

&lt;p&gt;Developer broke application.&lt;/p&gt;

&lt;p&gt;GitHub Action fails.&lt;/p&gt;

&lt;p&gt;Find error.&lt;/p&gt;




&lt;h2&gt;
  
  
  Task 3
&lt;/h2&gt;

&lt;p&gt;Docker container won't start.&lt;/p&gt;

&lt;p&gt;Read&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;docker logs
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Task 4
&lt;/h2&gt;

&lt;p&gt;Application works locally.&lt;/p&gt;

&lt;p&gt;Not working on EC2.&lt;/p&gt;

&lt;p&gt;Investigate.&lt;/p&gt;

&lt;p&gt;Students check&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Security Group&lt;/li&gt;
&lt;li&gt;Port mapping&lt;/li&gt;
&lt;li&gt;Flask host&lt;/li&gt;
&lt;li&gt;Docker container&lt;/li&gt;
&lt;li&gt;EC2 firewall&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Task 5
&lt;/h2&gt;

&lt;p&gt;Developer accidentally deleted&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;products.json&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Deployment failed.&lt;/p&gt;

&lt;p&gt;Restore using Git.&lt;/p&gt;




&lt;h2&gt;
  
  
  Task 6
&lt;/h2&gt;

&lt;p&gt;Deploy Version 2&lt;/p&gt;

&lt;p&gt;Website header changes&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FreshMart Grocery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;↓&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FreshMart Grocery v2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Students understand versioning.&lt;/p&gt;




&lt;h2&gt;
  
  
  Task 7
&lt;/h2&gt;

&lt;p&gt;Rollback&lt;/p&gt;

&lt;p&gt;Deploy&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;v1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;again.&lt;/p&gt;

&lt;p&gt;Explain&lt;/p&gt;

&lt;p&gt;Production engineers rollback all the time.&lt;/p&gt;




&lt;h1&gt;
  
  
  New Features Every Week
&lt;/h1&gt;

&lt;p&gt;Instead of changing projects, students continue improving the same application.&lt;/p&gt;

&lt;p&gt;Week 1&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Display products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 2&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Search products
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 3&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Add categories
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 4&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Shopping cart
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 5&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User login
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 6&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Admin dashboard
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 7&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 8&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;Docker Compose&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 9&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="nx"&gt;Terraform&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Week 10&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="s"&gt;Kubernetes&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Why This Project Works
&lt;/h2&gt;

&lt;p&gt;Many bootcamps make students build a &lt;strong&gt;new project every week&lt;/strong&gt;, so they spend more time understanding the business than learning DevOps.&lt;/p&gt;

&lt;p&gt;A more realistic approach is to use &lt;strong&gt;one application&lt;/strong&gt; throughout the entire course. As students learn Git, Docker, AWS, CI/CD, Terraform, Kubernetes, and monitoring, they keep enhancing the same project. This mirrors what happens in real companies, where DevOps engineers support and improve an existing application over months or years rather than constantly starting from scratch.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
