<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Technical 101]]></title><description><![CDATA["Mingalarbar , I am an IT guy from Myanmar who enjoys learning and sharing about Linux, Cloud, Docker & K8s. I am planning to share my expertise with the inform]]></description><link>https://frandisharing.com</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Apr 2026 05:11:47 GMT</lastBuildDate><atom:link href="https://frandisharing.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[Difference between task role and execution role in AWS ECS]]></title><description><![CDATA[Today, I want to explain the difference between a task role and an execution role in AWS ECS. Yesterday, I set up AWS ECS for a UAT environment and defined both roles. Let me clarify what a task role ]]></description><link>https://frandisharing.com/difference-between-task-role-and-execution-role-in-aws-ecs</link><guid isPermaLink="true">https://frandisharing.com/difference-between-task-role-and-execution-role-in-aws-ecs</guid><category><![CDATA[AWS]]></category><category><![CDATA[ECS]]></category><category><![CDATA[task role]]></category><category><![CDATA[execution role]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sun, 01 Mar 2026 10:35:48 GMT</pubDate><enclosure url="https://cdn.hashnode.com/uploads/covers/640bf81b89d872328ab826fa/616a2ac9-0db9-4ecb-b3ca-d95b42cc160c.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, I want to explain the difference between a task role and an execution role in AWS ECS. Yesterday, I set up AWS ECS for a UAT environment and defined both roles. Let me clarify what a task role and an execution role are, when they are needed, and who uses them.</p>
<h3>ECS Task Execution role</h3>
<p>In my setup, my container needs to access ECR for pulling Docker images and needs to send logs to CloudWatch. My container needs to retrieve the DB password from AWS Secrets Manager. If I didn't define this execution role, my container couldn't pull images from ECR, send logs to CloudWatch, or retrieve the password from AWS Secrets Manager. This task execution role is performed before your container enters the running state.</p>
<p><strong>Who use it?</strong></p>
<p>The ECS agent uses it, not your application code.</p>
<p><strong>When is it used?</strong></p>
<p>Before container even starts running.</p>
<p><strong>What is it for?</strong></p>
<ol>
<li><p>Pull images from Amazon Elastic Container Registry (ECR)</p>
</li>
<li><p>Send container logs to Amazon CloudWatch</p>
</li>
<li><p>Retrieve secrets from AWS Secrets Manager</p>
</li>
<li><p>Retrieve parameters from AWS Systems Manager</p>
</li>
</ol>
<h3>ECS Task role</h3>
<p>My application code (business logic) needs to upload PDF files to AWS S3, store tracking info in Amazon DynamoDB, and push notifications from Amazon SNS. The ECS task role is not used by the ECS agent, this role is only used by your application code inside the container. If the task role is miss your application is run but can't access AWS API calls.</p>
<p><strong>Who use it?</strong></p>
<p>My application code inside the container.</p>
<p><strong>When is it used?</strong></p>
<p>After the container start running.</p>
<p><strong>What is it for?</strong></p>
<p>To allow my application to access AWS services.</p>
<p>Examples:</p>
<ol>
<li><p>Read/write to Amazon S3</p>
</li>
<li><p>Send messages to Amazon Simple Queue Service</p>
</li>
<li><p>Publish to Amazon Simple Notification Service</p>
</li>
<li><p>Access Amazon DynamoDB</p>
</li>
<li><p>Call other AWS APIs</p>
</li>
</ol>
<p>I hope you understand the difference between a task role and an execution role in AWS ECS.</p>
]]></content:encoded></item><item><title><![CDATA[Bridging the Gap: Implementing External Access for Stateful Workloads in Kubernetes]]></title><description><![CDATA[Today, we will learn how to set up a backend API container with PostgreSQL on Kubernetes. In this tutorial, you will learn how to write a multi-stage Docker file, install the MetalLB load balancer, set up the Rancher local path provisioner for storag...]]></description><link>https://frandisharing.com/bridging-the-gap-implementing-external-access-for-stateful-workloads-in-kubernetes</link><guid isPermaLink="true">https://frandisharing.com/bridging-the-gap-implementing-external-access-for-stateful-workloads-in-kubernetes</guid><category><![CDATA[Kubernetes]]></category><category><![CDATA[metallb]]></category><category><![CDATA[nginx ingress]]></category><category><![CDATA[multi stage docker file]]></category><category><![CDATA[statefulsets]]></category><category><![CDATA[PostgreSQL]]></category><category><![CDATA[PVC ]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sun, 25 Jan 2026 11:52:53 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1769341819872/f649283e-3d39-41a0-8132-8f86a71b6e92.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today, we will learn how to set up a backend API container with PostgreSQL on Kubernetes. In this tutorial, you will learn how to write a multi-stage Docker file, install the MetalLB load balancer, set up the Rancher local path provisioner for storage, and install the NGINX Ingress controller.</p>
<h3 id="heading-lab-purpose">Lab Purpose</h3>
<p>I want to share my past Kubernetes experience in this lab. <strong>Disclaimer:</strong> In this lab, I created a simple backend CRUD API using Gemini AI. To be honest, I'm not a developer, so my backend code is not perfect.</p>
<p>The primary objective of this lab is to architect and deploy a production-ready <strong>SMS API</strong> on a bare-metal Kubernetes environment. This exercise demonstrates how to bridge the gap between internal cluster resources and external network accessibility without relying on managed cloud services.</p>
<p>If you don’t know how to setup Kubernetes Cluster. You can use below link for install and setup.</p>
<p>Here is the <a target="_blank" href="https://devopscube.com/setup-kubernetes-cluster-kubeadm/">Kubernetes Cluster Installation</a></p>
<p>Here is my <a target="_blank" href="https://github.com/frandi-devops-learn/demo-sms-api">Code Repo</a></p>
<div class="hn-table">
<table>
<thead>
<tr>
<td><strong>Tools</strong></td><td><strong>Purpose of Use</strong></td><td><strong>Link</strong></td></tr>
</thead>
<tbody>
<tr>
<td>Docker</td><td>To package applications and their dependencies into a standardized unit called a container</td><td><a target="_blank" href="https://www.docker.com/">https://www.docker.com/</a></td></tr>
<tr>
<td>Docker Hub</td><td>To store the container images</td><td><a target="_blank" href="https://hub.docker.com/">https://hub.docker.com/</a></td></tr>
<tr>
<td>Kubernets</td><td>To automate the deployment, scaling, and management of containerized applications, enabling, reliable, and efficient operations across clusters of machines</td><td><a target="_blank" href="https://kubernetes.io/">https://kubernetes.io/</a></td></tr>
<tr>
<td>Helm</td><td>Helm is the package manager for Kubernetes, designed to simplify deployment, management, and scaling of complex applications by bundling YAML configuration files into reusable, versioned packages called Charts</td><td><a target="_blank" href="https://helm.sh/">https://helm.sh/</a></td></tr>
<tr>
<td>MetalLB</td><td>It addresses the lack of native cloud-provider load balancers in <strong>on-premise</strong> environments by assigning IP addresses from a configured pool</td><td><a target="_blank" href="https://metallb.io/">https://metallb.io/</a></td></tr>
<tr>
<td>Rancher Loacal path provisioner</td><td>To dynamically provision Persistent Volumes (PVs) using the local storage on each Kubernetes node</td><td><a target="_blank" href="https://github.com/rancher/local-path-provisioner">https://github.com/rancher/local-path-provisioner</a></td></tr>
<tr>
<td>Nginx Ingress Controller</td><td>Specialized load balancer and reverse proxy that manages external access to services within a Kubernetes cluster</td><td><a target="_blank" href="https://github.com/kubernetes/ingress-nginx">https://github.com/kubernetes/ingress-nginx</a></td></tr>
</tbody>
</table>
</div><h3 id="heading-1-multistage-docker-file">1. Multistage docker file</h3>
<p><strong>Why we need to do multistage docker file?</strong></p>
<p>Multistage Docker builds are a game-changer for anyone tired of bloated, heavy container images. In a nutshell, they allow you to use multiple <strong>FROM</strong> statements in a single Dockerfile, effectively separating the <strong>build environment</strong> from the <strong>runtime environment</strong>.</p>
<p>Here is why they are considered a best practice.</p>
<ol>
<li><p><strong>Significant Size Reduction</strong></p>
<p> In a standard Dockerfile, everything you use to compile your app (compilers, build tools, header files) remains in the final image. With multistage builds, you "leave the trash behind." You compile your app in the first stage and then copy only the final executable into a tiny, production-ready image.</p>
</li>
<li><p><strong>Enhanced Security</strong></p>
<p> A smaller image has a smaller <strong>attack surface</strong>. By removing package managers (like apt or npm), source code, and shell utilities from your final production image, you give hackers fewer tools to work with if they manage to gain access to your container.</p>
</li>
<li><p><strong>Simplified CI/CD Pipelines</strong></p>
<p> Before multistage builds, developers often had to maintain two separate Dockerfiles (e.g., Dockerfile.build and Dockerfile.production) and use shell scripts to move artifacts between them. Multistage builds allow you to keep all that logic in <strong>one file</strong>, making your CI/CD pipeline much cleaner.</p>
</li>
</ol>
<p>Here is my Dockerfile using multistage.</p>
<pre><code class="lang-plaintext"># Builder stage
FROM node:22-alpine AS builder
WORKDIR /app

RUN apk add --no-cache openssl libc6-compat curl
COPY package*.json ./
COPY prisma ./prisma/

RUN npm install
RUN npx prisma generate

# Runner stage
FROM node:22-alpine AS runner
WORKDIR /app
RUN apk add --no-cache openssl libc6-compat curl

COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/prisma ./prisma

# Copy application source
COPY package*.json ./
COPY server.js ./
COPY entrypoint.sh ./

RUN chmod +x entrypoint.sh

EXPOSE 3000

ENTRYPOINT ["/bin/sh", "./entrypoint.sh"]
</code></pre>
<p>Clone github repo to my local computer.</p>
<pre><code class="lang-plaintext">git clone https://github.com/frandi-devops-learn/demo-sms-api.git

cd demo-sms-api/

git branch -a

git checkout -b devops

git pull origin devops
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769254615974/334f4088-6969-486d-aedb-ab49fb8dca6a.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-2-docker-image-push-to-dockerhub">2. Docker image push to DockerHub</h3>
<p>After cloning the repo, we need to build this Docker image and push it to Docker Hub. In my lab, I use the public Docker Hub to store my container image. In this lab, I build Docker images for two types of architecture, so you can run either arm64 or amd64.</p>
<pre><code class="lang-plaintext">docker buildx build --platform Linux/arm64,Linux/amd64 -t zinlinhtetdevops/demo-sms-api:latest . --push
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769330644875/f068dfe0-7ba5-4d5d-96dd-b54417d27010.png" alt class="image--center mx-auto" /></p>
<p>You can pull my ready to use container image.</p>
<pre><code class="lang-plaintext">docker pull zinlinhtetdevops/demo-sms-api:latest

docker images
</code></pre>
<h3 id="heading-3-installation-of-helm">3 . Installation of Helm</h3>
<pre><code class="lang-plaintext">curl -fsSL -o get_helm.sh https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-4

chmod 700 get_helm.sh

sudo ./get_helm.sh
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769252906082/995886cd-ae9a-48ee-9333-ba9e4c9815b9.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-4-installation-of-metallb">4. Installation of MetalLB</h3>
<p>I use helm for install MetalLB on my kubernetes node. I create namespace for MetalLB.</p>
<pre><code class="lang-plaintext">helm repo list

helm repo add metallb https://metallb.github.io/metallb

helm install metallb metallb/metallb --create-namespace --namespace metallb-system
</code></pre>
<p>Now you can see MetalLB pod is successfully run.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769254039527/651f4137-0f90-42a5-aa15-cf06a5a167ef.png" alt class="image--center mx-auto" /></p>
<p>Here is a breakdown of what this configuration does and a small missing piece you might need.</p>
<h3 id="heading-41-ipaddresspool">4.1. IPAddressPool</h3>
<p>This is the "bucket" of IP addresses that MetalLB is allowed to hand out.</p>
<ol>
<li><p><strong>Range:</strong> 192.168.1.200 - 192.168.1.205.</p>
</li>
<li><p><strong>Purpose:</strong> When you create a Service with <strong>type: LoadBalancer</strong>, MetalLB will grab one of these 6 IPs and assign it to that service.</p>
</li>
<li><p><strong>Crucial Requirement:</strong> These IPs <strong>must not</strong> be in use by your router's DHCP server. If your router hands out <strong>.200</strong> to your phone, and MetalLB hands it to your API, you'll have an IP conflict.</p>
</li>
</ol>
<h3 id="heading-42-l2advertisement">4.2. L2Advertisement</h3>
<p>This tells MetalLB how to announce those IPs to your local network.</p>
<ul>
<li><p><strong>Layer 2 (L2):</strong> This is the simplest mode. It uses standard ARP (Address Resolution Protocol).</p>
</li>
<li><p><strong>How it works:</strong> One of your nodes will basically shout to your router: "Hey, I am now the owner of 192.168.1.200!" The router then sends all traffic for that IP to that node.</p>
</li>
</ul>
<pre><code class="lang-plaintext">kubectl create -f metallb.yml
</code></pre>
<pre><code class="lang-plaintext">apiVersion: metallb.io/v1beta1
kind: IPAddressPool
metadata:
  name: first-pool
  namespace: metallb-system
spec:
  addresses:
  - 192.168.1.200-192.168.1.205
---
apiVersion: metallb.io/v1beta1
kind: L2Advertisement
metadata:
  name: advertisement
  namespace: metallb-system
spec:
  ipAddressPools:
  - first-pool
</code></pre>
<h3 id="heading-5-installation-of-rancher-local-path-provisioner">5. Installation of Rancher Local path provisioner</h3>
<p>In a local Kubernetes environment (like K3s, Minikube, or Kind), managing storage can be frustrating. By default, Kubernetes doesn't automatically "give" you storage just because you ask for a Persistent Volume Claim (PVC). You usually have to manually create a Persistent Volume (PV) first.</p>
<p>The <strong>Rancher Local Path Provisioner</strong> solves this by providing <strong>Dynamic Provisioning</strong> for local storage.</p>
<p>Without this provisioner, if you want to deploy a database like MySQL or PostgreSQL, you have to:</p>
<ol>
<li><p>Manually create a directory on your laptop/server.</p>
</li>
<li><p>Manually write a YAML for a Persistent Volume pointing to that path.</p>
</li>
<li><p>Then create your Persistent Volume Claim.</p>
</li>
</ol>
<p>With the <strong>Local Path Provisioner</strong>, you skip steps 1 and 2. You just ask for a PVC, and the provisioner automatically creates a unique folder on your host machine and handles the PV creation for you.</p>
<p>Install the rancher local path provisioner using kubectl command.</p>
<pre><code class="lang-plaintext">kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml

kubectl get namespace

kubectl get all -n local-path-storage
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769257519906/5d6df77c-7cfb-4fb3-aedc-bef6d2eb4044.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-6-create-namespace">6. Create Namespace</h3>
<p>In Kubernetes, a <strong>Namespace</strong> is essentially a "virtual cluster" within your physical cluster. If you only have one small app, you might not notice the need for them, but as soon as your project grows, namespaces become your best friend for organization and security. And then I chage the default namespace to demo-sms namespace.</p>
<pre><code class="lang-plaintext">kubectl create namespace dmeo-sms

kubectl get namespace

kubectl config set-context --current --namespace demo-sms

kubectl config get-contexts
</code></pre>
<h3 id="heading-7-deploy-postgresql-database-on-kubernetes">7. Deploy PostgreSQL database on Kubernetes</h3>
<p>It’s time to deploy the PostgreSQL database. In this lab, you need to deploy a StatefulSet for the database. Even if the database pod restarts, your data needs to exist and be persistent.</p>
<p>In Kubernetes, a <strong>Deployment</strong> is great for "stateless" things like your web app or an API where it doesn't matter which pod is which. But a database like <strong>PostgreSQL</strong> is "stateful"—it cares deeply about its identity and its data. Using a <strong>StatefulSet</strong> provides the specific "guardrails" that a database needs to run safely without corrupting data.</p>
<p>The first step I need to create a Persistent Volume Claim to attach a vloume in PostgreSQL database container. So let’s create a pvc. Here is the pvc.yml file.</p>
<pre><code class="lang-plaintext">apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: db-pvc
  namespace: demo-sms
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: 10Gi
  storageClassName: local-path
</code></pre>
<pre><code class="lang-plaintext">kubectl get pvc
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769259129399/ae137161-9f5c-4fd4-a158-ced9c81be3f4.png" alt class="image--center mx-auto" /></p>
<p>Before creating the database, we need to create a secret for the database password. I don't want to use a hardcoded value in the PostgreSQL StatefulSet. So how to encode you database password. I will show you.</p>
<pre><code class="lang-plaintext">echo -n "yourpassword" | base64

kubectl create -f sec.yml

kubectl get secrets
</code></pre>
<pre><code class="lang-plaintext">apiVersion: v1
data:
  postgres-password: ZGJhZG1pbjEyMw== ( Put your base64 encoded database password )
kind: Secret
metadata:
  name: postgres-secret
  namespace: demo-sms
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769259711555/057e700c-ee20-4aef-9b7f-4080be55220f.png" alt class="image--center mx-auto" /></p>
<p>So let’s deploy PostgreSQL database StatfulSet container.</p>
<pre><code class="lang-plaintext">apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: demo-sms-db
  namespace: demo-sms
spec:
  serviceName: "demo-sms-db"
  replicas: 1
  selector:
    matchLabels:
      app: demo-sms-db
  template:
    metadata:
      labels:
        app: demo-sms-db
    spec:
      containers:
        - name: demo-sms-db
          image: postgres:16-alpine
          env:
           - name: POSTGRES_DB
             value: "uatdb"
           - name: POSTGRES_USER
             value: "dbadmin"
           - name: POSTGRES_PASSWORD
             valueFrom: 
               secretKeyRef:
                 name: postgres-secret
                 key: postgres-password
          ports:
          - containerPort: 5432
          resources:
            requests:
              cpu: "250m"
              memory: "512Mi"
          volumeMounts:
            - mountPath: /var/lib/postgresql/data
              name: db-storage
              subPath: postgres-data
      volumes:
        - name: db-storage
          persistentVolumeClaim:
            claimName: db-pvc
</code></pre>
<pre><code class="lang-plaintext">kubectl create -f stateful-set.yml

kubectl get pods

kubectl get pvc

kubectl get statefulset
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769326744286/cc665da6-c821-4a01-98e5-82c76569c247.png" alt class="image--center mx-auto" /></p>
<p>Once the StatefulSet is running properly, I expose my PostgreSQL service using the ClusterIP type since we only need to access this database within the cluster. However, I also want to connect to my database from outside the cluster, so I expose it again using the NodePort type. I will show you how to expose a service with both ClusterIP and NodePort types.</p>
<p><strong>This is the ClusterIP type.</strong></p>
<pre><code class="lang-plaintext">apiVersion: v1
kind: Service
metadata:
  labels:
    app: demo-sms-db
  name: demo-sms-db-svc
  namespace: demo-sms
spec:
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
  selector:
    app: demo-sms-db
  type: ClusterIP
status:
  loadBalancer: {}
</code></pre>
<pre><code class="lang-plaintext">kubectl get svc

kubectl create -f cluster-svc.yml

kubectl get svc
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769327304156/6b8461b6-1447-49b8-bd57-73c23b552ae0.png" alt class="image--center mx-auto" /></p>
<p><strong>This is the NodePort type.</strong> I use the node port number 32110.</p>
<pre><code class="lang-plaintext">apiVersion: v1
kind: Service
metadata:
  labels:
    app: demo-sms-db
  name: demo-sms-db-extenal
  namespace: demo-sms
spec:
  ports:
  - port: 5432
    protocol: TCP
    targetPort: 5432
    nodePort: 32110
  selector:
    app: demo-sms-db
  type: NodePort
status:
  loadBalancer: {}
</code></pre>
<pre><code class="lang-plaintext">kubectl create -f node-svc.yml

kubectl get svc
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769327882932/80deceae-b440-424c-a564-2aeaf503473e.png" alt class="image--center mx-auto" /></p>
<p>I use pgAdmin4 to connect my Database. 192.168.1.108 is my Kubernetes IP. You need to use the NodePort number, not the actual PostgreSQL port. Then you can connect your database from pgAdmin.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769328137859/93d89737-b0c8-41a8-9a7f-1ce78e904fa7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769328266246/84d0654f-526b-417d-88e2-491599f4183b.png" alt class="image--center mx-auto" /></p>
<p>You can see there are no tables because the Prisma database migration has not been applied. But after the backend API container is deployed, you will see the tables.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769328296543/d91b4e1d-1c42-4434-919b-f437004f3e31.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-8-deploy-backend-api-on-kubernetes">8. Deploy Backend API on Kubernetes</h3>
<p>After the database is successfully deployed, we will deploy the backend API on Kubernetes. In this deployment, I set the replica count to 2 and specify resource requests and limits. I also use an init container to make sure the database is ready before the web app tries to connect.</p>
<p>Explanation of the deployment file</p>
<ol>
<li><p><strong>namespace: demo-sms</strong> : isolating this app into its own virtual cluster.</p>
</li>
<li><p><strong>strategy: RollingUpdate</strong> : This ensures <strong>zero downtime</strong>.</p>
<ul>
<li><p><strong>maxSurge</strong> <strong>:</strong> <strong>1</strong> : Kubernetes will start 1 new Pod before killing an old one.</p>
</li>
<li><p><strong>maxUnavailable: 0</strong> : Kubernetes will never have fewer than 2 Pods running during an update.</p>
</li>
</ul>
</li>
<li><p><strong>Requests</strong> : What the Pod is guaranteed to get (0.25 CPU and 128MB RAM).</p>
</li>
<li><p><strong>Limits</strong> : The maximum it can consume. If it tries to use more than 256MB RAM, Kubernetes will kill it (OOMKilled) to protect the rest of the cluster.</p>
</li>
</ol>
<p>This is the deploy.yml file.</p>
<pre><code class="lang-plaintext">apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: demo-sms-api
  name: demo-sms-api
  namespace: demo-sms
spec:
  replicas: 2
  selector:
    matchLabels:
      app: demo-sms-api
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxSurge: 1
      maxUnavailable: 0
  template:
    metadata:
      labels:
        app: demo-sms-api
    spec:
      initContainers:
        - name: wait-for-db-up
          image: busybox:1.28
          command: ['sh', '-c', "until nc -zv demo-sms-db-svc 5432; do echo 'Waiting for database...'; sleep 2; done"]
      containers:
      - image: zinlinhtetdevops/demo-sms-api:latest
        name: demo-sms-api
        ports:
        - containerPort: 3000
        env:
          - name: DB_HOST
            value: "demo-sms-db-svc"
          - name: DB_USER
            value: "dbadmin"
          - name: DB_NAME
            value: "uatdb"
          - name: DB_PASSWORD
            valueFrom:
              secretKeyRef:
                name: postgres-secret
                key: postgres-password
        resources:
          requests:
            memory: "128Mi"
            cpu: "250m"
          limits:
            memory: "256Mi"
            cpu: "500m"
        readinessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 5
          periodSeconds: 10
        livenessProbe:
          httpGet:
            path: /health
            port: 3000
          initialDelaySeconds: 15
          periodSeconds: 20
</code></pre>
<pre><code class="lang-plaintext">kubectl get pods

kubectl create -f deploy.yml

kubectl get deployments

kubectl get pods

kubectl logs -f pods/demo-sms-api-7bb5bc6c97-dtdh9 -c wait-for-db-up

kubectl logs -f pods/demo-sms-api-7bb5bc6c97-dtdh9
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769330820596/ef0392f3-4a3a-4353-abce-578b1a77094d.png" alt class="image--center mx-auto" /></p>
<p>Now that we have successfully deployed the backend API, it's time to expose the backend service using the ClusterIP type. However, I want to use a domain name, like <strong>api.demo-sms.local</strong>, so I will configure the Nginx Ingress Controller.</p>
<p><strong>Why do we need to use the Nginx Ingress Controller?</strong></p>
<p>With MetalLB alone, each service you want to expose (API, Frontend, Admin Dashboard) needs its own unique IP from your <strong>192.168.1.200-205</strong> range. You will run out of IPs very quickly. With Ingress, you use <strong>one</strong> LoadBalancer IP (e.g., 192.168.1.200) for the NGINX Controller, and it routes traffic to many different services based on the URL.</p>
<p><strong>How it works with MetalLB</strong></p>
<p>In my local setup, the relationship looks like this:</p>
<ol>
<li><p><strong>MetalLB</strong> provides a stable IP (e.g., 192.168.1.200) to the <strong>NGINX Ingress Service</strong>.</p>
</li>
<li><p>My <strong>Domain Name</strong> (or <strong>/etc/hosts</strong> file) points to that IP.</p>
</li>
<li><p><strong>NGINX Ingress</strong> looks at the incoming request and sends it to my <strong>demo-sms-api</strong> Pod.</p>
</li>
</ol>
<p>So, install and set up the Nginx Ingress Controller on Kubernetes. First we need to expose our backed api service. API service should now be a <strong>ClusterIP</strong> (internal only), because the Ingress will handle the external traffic.</p>
<p>Here is the svc-cluster.yml file.</p>
<pre><code class="lang-plaintext">apiVersion: v1
kind: Service
metadata:
  labels:
    app: demo-sms-api
  name: demo-sms-api-cluster
  namespace: demo-sms
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 3000
  selector:
    app: demo-sms-api
  type: ClusterIP
</code></pre>
<pre><code class="lang-plaintext">kubectl create -f svc-cluster.yml

kubectl get svc
</code></pre>
<p>Let’s start to install Nginx Ingress Controller.</p>
<pre><code class="lang-plaintext">kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.8.2/deploy/static/provider/cloud/deploy.yaml
</code></pre>
<pre><code class="lang-plaintext">kubectl get namespace

kubectl get all -n ingress-nginx

kubectl get svc -n ingress-nginx
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769336976089/d37bd0da-3c9f-47c2-a6ce-f79efdab0a2f.png" alt class="image--center mx-auto" /></p>
<p>Now you can see that MetalLB has assigned an IP (<strong>192.168.1.200</strong>) to the Nginx Ingress Controller load balancer.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769337228675/e1033203-ba6f-4fed-aecc-724fd46aa992.png" alt class="image--center mx-auto" /></p>
<p>Now create the Ingress resource. This is the routing rule that tells NGINX to send traffic to API. Here is the ingress.yml file.</p>
<pre><code class="lang-plaintext">apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: demo-sms-ingress
  namespace: demo-sms
  annotations:
    nginx.ingress.kubernetes.io/rewrite-target: /
spec:
  ingressClassName: nginx
  rules:
  - host: api.demo-sms.local
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: demo-sms-api-cluster
            port:
              number: 80
</code></pre>
<pre><code class="lang-plaintext">kubectl create -f ingress.yml

kubectl get ingress -n demo-sms
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769337696099/ff393edf-e0a4-4c99-afa9-37364f72a9c7.png" alt class="image--center mx-auto" /></p>
<p>It's time to access our backend API through the Nginx Ingress Controller. However, you need to map the IP address to the domain name in the /etc/hosts file. Without this, you won't be able to access it using the domain name in local.</p>
<pre><code class="lang-plaintext">sudo vi /etc/hosts

192.168.1.200 api.demo-sms.local
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769338219894/440e2929-a314-4cd8-a18e-f558e193b9d8.png" alt class="image--center mx-auto" /></p>
<h3 id="heading-9-testing-with-postman">9. Testing with Postman</h3>
<p>Now open your browser and enter the domain name. You should see the backend API working properly.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769338332409/5b7f867e-859f-4f85-9032-a79dfb23e383.png" alt class="image--center mx-auto" /></p>
<p>I use Postman to test the basic CRUD operations on my backend API.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769339499299/ee8bcf82-3ea2-421a-9710-ea25cb033ce9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769339434687/b1b36092-3de4-400e-a834-6e820ea4ba53.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769339465104/dc4cbf85-f6e8-4ab7-b6db-9e22684340ec.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769339871294/18654830-8326-4309-9b62-5b7954d81347.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1769339903377/c0a1c64b-f34f-4b16-8a06-9f5851b3a083.png" alt class="image--center mx-auto" /></p>
<p>By completing this lab, you will have established a robust, scalable, and externally accessible API infrastructure that adheres to Kubernetes best practices for stateful applications and on-premise networking.</p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in next articles. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[How to configure GitHub Actions OIDC with AWS ( Simple way )]]></title><description><![CDATA[Today I would like to share how to configure GitHub Actions OIDC with AWS. In this lab, you will learn why we use OIDC for AWS. Traditionally, we use an AWS Access Key ID and Secret Access Key as the authentication method to communicate with AWS serv...]]></description><link>https://frandisharing.com/how-to-configure-github-actions-oidc-with-aws-simple-way</link><guid isPermaLink="true">https://frandisharing.com/how-to-configure-github-actions-oidc-with-aws-simple-way</guid><category><![CDATA[AWS]]></category><category><![CDATA[OIDC]]></category><category><![CDATA[GitHub Actions]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Tue, 13 Jan 2026 16:38:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768322041823/0252ff65-fc0c-44b3-a15c-2828976c496a.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today I would like to share how to configure GitHub Actions OIDC with AWS. In this lab, you will learn why we use OIDC for AWS. Traditionally, we use an AWS Access Key ID and Secret Access Key as the authentication method to communicate with AWS services.</p>
<p>Imagine you put your AWS key in a GitHub repo, and your GitHub repo gets compromised. Attackers could find and steal your key. Attackers can use your key to create many AWS services, which will increase your cloud bill significantly. If you're using an AWS key in GitHub Actions, you need to regularly rotate the key every month. But, storing or using AWS access and secret keys (long-lived tokens) directly in CI/CD pipelines is considered insecure and not a recommended approach.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768322068486/ba877110-98e0-418f-afbf-871c3e504055.jpeg" alt class="image--center mx-auto" /></p>
<p>If you’re using OIDC instead of an AWS key, you don't need to rotate your OIDC. So what is OIDC? OIDC mean ( OpenID Connect ). OpenID Connect (OIDC) allows your GitHub Actions workflows to access resources in AWS without needing to store AWS credentials as long-lived GitHub secrets. Instead of using password, you just need to setup a Trust Relationship. This means that a GitHub Actions workflow can request a short‑lived OIDC token from GitHub, present it to AWS IAM, and get a temporary role. There is no need to store access keys in secrets.</p>
<p>The main difference is that AWS Access Keys are like a physical key to your house that never expires, while OIDC is like a high-tech "digital badge" that is only valid for a single entry and expires immediately after you leave. In modern CI/CD, OIDC is the industry standard because it eliminates the need to manage, store, or rotate secrets manually.</p>
<p>So let's get started with creating OIDC for our GitHub Actions CI/CD pipeline.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768300761402/52d481de-9f66-49dc-a85f-6dcf7804aa42.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">Provider <span class="hljs-built_in">type</span> : OpenID Connect

Provider URL : https://token.actions.githubusercontent.com

Audience : sts.amazonaws.com
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768306053713/2b05846c-983e-47d3-9c9b-f520ee6ad663.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768300940425/62b78ebe-5596-441d-9a5a-66446b5611ae.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768300965340/eecf887b-33a2-4eca-ac30-2f59add6f996.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302140264/8cff603e-2851-4e3e-a2e6-5bc058a5f8df.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302157124/1786815c-b3fa-44bf-b4bd-9bda87d189a8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302178686/af647388-9bbd-49e1-b28f-1e4e2692be1f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302297997/de289321-351a-4d62-9aa0-869445bb85f7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302343727/40bbf140-c2dd-4ef1-b058-ccc3ff4c15fc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302516372/2401f07e-2c9a-45d8-9933-063e467f39ab.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302638994/ca87989a-1443-4622-8cca-9614c687739e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302890936/a1299c82-7fe9-4890-a654-d826303cf558.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768302751457/ea6fd362-35b6-45af-9b17-bcfb5dc7100e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768305351056/0ac531b0-edef-42ee-a8a1-11d39570082e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768306330887/1ea074fb-3d03-433c-b6f1-c2df0616c5d8.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">name: List VPC

on:
  push:
    branches:
      - main

permissions:
  id-token: write
  contents: <span class="hljs-built_in">read</span>

<span class="hljs-built_in">jobs</span>:
  list_vpc:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repository
        uses: actions/checkout@v4

      - name: AWS Credentials
        uses: aws-actions/configure-aws-credentials@v4
        with:
          role-to-assume: <span class="hljs-variable">${{ secrets.AWS_OIDC_ROLE }</span>}
          aws-region: ap-southeast-1

      - name: List VPC
        run: |
          aws ec2 describe-vpcs \
          --query <span class="hljs-string">'Vpcs[*].{VpcID:VpcId, Name:Tags[?Key==`Name`].Value | [0]}'</span> \
          --output table
</code></pre>
]]></content:encoded></item><item><title><![CDATA[Day 50: Expanding EC2 Instance Storage for Development Needs]]></title><description><![CDATA[Welcome to Day 50. Today is the final day of the 100 Days of Cloud (AWS) section. We will learn how to expand EC2 instance storage for development needs. In this lab, the xfusion-ec2 instance is already created and running. You just need to increase ...]]></description><link>https://frandisharing.com/day-50-expanding-ec2-instance-storage-for-development-needs</link><guid isPermaLink="true">https://frandisharing.com/day-50-expanding-ec2-instance-storage-for-development-needs</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[ec2]]></category><category><![CDATA[xfs]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Mon, 12 Jan 2026 06:24:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768197962869/4dcdbac8-4db8-493b-9a36-ed106b1d4eb4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 50. Today is the final day of the 100 Days of Cloud (AWS) section. We will learn how to expand EC2 instance storage for development needs. In this lab, the <strong>xfusion-ec2</strong> instance is already created and running. You just need to increase this instance’s volume size. After extending the volume size of the EC2 instance, you need to expand the size from 8 GiB to 12 GiB using the <strong>growpart</strong> and <strong>xfs_growfs</strong> commands.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196692767/80a46746-b089-421b-949e-8357dfad4519.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196722330/e3ce198a-a45f-4524-84cc-795405febcf3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196794900/a8f6bb2f-b55f-42ce-a667-9eef0098efd9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196777668/d34dbfed-9d74-4011-9ff2-d485d858c160.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196853919/15a35026-c1d9-4389-b98b-635a0c6da389.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768197805979/497de21d-67d0-4d7f-8b95-70a4d6196119.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196912292/92222b43-b512-4cab-b205-24345060f7b8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196933756/0ab6e0ae-2e7e-418c-a4f9-0f7dc6f11ffa.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768196950493/f5806424-6f73-4410-af30-53cb47b4d3f3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768197882050/8197f2e4-0153-4108-a791-f9426fa9b5e2.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768198172607/06954cee-5665-422d-829b-241dc8fb9b7c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768198272070/ca6238f6-3ad1-4ba5-abe6-a5b352ceb4b8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768198292598/3e6799cc-c192-4fc6-904b-21c8cc35096a.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">sudo lsblk

sudo df -hT

sudo growpart /dev/xvda 1

sudo xfs_growfs -d /
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768198324745/1a746bef-d921-49c7-ba01-4e3e9b7bb1d8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768198339166/901b73d5-70df-49fe-8b69-280fcda45f55.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in next articles. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 49: Centralized Audit Logging with VPC Peering]]></title><description><![CDATA[Welcome to Day 49. Today we will learn how to centralized audit logging with VPC peering.
























































Congratulations you did it. It looks good. This lab was successfully completed without any errors. See y...]]></description><link>https://frandisharing.com/day-49-centralized-audit-logging-with-vpc-peering</link><guid isPermaLink="true">https://frandisharing.com/day-49-centralized-audit-logging-with-vpc-peering</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[vpc peering]]></category><category><![CDATA[S3]]></category><category><![CDATA[IAM]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sun, 11 Jan 2026 12:59:34 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768136334742/8d4069a4-6dbf-4e60-a9f9-a83d1835012b.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 49. Today we will learn how to centralized audit logging with VPC peering.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768130980518/8188cffb-88d2-4bd4-a262-4ae797768e49.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131020778/b75d41bb-d065-4bb0-8ede-1ad400187a04.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131087918/59363bae-9236-4d56-b6de-ebfb9419c291.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131112427/5addebdf-ee0c-4aa8-8efa-1ef998f6e2df.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131125566/3ab4ab58-938d-471a-a2f6-9a81c77026ba.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131146312/85c83f61-ef72-4f73-ab32-7cb5235f3bce.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131171497/a7c2de4b-30a9-411b-9d59-bff6ac5be334.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131186686/2b56e014-4b28-49ed-91f2-2791a014780f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131207857/4adbe31f-4741-455c-9ce1-deba31a83fb9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131232843/9f52837f-1ec1-4f78-ac4a-a249abaee46f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131262396/46dbfbb9-a92e-4c2a-975c-3a4f598861d3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131286867/2a65b4f5-8749-4614-be3d-e88f7af9b938.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131307747/10ed859b-c2ab-4008-86b0-d7c02af56809.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131389736/f0c7ae09-a724-42da-bf30-4ad84bb64d0f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131422097/df79cd20-b566-4b7d-9f2b-1682ec1b6915.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131488653/d19b99a9-b3c4-4b39-b090-35f885a7f0c9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131498595/e865bb99-6a3f-4a92-bba3-4aa2ae190c25.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131514090/4e39a804-7ab7-4e2f-bb3f-56c6127e4735.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131532920/5de2944f-aac3-4214-a916-c08eb4a64c8f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131556010/168971fc-5de1-445c-8ab1-f9085c6d3ad8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131588299/880d41a7-dc80-47ae-abf0-59e73503bfc4.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131616553/1eb499e1-5b10-4b70-9e8c-1628bc4e584b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131649702/3b38a4ac-c7d4-4576-9e1c-26de54385e8e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131699957/57ca83dd-eba5-4dc8-ade7-0e1c8ad59d72.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131735493/7df38043-1ae1-4fc9-8b5b-f1704521f361.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131766788/4e628fe5-c874-4a06-880a-1f5ccc8800de.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131791618/8597e7fa-9b4d-4190-a83c-bef939c0a6d7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131853440/09d60bdd-7170-4817-a125-52769b5986a5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131868949/27bff98b-1f69-422b-a619-43cb520eeb24.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131893758/bb166409-0764-417b-b251-02708810b74f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131911312/d2e07063-9c6b-46f7-808e-7391b5a04817.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131930769/8c10d850-1797-42fb-99b7-ed4ddfe5effc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131948612/f3258b74-8a80-4d74-8632-249892962579.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131972414/6a4a976b-15ea-4b0d-8e17-de3814a6aab7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768131993801/cac60f40-4e0c-4e9d-b2d2-7370c014f61b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132019883/b99844b6-e133-42d2-a0db-98aa0f3a72e5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132034613/7ec70694-1959-45b8-99f4-5186795f4bd7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132067207/39b15e31-e4ec-4671-8f18-9fc8354a6495.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132083231/2c3c609d-fc68-4f6e-a97c-0e29c9644abd.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132098692/788cbc69-5259-4b8c-9805-d20b644d9fed.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132115325/ea17840c-78ab-4944-b1de-715188163350.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132760802/8ec856c2-43e1-4cee-8e0d-f84456c0b080.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132795263/7cd35790-858f-4e10-b65e-8e6e4d09fdc1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768132917925/d4eeb504-5119-42cd-8de8-58b89f7fe7ca.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133010637/5109463d-ffc5-4cd7-b09c-e0bae967792d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133060385/a0cc57c5-66cc-4001-9628-76a2b0ed04e2.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133221619/014e0822-28a6-43a5-a9a4-d2fdcfddb017.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133209001/7bda2a7f-0533-4f00-850d-a85da12e4480.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133254672/f6faf23d-b529-4eec-9bd2-8386e2359fb7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133353681/3761670c-e9e5-47c3-ad07-3d89cf39b5a9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133376709/e2f0333c-2d01-4d67-9d89-d77c5348db9c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768133476216/98a003d5-62e0-4e8b-92d8-922ba4a5258c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768134153807/b290348c-6aa9-4f68-976b-8cb12a75ff98.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768134469023/888103de-d87d-4152-91b0-396306ff6aeb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768135918020/ff141f83-bca5-4d4d-b14f-70241447edca.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768135982737/70c34885-1b60-4985-8963-c365e1346ccb.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 50. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 48: Automating Infrastructure Deployment with AWS CloudFormation]]></title><description><![CDATA[Welcome to Day 48. Today we will learn how to automating Infrastructure depoloyment with AWS CloudFormation.
What is AWS CloudFormation?
AWS CloudFormation is an Infrastructure as Code (IaC) service that allows you to model, provision, and manage you...]]></description><link>https://frandisharing.com/day-48-automating-infrastructure-deployment-with-aws-cloudformation</link><guid isPermaLink="true">https://frandisharing.com/day-48-automating-infrastructure-deployment-with-aws-cloudformation</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[lambda]]></category><category><![CDATA[cloudformation]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sat, 10 Jan 2026 10:14:25 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1768040019451/3d15f4f0-2e12-4732-9f25-88422c5fb6ad.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 48. Today we will learn how to automating Infrastructure depoloyment with AWS CloudFormation.</p>
<h3 id="heading-what-is-aws-cloudformation">What is AWS CloudFormation?</h3>
<p>AWS CloudFormation is an <strong>Infrastructure as Code (IaC)</strong> service that allows you to model, provision, and manage your AWS resources by writing a declarative template.</p>
<p>Instead of manually clicking through the AWS Console to create servers, databases, or networking components, you define your entire infrastructure in a <strong>JSON</strong> or <strong>YAML</strong> file. CloudFormation then acts as the "architect," reading your plan and building the resources in the correct order.</p>
<h3 id="heading-core-concepts">Core Concepts</h3>
<ul>
<li><p><strong>Template:</strong> A text file (YAML or JSON) that serves as the blueprint for your infrastructure. It defines what resources you want (e.g., an EC2 instance or an S3 bucket) and their configurations.</p>
</li>
<li><p><strong>Stack:</strong> When CloudFormation processes a template, it creates a "Stack." This is a single unit of managed resources. If you delete the stack, all resources defined in the template are deleted together.</p>
</li>
<li><p><strong>Change Sets:</strong> Before updating a live environment, you can generate a Change Set. This allows you to see a preview of how proposed changes will impact your running resources before you apply them.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039335840/21b2fe41-5b6d-4dd5-936f-e4c4897148d3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039351397/7a3811b8-3fd2-4232-9557-bd64413cc3a1.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">AWSTemplateFormatVersion: <span class="hljs-string">'2010-09-09'</span>
Description: CloudFormation template to create a Lambda <span class="hljs-keyword">function</span> and IAM role.

Resources:
  <span class="hljs-comment"># IAM Role for Lambda Execution</span>
  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: lambda_execution_role
      AssumeRolePolicyDocument:
        Version: <span class="hljs-string">'2012-10-17'</span>
        Statement:
          - Effect: Allow
            Principal:
              Service:
                - lambda.amazonaws.com
            Action:
              - sts:AssumeRole
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole

  <span class="hljs-comment"># Lambda Function</span>
  XfusionLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: xfusion-lambda
      Handler: index.lambda_handler
      Runtime: python3.9
      Role: !GetAtt LambdaExecutionRole.Arn
      Code:
        ZipFile: |
          import json

          def lambda_handler(event, context):
              message = <span class="hljs-string">"Welcome to KKE AWS Labs!"</span>
              <span class="hljs-built_in">print</span>(message)
              <span class="hljs-built_in">return</span> {
                  <span class="hljs-string">'statusCode'</span>: 200,
                  <span class="hljs-string">'body'</span>: json.dumps(message)
              }

Outputs:
  LambdaArn:
    Description: ARN of the created Lambda <span class="hljs-keyword">function</span>.
    Value: !GetAtt XfusionLambdaFunction.Arn
</code></pre>
<pre><code class="lang-bash">aws cloudformation validate-template --template-body file:///root/xfusion-lambda.yml
</code></pre>
<pre><code class="lang-bash">aws cloudformation create-stack --stack-name xfusion-lambda-app --template-body file:///root/xfusion-lambda.yml --capabilities CAPABILITY_NAMED_IAM
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039527032/18426c50-2376-4a72-b9ea-39fba561fd8f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039561502/94d4d613-7dc8-49a5-8cb9-b9cdcf5c20a1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039596292/cbfc416f-c4b9-40a7-9089-9d408462edbf.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039669111/2293fc03-7677-45fb-b33c-7840153bc27e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039642435/92ad42f5-83c2-47da-b401-4d789011180c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039699002/6b1a864c-e6e5-4973-9c8c-31900ca75640.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1768039717003/74ae51c5-dba9-47bd-93f7-692483876fb3.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 49. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 47 : Integrating AWS SQS and SNS for Reliable Messaging]]></title><description><![CDATA[Welcome to Day 47. Today we will learn how to integrating AWS SQS and SNS for reliable messaging.


AWSTemplateFormatVersion: '2010-09-09'
Description: 'Nautilus DevOps Priority Queuing System'

Resources:
  HighPriorityQueue:
    Type: AWS::SQS::Que...]]></description><link>https://frandisharing.com/day-47-integrating-aws-sqs-and-sns-for-reliable-messaging</link><guid isPermaLink="true">https://frandisharing.com/day-47-integrating-aws-sqs-and-sns-for-reliable-messaging</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[SQS]]></category><category><![CDATA[sns]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Fri, 09 Jan 2026 11:26:43 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767957950022/480260f4-c297-4fa8-91b4-a648a82c3156.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 47. Today we will learn how to integrating AWS SQS and SNS for reliable messaging.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767956161211/4392ade2-5e93-420e-ac7e-27e113942117.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767956351153/14507645-27c3-4d6a-8de5-fe1942ce5afc.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">AWSTemplateFormatVersion: <span class="hljs-string">'2010-09-09'</span>
Description: <span class="hljs-string">'Nautilus DevOps Priority Queuing System'</span>

Resources:
  HighPriorityQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: datacenter-High-Priority-Queue

  LowPriorityQueue:
    Type: AWS::SQS::Queue
    Properties:
      QueueName: datacenter-Low-Priority-Queue

  PriorityTopic:
    Type: AWS::SNS::Topic
    Properties:
      TopicName: datacenter-Priority-Queues-Topic

  HighPrioritySubscription:
    Type: AWS::SNS::Subscription
    Properties:
      TopicArn: !Ref PriorityTopic
      Endpoint: !GetAtt HighPriorityQueue.Arn
      Protocol: sqs
      FilterPolicy:
        priority:
          - high

  LowPrioritySubscription:
    Type: AWS::SNS::Subscription
    Properties:
      TopicArn: !Ref PriorityTopic
      Endpoint: !GetAtt LowPriorityQueue.Arn
      Protocol: sqs
      FilterPolicy:
        priority:
          - low

  LambdaExecutionRole:
    Type: AWS::IAM::Role
    Properties:
      RoleName: lambda_execution_role
      AssumeRolePolicyDocument:
        Version: <span class="hljs-string">'2012-10-17'</span>
        Statement:
          - Effect: Allow
            Principal:
              Service: lambda.amazonaws.com
            Action: sts:AssumeRole
      <span class="hljs-comment"># Using Managed Policies to avoid PutRolePolicy permission errors in labs</span>
      ManagedPolicyArns:
        - arn:aws:iam::aws:policy/service-role/AWSLambdaBasicExecutionRole
        - arn:aws:iam::aws:policy/AmazonSQSFullAccess

  PriorityLambdaFunction:
    Type: AWS::Lambda::Function
    Properties:
      FunctionName: datacenter-priorities-queue-function
      Handler: index.lambda_handler
      Role: !GetAtt LambdaExecutionRole.Arn
      Runtime: python3.9
      Timeout: 10
      Environment:
        Variables:
          high_priority_queue: !Ref HighPriorityQueue
          low_priority_queue: !Ref LowPriorityQueue
      Code:
        ZipFile: |
          import boto3
          import os
          sqs = boto3.client(<span class="hljs-string">'sqs'</span>)
          def delete_message(queue_url, receipt_handle, message):
              response = sqs.delete_message(QueueUrl=queue_url, ReceiptHandle=receipt_handle)
              <span class="hljs-built_in">return</span> <span class="hljs-string">"Message "</span> + <span class="hljs-string">"'"</span> + message + <span class="hljs-string">"'"</span> + <span class="hljs-string">" deleted"</span>
          def poll_messages(queue_url):
              response = sqs.receive_message(
                  QueueUrl=queue_url,
                  MaxNumberOfMessages=1,
                  MessageAttributeNames=[<span class="hljs-string">'All'</span>],
                  WaitTimeSeconds=3
              )
              <span class="hljs-keyword">if</span> <span class="hljs-string">"Messages"</span> <span class="hljs-keyword">in</span> response:
                  receipt_handle=response[<span class="hljs-string">'Messages'</span>][0][<span class="hljs-string">'ReceiptHandle'</span>]
                  message = response[<span class="hljs-string">'Messages'</span>][0][<span class="hljs-string">'Body'</span>]
                  <span class="hljs-built_in">return</span> delete_message(queue_url, receipt_handle, message)
              <span class="hljs-keyword">else</span>:
                  <span class="hljs-built_in">return</span> <span class="hljs-string">"No more messages to poll"</span>
          def lambda_handler(event, context):
              response = poll_messages(os.environ[<span class="hljs-string">'high_priority_queue'</span>])
              <span class="hljs-keyword">if</span> response == <span class="hljs-string">"No more messages to poll"</span>:
                  response = poll_messages(os.environ[<span class="hljs-string">'low_priority_queue'</span>])
              <span class="hljs-built_in">return</span> response

  SqsQueuePolicy:
    Type: AWS::SQS::QueuePolicy
    Properties:
      Queues:
        - !Ref HighPriorityQueue
        - !Ref LowPriorityQueue
      PolicyDocument:
        Statement:
          - Effect: Allow
            Principal:
              Service: sns.amazonaws.com
            Action: sqs:SendMessage
            Resource: <span class="hljs-string">"*"</span>
            Condition:
              ArnEquals:
                aws:SourceArn: !Ref PriorityTopic
</code></pre>
<pre><code class="lang-bash">aws cloudformation create-stack --stack-name datacenter-priority-stack --template-body file:///root/datacenter-priority-stack.yml --capabilities CAPABILITY_NAMED_IAM
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767956689463/d4c8631d-c3a4-4bb9-bb61-71a806b51d77.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767956726629/a5cc3319-1d1c-4259-9e6f-079b53f06cd7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767956754958/8e0bb99a-2395-4071-95fb-3d29c79dee9d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767956777916/a2380ee4-f3c5-4f3d-8f81-cd5979ad2a14.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767957668890/997bb495-9319-4082-9b0f-944281a27038.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767957695009/35f56b23-e819-4d83-bb31-e78c9d0a0695.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767957743621/0ece9b94-3f8a-4199-b481-844a018c9846.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767957792252/34436b30-a51b-4823-b2f4-8df53faa733a.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 48. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 46 : Event-Driven Processing with Amazon S3 and Lambda]]></title><description><![CDATA[Welcome to Day 46. Today we will learn how to create Event-Driven processing with Amazon S3 and Lambda. In this lab, you need to create two S3 buckets. The first one is a public S3 bucket, and the second is a private S3 bucket. After that, you need t...]]></description><link>https://frandisharing.com/day-46-event-driven-processing-with-amazon-s3-and-lambda</link><guid isPermaLink="true">https://frandisharing.com/day-46-event-driven-processing-with-amazon-s3-and-lambda</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[DynamoDB]]></category><category><![CDATA[S3]]></category><category><![CDATA[lambda]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Thu, 08 Jan 2026 09:43:45 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767865295976/881803a7-edc6-4557-9299-accfedd72bdf.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 46. Today we will learn how to create Event-Driven processing with Amazon S3 and Lambda. In this lab, you need to create two S3 buckets. The first one is a public S3 bucket, and the second is a private S3 bucket. After that, you need to create a DynamoDB table and a Lambda function.</p>
<h3 id="heading-what-is-amazon-lambda">What is Amazon Lambda?</h3>
<p>In AWS, a <strong>Lambda function</strong> is a piece of code that runs in a "serverless" environment. "Serverless" means <strong>AWS manages all the infrastructure for you</strong>. You don't need to set up, update, or scale virtual machines. You just upload your code, and Lambda runs it whenever it's needed.</p>
<h3 id="heading-what-is-dynamodb">What is DynamoDB?</h3>
<p><strong>Amazon DynamoDB</strong> is a serverless, fully managed <strong>NoSQL database</strong> service from AWS. It delivers high performance with single-digit millisecond latency at any scale, making it ideal for modern web and mobile apps.</p>
<p>Unlike traditional relational databases (like MySQL or PostgreSQL) that use fixed tables and columns, DynamoDB is a <strong>key-value and document database</strong>. This means it is very flexible and can store semi-structured data without needing a pre-defined schema.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862046202/56a5900c-24ef-4b76-a03b-2a4eadcc90cb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862027257/b37766e8-3798-4bb5-92e2-5dff53e95461.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862070267/3b7027ac-80b0-4cc7-a5be-b0ce34936605.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862098864/061e39aa-ffbe-4aaf-8f53-1b96e4ea5ff6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862117595/f73e4bec-0f36-4d8e-b45c-dbe63d89ba56.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862132952/5426b307-d158-4ad3-8523-415db25f797a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862167256/bcfd0f56-ae9b-420b-8682-bffd0af3c511.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862182051/29a3bf87-4de7-4b87-9719-ac958898c456.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862215452/6b3f7fec-37b7-4476-9196-c74d5453e881.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862263198/2c5968da-d931-46a9-9194-af3b76cfc978.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862922039/7b5bd6f1-42ea-4147-a753-44b94fc74039.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862969702/7b8733a3-9df2-495e-a70b-a649563e874e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767863280733/f6f4d5c4-cdaa-4cce-9842-39dd1d65b687.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767863938652/8021e75c-fc90-4dfb-99de-74375cef5ae1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864005423/40a0f19d-faa8-42e8-b6e9-e03cf54dac93.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864020381/9756daea-03b8-4bc7-bd33-4da84bef661a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864045588/bdcd4ea3-8900-4206-a714-157e41d4e005.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862713067/6e762bf6-3da1-4518-b655-ed9610dc440b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862805442/ea2d609e-9882-4e40-9fea-ea2d27aae5d4.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862833791/06f1fbda-9591-4f1f-9d47-74962c02e4f6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864159695/b1ab967b-6e6b-4258-9950-61f61d91207b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767862863752/4cc34d35-463e-4d47-b645-29e5c012b372.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864284167/bbdef28c-80f7-48ee-833b-bec6f15ae855.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864333329/b9bc190f-fea7-417b-a7c7-c5544887f553.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864393174/a2ebc696-885c-4c78-bf77-94c1a0585d2d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864407404/3697ae0d-e630-4fab-9343-252d357eaf57.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864423303/701874fd-5d3d-4721-b7e9-5cef4f4f5957.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864511705/c1839d6b-165e-448a-a48c-4b6745a5369e.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">aws s3 ls s3://xfusion-private-19833/

aws s3 cp /root/sample.zip s3://xfusion-public-8757/

aws s3 ls s3://xfusion-private-19833/

aws dynamodb scan --table-name xfusion-S3CopyLogs
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864528212/f35dfc70-0bfb-4bdd-a277-346124aaf9f1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864610343/f2787332-5c70-4117-9f66-85ccff43bfbf.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864627109/690d2fc0-975e-4a09-af9c-f7bdaab7bbab.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767864672797/2c6d1b3b-5cbb-4f30-b81e-9eea1d7a6f30.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 47. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 45: Configure NAT Gateway for Internet Access in a Private VPC]]></title><description><![CDATA[Welcome to Day 45. Today we will learn how to configure NAT Gateway for Internet access in a Private VPC.



























Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 46....]]></description><link>https://frandisharing.com/day-45-configure-nat-gateway-for-internet-access-in-a-private-vpc</link><guid isPermaLink="true">https://frandisharing.com/day-45-configure-nat-gateway-for-internet-access-in-a-private-vpc</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[nat]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Wed, 07 Jan 2026 07:29:06 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767764278442/959861b7-e2ae-4116-80c5-54999093dbb0.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 45. Today we will learn how to configure NAT Gateway for Internet access in a Private VPC.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770024241/17e27212-41df-4401-8317-4a6450db03af.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770055999/b0f59c16-6e9f-46ee-acf0-67058c801846.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770084821/1b736c31-5727-4bf0-b7dd-0a36e79286c9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770122386/919490e0-f224-4349-a2b6-736f80169003.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770142654/de9face2-97e2-412a-8058-57144bf03920.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770164887/2de81074-8f42-4a9a-9407-b7b1f7b71408.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770197800/1bb2bf2a-7b90-494d-a7ec-dcd6a79f6559.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770220055/6753f7b3-1d8c-45b9-ac4d-c641f3b811a8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770234362/0c5fd5e1-a303-4a44-a58d-082225ab391a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770253423/7dd80bfc-5ff5-4a54-b8c8-d845c93703dd.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770280143/1a4fd68b-8021-4306-9996-b72d6bd0fa1c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770306427/eee9ffac-1862-42be-a334-5c77391deedc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770325552/db90dc4d-0b66-4cad-8c19-16cf26858ad8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770384166/cedd1422-5d7b-4f76-9c8c-0013ec33c411.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770413307/c12f42a9-945c-4137-bcc2-865a68860594.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770428268/b4717b3d-7ea8-45c1-882d-c96f7449fe04.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770453877/223d9257-16fc-4f88-87de-1a2ba62d2337.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770482343/92a701f7-8ecd-438c-b94f-90886ec5a7d7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770495062/a1aacbae-1611-4d26-8f65-8f0a71377a92.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770669515/35f374f4-ffcf-403f-ab7a-58d1690d7d0f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770553569/7c76bdea-c513-4424-95a8-15fa1b2807e1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770569368/e74c7e74-a2f0-4afe-98f6-cb536e52f249.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770700035/6235089e-1dca-45f0-ae53-cd383bb5d916.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770737950/edf985e5-1985-4d34-9ea6-f33225691e9f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770756234/6c5a9068-daa6-4937-9539-0e0cbef44217.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770783349/50934394-a2ee-4e3d-ba0a-292b5fd2c11f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767770895942/ddedeade-2684-4e4c-a565-0ea0e7288753.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 46. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 44 : Implementing Auto Scaling for High Availability in AWS]]></title><description><![CDATA[Welcome to Day 44. Today, we will learn how to implement auto scaling for high availability in AWS. In this lab, you need to create a launch template named datacenter-launch-template, define a User Data script, create an Auto Scaling Group named data...]]></description><link>https://frandisharing.com/day-44-implementing-auto-scaling-for-high-availability-in-aws</link><guid isPermaLink="true">https://frandisharing.com/day-44-implementing-auto-scaling-for-high-availability-in-aws</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[alb]]></category><category><![CDATA[asg]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Tue, 06 Jan 2026 09:12:12 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767690712503/17e3581f-ca62-446b-881d-5fdf03b7dc26.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 44. Today, we will learn how to implement auto scaling for high availability in AWS. In this lab, you need to create a launch template named <strong>datacenter-launch-template</strong>, define a User Data script, create an Auto Scaling Group named <strong>datacenter-asg</strong>, create a target group named <strong>datacenter-tg</strong>, and create an Application Load Balancer named <strong>datacenter-alb</strong>. In this lab, you can't use the t2.micro instance type because it is no longer supported for Amazon Linux 2 AMI. So, I used the t3.micro instance type instead.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687024553/0791465c-5a24-45b6-83fc-300bd5692eb8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687080530/f3d21ec4-2b70-4618-95e4-ba6910a1a504.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687127149/cb42892e-6e9f-4c4b-aeff-122d2fcb3276.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687158567/81e58880-1c54-47bb-aaa6-d4e6f4d472fb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687206408/48574d73-5b15-4a9d-80ae-ab72598a4658.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767688863434/be01f6cc-7807-4e1f-80c0-a1804bafec60.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767688884154/bcc7df36-6bae-41a7-89fe-7777d84f5cd9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687576670/6372ad42-8a96-430f-911f-3db5d4a5ad97.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767688957115/d10e2396-dee7-4058-aee7-50ef30fa5e9e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767688353427/f082d085-6981-4cf6-9a8e-bb5994dd624d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689909418/d3157eaa-966e-4aaa-80ad-444eb042d0d0.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash"><span class="hljs-meta">#!/bin/bash</span>
sudo yum update -y

sudo amazon-linux-extras install nginx1 -y

sudo systemctl start nginx

sudo systemctl <span class="hljs-built_in">enable</span> nginx
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687897094/a1d424b8-e618-4819-975b-4c032ecdd144.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687939223/a8d03103-cd2a-4681-9298-726eaa5439af.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687967814/131d2950-4e49-4a4c-bbe3-ee77e0611055.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767687983504/3b379330-40b0-4712-9f68-53364e78befa.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767688015296/88c83d4d-1694-4b87-8a2f-fb825cbff75f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689144066/9e379205-c678-4bbf-9699-6a0775e96f6b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689160765/b6276e08-92ae-4c5b-90b9-0be97f606d55.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689176245/8e5eb4d7-f382-4111-a1d0-983848aa91dc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689199358/1a086aa8-6e49-421b-bb0d-6e53dffec097.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689236088/af9b38e6-68d0-4a3c-a8f9-9f26baba57cf.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689250504/08930bec-e864-4298-b871-d7d8e0d22392.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689263596/3a5b5cb7-5740-4f28-93f1-07ad4dc8296b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689282871/c09b2ec9-2b88-4d22-8446-1c02f452d1da.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689294920/64df8766-78a7-4e9f-a573-37b14c8a5ecd.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689324264/aeca75f2-b2ef-4345-9ea3-8e886eaa1fa5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689353436/77e47ba4-ff34-4b17-9681-bf63c78666cf.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689392317/ad8eb534-38bf-42bf-b6c7-5d6e15165c9d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689409224/2fbb375f-6559-4e61-a3fb-12d3db0f31dc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689424429/67243f5b-beb3-4cd8-b198-9f2c195ebd48.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689463055/d7827445-bff3-45ef-a68a-7bbd30db228c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689479391/07cc26e8-628f-47d6-89fe-b8a37e44cc8f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689546828/f4a88ebf-cc0b-44a8-942e-fd8d3ec1aa52.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689736882/5bff6d7f-6c40-43c2-877f-41426c4052a5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689768752/d81ffef8-5543-454a-bc16-9098a90e0315.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689788133/ce867893-9eb0-45a6-a132-d54196c35216.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689823769/6f04772d-3ca4-48ce-a8dd-2fcdd2ac3368.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767689840788/10e96cc3-d709-421a-aed3-7bda698d4deb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767690008953/e86351e6-7f85-44a7-bf05-661adc723723.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767690020400/ce220c15-4387-4ca8-a166-2116c22aa4aa.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767690037990/3d0732ff-e84a-425a-86ed-c4342ff67563.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767690058760/56e7d226-7225-4c46-af8a-0e4da1865c71.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 45. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 43: Scaling and Managing Kubernetes Clusters with Amazon EKS]]></title><description><![CDATA[Welcome to Day 43. Today we will learn how to scale and manage Kubernetes Clusters with Amazon EKS. In this lab you need to udenderstand why we need to use AWS EKS and how to configure production ready EKS cluster.
What is AWS EKS?
AWS EKS (Amazon El...]]></description><link>https://frandisharing.com/day-43-scaling-and-managing-kubernetes-clusters-with-amazon-eks</link><guid isPermaLink="true">https://frandisharing.com/day-43-scaling-and-managing-kubernetes-clusters-with-amazon-eks</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[EKS]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Mon, 05 Jan 2026 07:11:05 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596997784/83f6d80f-5f30-488e-8ff3-87454ae15026.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 43. Today we will learn how to scale and manage Kubernetes Clusters with Amazon EKS. In this lab you need to udenderstand why we need to use AWS EKS and how to configure production ready EKS cluster.</p>
<h3 id="heading-what-is-aws-eks">What is AWS EKS?</h3>
<p><strong>AWS EKS (Amazon Elastic Kubernetes Service)</strong> is a <strong>managed Kubernetes service</strong> provided by Amazon Web Services that makes it easy to <strong>run, manage, and scale Kubernetes clusters</strong> on AWS.</p>
<h3 id="heading-what-does-aws-eks-do">What does AWS EKS do?</h3>
<p>AWS EKS runs the <strong>Kubernetes control plane</strong> for you, so you don’t need to install or maintain:</p>
<ul>
<li><p>Kubernetes master nodes</p>
</li>
<li><p>etcd database</p>
</li>
<li><p>Control plane security patches</p>
</li>
<li><p>Kubernetes version upgrades</p>
</li>
</ul>
<p>You focus only on <strong>deploying and managing your applications</strong>.</p>
<h3 id="heading-key-components-of-aws-eks">Key Components of AWS EKS</h3>
<p>1️⃣ Control Plane (Managed by AWS)</p>
<p>AWS manages:</p>
<ul>
<li><p>API Server</p>
</li>
<li><p>Scheduler</p>
</li>
<li><p>Controller Manager</p>
</li>
<li><p>etcd (cluster state)</p>
</li>
</ul>
<p>✔ Highly available<br />✔ Secure<br />✔ Automatically patched</p>
<p>2️⃣ Worker Nodes (Managed by You or AWS)</p>
<p>These run your applications (pods).</p>
<p>You can choose:</p>
<ul>
<li><p><strong>EC2 worker nodes</strong> (full control)</p>
</li>
<li><p><strong>Managed Node Groups</strong> (AWS-managed EC2)</p>
</li>
<li><p><strong>AWS Fargate</strong> (serverless, no EC2 to manage)</p>
</li>
</ul>
<hr />
<h3 id="heading-why-use-aws-eks">Why use AWS EKS?</h3>
<p><strong>✅ High Availability</strong></p>
<ul>
<li>Control plane runs across <strong>multiple Availability Zones</strong></li>
</ul>
<h3 id="heading-security">✅ Security</h3>
<ul>
<li><p>Integrated with <strong>IAM</strong></p>
</li>
<li><p>Supports <strong>private cluster endpoints</strong></p>
</li>
<li><p>Works with <strong>VPC security groups</strong></p>
</li>
</ul>
<h3 id="heading-scalability">✅ Scalability</h3>
<ul>
<li><p>Auto scaling for nodes and pods</p>
</li>
<li><p>Handles large production workloads</p>
</li>
</ul>
<h3 id="heading-kubernetes-compatible">✅ Kubernetes Compatible</h3>
<ul>
<li><p>Fully <strong>CNCF-certified Kubernetes</strong></p>
</li>
<li><p>Use standard Kubernetes tools and manifests</p>
</li>
</ul>
<hr />
<h3 id="heading-when-should-you-use-eks">When should you use EKS?</h3>
<p>Use EKS when:</p>
<ul>
<li><p>You want <strong>Kubernetes in production</strong></p>
</li>
<li><p>You need <strong>high security and availability</strong></p>
</li>
<li><p>You already use AWS services (ALB, IAM, VPC, RDS, S3, etc.)</p>
</li>
<li><p>You want <strong>less operational overhead</strong></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595309563/54372d23-e1b8-45da-acc6-11312345bc62.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595375489/11610107-68ec-4d5f-b295-94ee9dce7f7c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595685751/7950936b-3496-4c03-abae-881ab322d5de.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595710078/71d515e1-8e2e-4dda-ad28-621b299535d7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595728184/7caaa51b-1fa2-4e74-a89d-3366880f75a9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595795896/79fe198e-611f-4dad-bfbc-f7c39fa1c392.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595414776/7473d0f2-f87c-4d0f-8365-db9d098c786a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595845670/2d57142e-5308-4a4f-b09b-ddeba05c32a9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595877221/9f998db9-18ef-470e-9e4c-fd03022ab041.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595899871/87bd89ad-02c3-453f-babd-0c2de794eff8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595923737/e11633fd-cde3-4bbc-9d6b-6b29b47e601b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595939873/a8cd7ce7-533c-4dad-b217-17b743c66043.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767595977629/3f4085b3-a263-40ea-9561-0fe90cfe6c51.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596008731/c0ebf6c0-1096-4c8c-81a5-0bacd0eb649e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596027354/664c930c-7b46-4716-ada9-9c805b01234d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596044315/356a03ab-2f43-4044-b3bf-f18e1aa999db.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596097071/c2e65cbf-73ed-4672-b507-0c30e2ec5c08.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596129567/f9accdb3-b9e9-4757-91ec-33d4bf54b29d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596146399/65477034-dc34-497a-b285-563a792e5498.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596162873/a307373f-5c95-4f34-865e-dcec2024bf5a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596181367/32f9b04d-21bc-4819-9f8a-0dc51b05cb0b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596215545/60535c8c-8d87-4489-b952-723e4a992036.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596894440/06b21d1d-e1ed-456c-93d1-63940b8f7263.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596913295/2630739e-97e4-4b54-b2b6-29e04d7cf130.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767596931053/941f268a-c120-41ff-9300-605a63b8c430.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 44. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 42: Building and Managing NoSQL Databases with AWS DynamoDB]]></title><description><![CDATA[Weclome to Day 42. Today we will learn how to build and manage NoSQL Databases with AWS DynamoDB.
What is DynamoDB?
Amazon DynamoDB is a fully managed NoSQL database service provided by AWS (Amazon Web Services). It is designed to store and retrieve ...]]></description><link>https://frandisharing.com/day-42-building-and-managing-nosql-databases-with-aws-dynamodb</link><guid isPermaLink="true">https://frandisharing.com/day-42-building-and-managing-nosql-databases-with-aws-dynamodb</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[DynamoDB]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sun, 04 Jan 2026 16:10:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542738352/3eebd708-53de-4ef8-a72b-2660c08775c5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Weclome to Day 42. Today we will learn how to build and manage NoSQL Databases with AWS DynamoDB.</p>
<h3 id="heading-what-is-dynamodb">What is DynamoDB?</h3>
<p><strong>Amazon DynamoDB</strong> is a <strong>fully managed NoSQL database service</strong> provided by <strong>AWS (Amazon Web Services)</strong>. It is designed to store and retrieve large amounts of data <strong>very fast</strong>, with <strong>high availability</strong> and <strong>automatic scaling</strong>, without you needing to manage servers.</p>
<h2 id="heading-key-characteristics-of-dynamodb">🔹 Key Characteristics of DynamoDB</h2>
<h3 id="heading-1-nosql-database">1️⃣ NoSQL Database</h3>
<ul>
<li><p>Stores data as <strong>items</strong> (similar to rows)</p>
</li>
<li><p>Items are grouped into <strong>tables</strong></p>
</li>
<li><p>Uses <strong>key–value</strong> and <strong>document</strong> data models</p>
</li>
<li><p>Schema is flexible (attributes can vary per item)</p>
</li>
</ul>
<hr />
<h3 id="heading-2-fully-managed-by-aws">2️⃣ Fully Managed by AWS</h3>
<p>You <strong>don’t manage</strong>:</p>
<ul>
<li><p>Servers</p>
</li>
<li><p>Operating systems</p>
</li>
<li><p>Patching</p>
</li>
<li><p>Backups</p>
</li>
<li><p>Scaling</p>
</li>
</ul>
<p>AWS handles all of this automatically.</p>
<hr />
<h3 id="heading-3-extremely-fast-performance">3️⃣ Extremely Fast Performance</h3>
<ul>
<li><p>Single-digit <strong>millisecond latency</strong></p>
</li>
<li><p>Designed for <strong>high-traffic applications</strong></p>
</li>
<li><p>Handles millions of requests per second</p>
</li>
</ul>
<hr />
<h3 id="heading-4-highly-scalable">4️⃣ Highly Scalable</h3>
<ul>
<li><p>Automatically scales <strong>read and write capacity</strong></p>
</li>
<li><p>Supports <strong>on-demand</strong> and <strong>provisioned</strong> capacity modes</p>
</li>
</ul>
<hr />
<h3 id="heading-5-high-availability-amp-durability">5️⃣ High Availability &amp; Durability</h3>
<ul>
<li><p>Data is <strong>replicated across multiple Availability Zones</strong></p>
</li>
<li><p>Built-in fault tolerance</p>
</li>
<li><p>Designed for <strong>99.999% availability</strong></p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767541727222/9468850b-3af6-4529-aac6-645f1c0837de.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767541772707/054db916-4c63-4222-b4c5-b8e58953d65c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767541828365/54fbd61a-5008-48e7-bfed-cac8303d109e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767541875003/05f13b6a-c9d3-444b-be70-e1a7c9982010.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767541921607/cbe2b1da-34c2-40c4-bff3-e8d4bdfe8600.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767541971490/51f1cf36-ed91-4ad7-8647-c5d3cfc2d61e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542226084/45d69999-e962-4526-aef8-430659d35be9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542432459/97193845-6e7a-4e02-9981-d919ace38023.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542495953/06dbf7ae-16a7-4a26-9a57-175e8187e482.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542522687/bc4649f0-80b3-4044-bf31-bc317094d735.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542564902/69f3d23a-4774-4d22-9291-f65b0e8133fe.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767542577878/c34e95c9-9d07-4ed0-a7c2-b03c06f4e9d4.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 43. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 41: Securing Data with AWS KMS]]></title><description><![CDATA[Welcome to Day 41. Today we will learn how to securing data with AWS KMS.
What is AWS KMS?
AWS Key Management Service (KMS) is a managed service that makes it easy for you to create and control the cryptographic keys used to protect your data. It pro...]]></description><link>https://frandisharing.com/day-41-securing-data-with-aws-kms</link><guid isPermaLink="true">https://frandisharing.com/day-41-securing-data-with-aws-kms</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[KMS]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sat, 03 Jan 2026 11:02:38 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767438116189/974482dc-052f-4b01-b68c-c48d18e18ca5.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 41. Today we will learn how to securing data with AWS KMS.</p>
<h3 id="heading-what-is-aws-kms">What is AWS KMS?</h3>
<p><strong>AWS Key Management Service (KMS)</strong> is a managed service that makes it easy for you to create and control the cryptographic keys used to protect your data. It provides a highly available, secure, and centralized hub for managing encryption across your entire AWS environment.</p>
<h3 id="heading-core-functions-of-aws-kms">Core Functions of AWS KMS</h3>
<p>AWS KMS handles the "heavy lifting" of cryptography so you don't have to manage complex hardware or software.</p>
<ul>
<li><p><strong>Key Lifecycle Management:</strong> You can create, rotate, disable, and delete keys.</p>
</li>
<li><p><strong>Centralized Control:</strong> Manage permissions for who can use or manage keys through IAM (Identity and Access Management) and Key Policies.</p>
</li>
<li><p><strong>Auditability:</strong> Every time a key is used, it is logged in <strong>AWS CloudTrail</strong>, allowing you to see exactly who used a key, when, and for what resource.</p>
</li>
<li><p><strong>High Security:</strong> Keys are protected by FIPS 140-2 validated <strong>Hardware Security Modules (HSMs)</strong>. Plaintext master keys never leave these modules.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437459221/c6eba85f-f792-421b-94d1-d2d31335c2be.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437545513/769d8dee-be92-41c9-af71-cb7f07267f26.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437575205/eaa678ff-008e-42a8-8dad-cc5a4135439f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437715260/ee740a67-d01e-4b54-855a-0557c55b2b3d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437734385/51ae2aa7-1562-4763-918d-51aad8b028df.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437776155/9c91340b-a619-4e44-82c1-13bd7de36bf5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437796968/36bbbce3-e22f-4124-bbc7-6ac0a3cce34f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767437823256/ac9601f5-ff2b-452c-8814-12530085b40a.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash"><span class="hljs-comment">#Create the Key</span>
aws kms create-key --description <span class="hljs-string">"Nautilus datacenter-KMS-Key"</span>

<span class="hljs-comment">#Create the alias</span>
aws kms create-alias --alias-name <span class="hljs-built_in">alias</span>/datacenter-KMS-Key --target-key-id &lt;your-key-id&gt;

<span class="hljs-comment">#Encrypt and encode the file</span>
aws kms encrypt \
    --key-id <span class="hljs-built_in">alias</span>/datacenter-KMS-Key \
    --plaintext fileb:///root/SensitiveData.txt \
    --query CiphertextBlob \
    --output text | base64 --decode &gt; /root/EncryptedData.bin

<span class="hljs-comment">#Decrypt the file</span>
aws kms decrypt \
    --ciphertext-blob fileb:///root/EncryptedData.bin \
    --query Plaintext \
    --output text | base64 --decode &gt; /root/DecryptedData.txt

<span class="hljs-comment">#Compare Results</span>
diff /root/SensitiveData.txt /root/DecryptedData.txt
</code></pre>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 42. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 40: Troubleshooting Internet Accessibility for an EC2-Hosted Application]]></title><description><![CDATA[Welcome to Day 40. Today, we will learn how to troubleshoot internet accessibility for an application hosted on EC2. When I try to access my EC2 instance's public IP via a browser, there is no response. I then check whether my EC2 instance's subnet i...]]></description><link>https://frandisharing.com/day-40-troubleshooting-internet-accessibility-for-an-ec2-hosted-application</link><guid isPermaLink="true">https://frandisharing.com/day-40-troubleshooting-internet-accessibility-for-an-ec2-hosted-application</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[ec2]]></category><category><![CDATA[Internet Gateway]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Thu, 01 Jan 2026 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767436381345/e77be46d-f76f-4366-85c7-6e1b0518db74.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 40. Today, we will learn how to troubleshoot internet accessibility for an application hosted on EC2. When I try to access my EC2 instance's public IP via a browser, there is no response. I then check whether my EC2 instance's subnet is public or private. My instance is in a public subnet, but I still can't access my application from the internet. Then I checked the VPC settings and saw that my public subnet's route table was not connected to the Internet gateway. So, I went to the Internet gateway settings and saw that my Internet Gateway was not attached to the VPC. That's the main cause of the issue. After I attached my Internet Gateway to the VPC, I was able to access my application from the internet.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428392379/3122e5aa-083f-48e2-b282-48dcd21ec1e6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428457066/ab3a2aa4-35ad-4f3f-9fb2-5717fc3588f6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428663832/58e1f56c-d63c-492f-ab17-0f054be6c991.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428688543/4100e85f-3f71-47ec-b64f-42f0e040ee61.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428766546/820cab33-1004-428e-bfe4-1e2cb1dcc5ee.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428795610/9ba69df4-a1bb-4f58-a7e2-0046bb48ab3b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428810989/fd950e7b-a159-45d3-9187-ca1b440002eb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428833720/99e82e50-9943-4c61-bfd5-03270b77ca75.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428872290/58610b50-5ff4-4e29-b975-32e26d6fd98d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428888585/47f9e5a3-79bf-4a27-a49a-eae5c9288096.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428907545/592c2a31-9a18-4441-899d-a52814f41e6f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767428920847/37a7559f-9387-4976-818a-bff1ca52c263.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 41. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 39: Hosting a Static Website on AWS S3]]></title><description><![CDATA[Welcome to Day 39. Today we will learn how to host a static website on AWS S3.






aws s3 cp index.html s3://devops-web-15019











Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in d...]]></description><link>https://frandisharing.com/day-39-hosting-a-static-website-on-aws-s3</link><guid isPermaLink="true">https://frandisharing.com/day-39-hosting-a-static-website-on-aws-s3</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[S3]]></category><category><![CDATA[Static Website]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Wed, 31 Dec 2025 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427946546/3609321e-eddf-4e4c-8627-222014f8c3e6.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 39. Today we will learn how to host a static website on AWS S3.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427009757/4a845871-844c-4058-9d4e-a767090aa429.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427038228/8597e765-e509-4f4c-b45a-c172774b913f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427097062/df643386-8831-429b-9d9e-a010146b68f3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427116188/9b355ace-7320-48b0-9e4e-f40f51842e22.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427135697/b1eaf4b6-54b7-4a89-8c91-92d4b76067bb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427161166/6c35e2e2-7b8d-479a-a165-97c98dd6e311.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">aws s3 cp index.html s3://devops-web-15019
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427335613/cd400850-55c3-4201-93a9-6ee2ad2a60da.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427347883/54071c93-ae2b-4a5e-bc83-dd308c3d6fc0.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427376844/afbb730c-81bb-4906-a551-e19565fe337e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427397287/22d5fb9b-365b-43e0-a331-18663231999a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427496422/b7231a36-db2b-4ff7-8d69-8bf948330663.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427583277/a807eb18-c14a-4813-899d-eea9e6a49870.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427420439/7b67b81e-4eb7-4af2-820e-88d65c2e705b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427641967/36f460d8-84e5-45e6-bbc9-3cfc5cd8d698.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427658258/752bb01f-63d6-49cf-8632-bd745a109f0e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767427671185/847bf47a-7c1e-4930-a878-9af270af9d12.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 40. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 38: Deploying Containerized Applications with Amazon ECS]]></title><description><![CDATA[Welcome to Day 38. Today we will learn how to deploy containerized applications with Amazon ECS.
What is AWS ECS?
Amazon Elastic Container Service (ECS) is a fully managed container orchestration service provided by AWS. It allows you to run, scale, ...]]></description><link>https://frandisharing.com/day-38-deploying-containerized-applications-with-amazon-ecs</link><guid isPermaLink="true">https://frandisharing.com/day-38-deploying-containerized-applications-with-amazon-ecs</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[ECS]]></category><category><![CDATA[ecr]]></category><category><![CDATA[Docker]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Tue, 30 Dec 2025 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767426337704/3e2b8503-9bc2-49c6-84ee-73d74ecf8cb2.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 38. Today we will learn how to deploy containerized applications with Amazon ECS.</p>
<h3 id="heading-what-is-aws-ecs">What is AWS ECS?</h3>
<p><strong>Amazon Elastic Container Service (ECS)</strong> is a fully managed container orchestration service provided by AWS. It allows you to run, scale, and manage Docker containers without having to install or operate your own cluster management software.</p>
<h3 id="heading-core-concepts">Core Concepts</h3>
<ul>
<li><p><strong>Task Definition:</strong> A JSON file (the "blueprint") that describes one or more containers. It specifies parameters like the Docker image to use, how much CPU/Memory is needed, and which ports should be open.</p>
</li>
<li><p><strong>Task:</strong> An "instance" of a Task Definition. This is the actual running container (or group of containers) on your cluster.</p>
</li>
<li><p><strong>Service:</strong> Manages the "desired state" of your tasks. For example, if you tell a Service to run 3 copies of a task, it will automatically restart any that crash to ensure 3 are always running.</p>
</li>
<li><p><strong>Cluster:</strong> A logical grouping of your tasks and services.</p>
</li>
</ul>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767424728246/46c1f466-956d-4571-8fd8-800b0ab94866.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767424782211/86694e9c-5f31-402c-bc6b-9684afd83a82.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767424829285/e9d16b04-a499-4e6f-9c1c-8659f73c7064.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767424855800/849315a3-03b5-423e-abbc-1152b5b65390.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767424873292/7bd8bd52-d485-4289-9001-ef7aa4d8d04d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425073133/ef8dc69a-c770-4246-b764-804ed25b63f0.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> /root/pyapp/

ls

aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 198646816501.dkr.ecr.us-east-1.amazonaws.com

docker build -t xfusion-ecr .

docker tag xfusion-ecr:latest 198646816501.dkr.ecr.us-east-1.amazonaws.com/xfusion-ecr:latest

docker push 198646816501.dkr.ecr.us-east-1.amazonaws.com/xfusion-ecr:latest
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425143578/f33389b0-1aad-4c78-81df-49ed9081bb23.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425188917/577467f5-60d5-4c9a-8432-4dc3a4dfce22.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425233525/11941fd8-bfd9-44e4-a75a-d4c0d6965b9b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425283862/bdbb1378-1900-41ff-b176-5679554cc456.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425420468/2ffda6ab-8768-41e0-825a-90e7d1c2037f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425706928/ccf94640-fadc-4041-81a3-f9fb87d7dd5c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425514372/282a11a1-a888-4749-a0c8-ecd7c4a1bcf3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425614329/94b53319-c712-49c7-8c87-ee225bafa391.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425668983/ff3656ba-3f40-4f03-8f21-2f90ec7a6514.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425751622/85a24dce-42df-4c24-86c5-bd75f4f02162.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425814427/0c43f2a5-7b9f-4cab-999e-fefe66e1e909.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425836228/e3e797be-8c9c-4737-8208-4489c63378fe.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425855227/da8a829d-91db-4aee-8881-927ac0ef9607.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425878999/93009aa1-61bd-4f14-ae18-100712b47eea.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425893776/8d194096-5aaa-4acc-848d-f3c2f7cc718a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767425961234/65308907-a7c6-42f6-b515-46d6d7be6b02.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767426055848/e8ff915e-efed-47f1-ae83-125006b09126.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767426075423/56368c6b-6da3-40e3-8035-23b8bfa4ddeb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767426118144/88c56353-40be-44af-bda3-1f13475be229.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767426144977/a9f0b4f3-db3f-4c2e-9229-da29908599f3.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 39. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 37: Managing EC2 Access with S3 Role-based Permissions]]></title><description><![CDATA[Welcome to Day 37. Today, we will learn how to create a private S3 bucket and upload data from an EC2 instance using S3 role-based permissions. An Instance named xfusion-ec2 alreday exists. You just need to create a private S3 bucket and the related ...]]></description><link>https://frandisharing.com/day-37-managing-ec2-access-with-s3-role-based-permissions</link><guid isPermaLink="true">https://frandisharing.com/day-37-managing-ec2-access-with-s3-role-based-permissions</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[ec2]]></category><category><![CDATA[S3]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Mon, 29 Dec 2025 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767358024014/5b663607-9812-44fc-8233-e8bac754240e.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 37. Today, we will learn how to create a private S3 bucket and upload data from an EC2 instance using S3 role-based permissions. An Instance named <strong>xfusion-ec2</strong> alreday exists. You just need to create a private S3 bucket and the related IAM role and policy. After creating the IAM role, please attach it to the EC2 instance.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767355758419/70e7e0c1-4cd5-4942-a2d1-aef64ed5db49.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767355795312/a5cecc64-97cc-475f-a3d0-e9cfe31d3b75.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767355881266/2ea37a02-a7e4-4f27-a776-34d47fe5cb32.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767355937209/16a18578-922a-4955-a49e-f5d2d6c5f6fb.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356024445/cd6c77a4-60a5-4c87-b8f3-d03723c1a953.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356092591/6da6b6c1-1e9e-4a2d-bc43-8974f22167ca.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356076680/06f039f6-8d16-4697-843e-903f3f05ef50.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356136973/f5bf7ae9-65ba-4c80-b2d9-da63e9d4367f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356187406/10660a15-d980-4bcf-bcaa-fd5d18502750.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356212830/502e5918-660e-448d-815d-d8fd0efe1299.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356234087/e97fc5b1-7589-432c-b684-e72b34ac8b7d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356253499/36c1393f-2abc-4629-901f-c7525db20918.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356269848/ec7ff033-fec4-4875-b214-d344a7a5c5c9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356319856/ff77f11d-4263-4fe6-ad81-a86c76ffabc8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356469677/296d0e38-4497-4f81-bf5c-25fe13f23184.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767357784859/53d24e23-1d50-4a75-b44a-26f4a716bdb3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356758401/d223131d-19fe-4d4d-87da-4dd42b055e9b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356779661/6ad05687-1b67-4136-b735-a9bd86fa6d73.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356351384/11025dd3-5009-45ef-a19b-a145538f9817.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356403574/e9158817-7342-4a38-b847-e35654afd4c1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356813625/f8f9990a-85d5-4e55-af5b-a0425a159143.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356841061/67aa7859-9dd1-497c-b9c1-25c87c27853e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356928213/359e45eb-a7f4-4efc-94be-5a7ecc09798a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356942098/dcbadfb5-4eb2-49eb-be37-280d9a4ac4d9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767356955678/51d5fac1-0263-4ca1-86fe-4791f84cb4a8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767357538437/15a007ff-d2f0-4d38-84c8-a4e1a1819433.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767357421726/edd08f63-1118-438a-949b-a4b8c0ba9b29.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767357586346/b7aaee78-0a9a-4d35-a036-47966602c100.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767357605460/6fb6486d-e81b-46bf-acc5-45902da6740c.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 38. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 36: Load Balancing EC2 Instances with Application Load Balancer]]></title><description><![CDATA[Welcome to Day 36. Today, we will learn how to create a load-balanced EC2 instance with an application load balancer. In this lab, you need to set up an EC2 instance named devops-ec2 and install and configure Nginx on this EC2 instance. After that, y...]]></description><link>https://frandisharing.com/day-36-load-balancing-ec2-instances-with-application-load-balancer</link><guid isPermaLink="true">https://frandisharing.com/day-36-load-balancing-ec2-instances-with-application-load-balancer</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[ec2]]></category><category><![CDATA[alb]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sun, 28 Dec 2025 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767355472706/8ecb4e3f-657e-4efb-96cd-c5f9b458c8f4.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 36. Today, we will learn how to create a load-balanced EC2 instance with an application load balancer. In this lab, you need to set up an EC2 instance named <strong>devops-ec2</strong> and install and configure Nginx on this EC2 instance. After that, you need to create a target group named devops-tg and an application load balancer named <strong>devops-alb</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353246605/d82925e5-13ce-459f-a38f-05b687b8b662.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353283788/13b85c13-5132-4be1-99b1-f6bccf6002e5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353343513/afa1bf91-ccba-43a1-8469-fff1edef8667.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353419180/99f5b6a6-6497-44b8-b54d-4af820a70d0a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353461690/e56634e9-0979-4ac9-b193-d9c03e8af09c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353529325/d3ae0e3f-2830-4f82-9d31-c2d69fdd891f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353599138/6d9c0c03-421d-43ef-9741-bc77db929b42.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353622536/08b2f2c7-96fd-4062-9562-55617b1dd9b2.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353645142/4f0587b7-be72-417c-a073-9698d68b67a5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353861774/39657d68-e201-48a3-ab74-6dfa7955710e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353812573/b63cf9b3-d010-4888-834b-ead430bf1582.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353878309/58ed7fdc-7961-48e9-958d-2d4d20da4484.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353943401/0e563368-9c7e-4c28-9bc4-79e204e555fa.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">sudo apt install nginx -y

sudo systemctl start nginx

sudo systemctl <span class="hljs-built_in">enable</span> --now nginx

sudo systemctl status nginx
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353705415/a58e0f2b-39fe-43f9-ac49-95fa10956ae1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353732978/2ddc5fda-2dff-432e-b004-f8aff1518cb3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353758904/ce3b84a4-7bac-45f7-ab41-372733dd4273.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767353774620/b4e246ec-4323-4666-8242-1540265f398d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354011296/c810c9b5-aefd-40e4-b378-df9f33e4115c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354024780/1d26db37-18a8-4e1f-8077-233cfa8059cc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354043053/c099df76-facc-41da-b798-6ee1dc9f83dc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354071221/9489186a-479a-4dcd-8de2-aad738c5e903.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354088290/7d6e20f1-349f-4769-b0f5-75a101bf1dc0.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354118211/4a48bc7b-3733-4ccb-899d-6e1e115ac8dd.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354139696/3e07fc4d-e12d-4ed2-b763-cecc4fa8cca5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354202893/703fa242-b8cc-4f06-8575-207b8ce284f9.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354267292/3368c29a-76c2-408a-b2cf-dc5b639e98ed.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354282342/87a087ff-71ae-4f70-bc17-cef3c3fb0285.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354513148/912fb23e-d2c9-4878-9d55-fef2b3411f53.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354522310/5f1715b4-26db-41b1-a14f-de431b9b41bd.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354553638/2efdab16-bfdc-4611-a308-05b013ac206d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354567402/c1eb082e-1fe9-426e-a5ba-98f9cdb9ba4c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354599741/83bfbb89-cd15-4af8-9f93-e9bd1d2764a6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767354628898/6dd216f3-6568-40d8-81a3-0c50190c7a9d.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 37. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 35: Deploying and Managing Applications on AWS]]></title><description><![CDATA[Welcome to Day 30. Today, we will learn how to deploy and manage applications on AWS. In this lab, you need to create a private RDS named devops-rds. You don't need to create an EC2 instance for the application server it's already set up.











...]]></description><link>https://frandisharing.com/day-35-deploying-and-managing-applications-on-aws</link><guid isPermaLink="true">https://frandisharing.com/day-35-deploying-and-managing-applications-on-aws</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[ec2]]></category><category><![CDATA[rds]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Sat, 27 Dec 2025 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767352754918/7eea1adc-6aa8-42fb-9e1d-e19e1f6f1ff8.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome to Day 30. Today, we will learn how to deploy and manage applications on AWS. In this lab, you need to create a private RDS named <strong>devops-rds</strong>. You don't need to create an EC2 instance for the application server it's already set up.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767349837586/f3bda1f6-f7b2-4e1d-9194-18f9dd3f65fa.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767349871340/956fc1cb-572b-4c80-819d-e132656380db.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767349939899/4b02c780-a98f-4725-99ad-6e3bba39de47.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350042591/228d11a8-0073-4e91-b7ac-56f90e1d62ca.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350075246/3116a995-f39c-4d49-877d-e97d1ce176cc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350126306/b3e40713-051f-4cba-b158-b7105c0c708d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350154879/7fa92788-0fed-45f4-9893-0ac5f42d80b1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350181351/5f178734-ed26-47e9-8acc-93573cea9fa7.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350208976/fb4b70b8-2ad5-4e41-a1ad-e05a96ad4cc8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350250345/cc19a90d-0870-4bd3-8b37-6d0aa0e32d73.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350304170/b27fc22d-8a04-4f5d-9d20-3ec7fbcef48f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350321093/fc5bfa7c-792e-4a13-89ba-430c6e228e58.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350343800/7083eaa9-3b23-4e97-81cc-7b73ac56ff76.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350360568/990afb4a-cc41-49fa-9009-e83a4efd978b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350538571/ad68c943-c5a3-4ef4-b6aa-209b3381859a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350700759/fbe17cdd-38fe-4e6b-beb5-fff7a7d09b9f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350868085/1652d0be-f603-42c9-a1f7-b31eec242af5.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350852992/7216caed-c97a-4ebd-bf56-45ebc8918175.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350894895/b3b74f98-7104-496c-94bf-24e8a4b2cb77.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767350979995/5dfd2b0f-74f6-47a1-88ae-530fa3dafb79.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767351125244/b9eaf60b-8286-4d6c-97b3-89fcc4aec2f6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767351517919/a9d63315-43bb-47d0-a441-17cd0a0a4933.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767352041391/93d260fc-0d48-4eaa-87b4-434a4026aee3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767352080694/35cce1b3-c911-4a7d-ad02-ebe79b6a3ba6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767352095745/b4fc96f6-5559-45c5-9a31-04ee6bf0fe2b.png" alt class="image--center mx-auto" /></p>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 36. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item><item><title><![CDATA[Day 34: Create a Lambda Function Using CLI]]></title><description><![CDATA[Welcome from Day 34. Today we will learn how to create a lambda function using cli. In this lab you just need to create a Lambda function using cli not from AWS management console.








vi lambda_function.py

def lambda_handler(event, context):
  ...]]></description><link>https://frandisharing.com/day-34-create-a-lambda-function-using-cli</link><guid isPermaLink="true">https://frandisharing.com/day-34-create-a-lambda-function-using-cli</guid><category><![CDATA[AWS]]></category><category><![CDATA[KodeKloud]]></category><category><![CDATA[100DaysofCloud(AWS)]]></category><category><![CDATA[lambda]]></category><dc:creator><![CDATA[Zin Lin Htet]]></dc:creator><pubDate>Fri, 26 Dec 2025 17:00:00 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1767349228100/6e2a008d-b6d8-44bd-ad76-88aa69582d03.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Welcome from Day 34. Today we will learn how to create a lambda function using cli. In this lab you just need to create a Lambda function using cli not from AWS management console.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767341170780/eddca8aa-3178-4fcc-a52c-86c0fa76843b.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767341739207/32650d71-05aa-46e0-94c5-9284a0865c5d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767341805826/ca1ed6d9-3ff3-4516-a123-e94efa76f058.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767341890943/1a8e6de2-933e-479f-9627-7e9643e717dc.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767341976584/d3f42b39-af36-4dc7-b8e2-5164ad303d11.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767342049885/77b367e2-0456-44b9-919b-a35fc8b023a3.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767342076770/19d586ac-c10e-4e90-9452-009f49217eb2.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1767342092363/08d6ad2e-fc08-40bd-8046-063f162f58ef.png" alt class="image--center mx-auto" /></p>
<pre><code class="lang-bash">vi lambda_function.py

def lambda_handler(event, context):
    <span class="hljs-built_in">return</span> {
        <span class="hljs-string">"statusCode"</span>: 200,
        <span class="hljs-string">"body"</span>: <span class="hljs-string">"Welcome to KKE AWS Labs!"</span>
    }
</code></pre>
<pre><code class="lang-bash">zip function.zip lambda_function.py
</code></pre>
<pre><code class="lang-bash">aws iam get-role --role-name lambda_execution_role
</code></pre>
<pre><code class="lang-bash">aws lambda create-function --function-name xfusion-lambda-cli --runtime python3.9 --role arn:aws:iam::123456789012:role/lambda_execution_role --handler lambda_function.lambda_handler --zip-file fileb://function.zip
</code></pre>
<pre><code class="lang-bash">aws lambda invoke --function-name xfusion-lambda-cli response.json
</code></pre>
<p>Congratulations you did it. It looks good. This lab was successfully completed without any errors. See you in day 35. If you have any issues please let me know I will be happy to assist you. Stay tuned and learn together. If you find my article useful, please kindly like and share it.</p>
]]></content:encoded></item></channel></rss>