<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Gary R Byrd on Medium]]></title>
        <description><![CDATA[Stories by Gary R Byrd on Medium]]></description>
        <link>https://medium.com/@garyrbyrd?source=rss-01c9ddbcf0ab------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*nIAFcOAVe10f8mLeHsqwFw.jpeg</url>
            <title>Stories by Gary R Byrd on Medium</title>
            <link>https://medium.com/@garyrbyrd?source=rss-01c9ddbcf0ab------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 11:41:20 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@garyrbyrd/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[HumanGov: Proof of Concept (POC) on AWS Elastic Container Service (ECS) fronted By Application Load…]]></title>
            <link>https://garyrbyrd.medium.com/humangov-proof-of-concept-poc-on-aws-elastic-container-service-ecs-fronted-by-application-load-7aa93cf38e1f?source=rss-01c9ddbcf0ab------2</link>
            <guid isPermaLink="false">https://medium.com/p/7aa93cf38e1f</guid>
            <dc:creator><![CDATA[Gary R Byrd]]></dc:creator>
            <pubDate>Fri, 13 Feb 2026 20:49:38 GMT</pubDate>
            <atom:updated>2026-02-13T20:49:38.965Z</atom:updated>
            <content:encoded><![CDATA[<h3>HumanGov: Proof of Concept (POC) on AWS Elastic Container Service (ECS) fronted By Application Load Balancer (ALB) and Storing Docker Images on Elastic Container Registry (ECR)</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ttLFsj0bqhRfoAXq6QvBIg.png" /></figure><p><em>A hands‑on, end‑to‑end cloud engineering project demonstrating containerization, image delivery, infrastructure provisioning, and manual orchestration on AWS.</em></p><p><strong>Overview</strong></p><p>This project walks through the full lifecycle of deploying the HumanGov application using a modern, container‑based architecture. I implemented the solution in three phases:</p><ol><li><strong>Containerization &amp; Image Delivery</strong> — Packaging the Flask backend and NGINX reverse proxy into Docker images and publishing them to Amazon ECR.</li><li><strong>Infrastructure Provisioning with Terraform</strong> — Automating the creation of S3, DynamoDB, and an ECS cluster using clean, modular Terraform code.</li><li><strong>Manual Deployment on ECS Fargate</strong> — Creating task definitions, configuring networking, and deploying the application through an ECS service fronted by an Application Load Balancer.</li></ol><p>The goal was to demonstrate not only technical execution, but also the operational reasoning behind each step — why the architecture works, how the components interact, and how to keep the environment secure, reproducible, and cost‑controlled.</p><p><strong>Part 1 — Containerization &amp; Image Delivery (Docker + ECR)</strong></p><p><strong>Objective</strong></p><p>Prepare the HumanGov application for a cloud‑native runtime by packaging both the backend and the webserver into lightweight, production‑ready Docker images.</p><p><strong>1. Application Container (Flask + Gunicorn)</strong></p><p>I created a Dockerfile that builds a minimal Python 3.8 environment, installs dependencies, and runs the Flask app behind Gunicorn:</p><ul><li>Base image: python:3.8-slim-buster</li><li>Dependency installation via pip — no-cache-dir</li><li>Application served through Gunicorn on port 8000</li><li>Image tested locally before publishing</li></ul><p>This ensures a deterministic runtime and eliminates configuration drift between local and cloud environments.</p><p><strong>2. ECR Repository &amp; Image Push</strong></p><p>I created an ECR repository (humangov-app), authenticated the Docker client, and pushed the image. This step validates the full image lifecycle:</p><ul><li>Build</li><li>Tag</li><li>Authenticate</li><li>Push</li><li>Verify in ECR console</li></ul><p>Once the application image was published, I repeated the process for the NGINX reverse proxy.</p><p><strong>3. Webserver Container (NGINX Reverse Proxy)</strong></p><p>To front the Flask app, I built a second container using nginx:alpine:</p><ul><li>Removed default NGINX config</li><li>Added a custom nginx.conf and proxy_params</li><li>Configured reverse proxy to forward traffic to the backend on port 8000</li><li>Exposed port 80 for external access</li></ul><p>This separation of concerns mirrors real production patterns: application logic isolated from webserver responsibilities.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*8uod9u87ssIpGo2w35I5aw.png" /><figcaption>Registry images</figcaption></figure><p><strong>Part 2 — Infrastructure Provisioning (Terraform)</strong></p><p><strong>Objective</strong></p><p>Provision the foundational AWS resources required by the application using clean, modular Terraform code.</p><p><strong>1. Remote State &amp; Code Adjustments</strong></p><p>Since this deployment uses ECS Fargate instead of EC2, I removed EC2‑related resources from the module while preserving:</p><ul><li><strong>DynamoDB</strong> (PAY_PER_REQUEST)</li><li><strong>S3 bucket</strong> (randomized suffix for global uniqueness)</li></ul><p>This keeps the infrastructure minimal, cost‑efficient, and aligned with the container‑based architecture.</p><p><strong>2. Terraform Execution</strong></p><p>From the human-gov-infrastructure/terraform directory:</p><ul><li>terraform plan → 3 resources to add</li><li>terraform apply -auto-approve → S3 + DynamoDB successfully provisioned</li></ul><p>I captured the outputs for later use in ECS:</p><ul><li>AWS_DYNAMODB_TABLE</li><li>AWS_BUCKET</li><li>AWS_REGION</li><li>US_STATE</li></ul><p>These values become environment variables inside the application container.</p><p><strong>Part 3 — Manual Deployment on AWS ECS Fargate</strong></p><p><strong>Objective</strong></p><p>Deploy the full stack manually to highlight the operational complexity that automation (CI/CD, IaC) eventually removes.</p><p><strong>1. IAM Role for Task Execution</strong></p><p>I created a dedicated IAM role (HumanGovECSExecutionRole) granting:</p><ul><li>AmazonS3FullAccess</li><li>AmazonDynamoDBFullAccess</li><li>AmazonECSTaskExecutionRolePolicy</li></ul><p>This ensures the running containers can securely access required AWS services.</p><p><strong>2. ECS Cluster Creation</strong></p><p>I created an ECS cluster (humangov-cluster) using the console. Although the cluster uses Fargate (serverless), ECS still requires a logical cluster boundary for task scheduling.</p><p><strong>3. Task Definition (Full‑Stack)</strong></p><p>I built a task definition (humangov-fullstack) with two containers:</p><p><strong>Container 1 — Application</strong></p><ul><li>Image: humangov-app</li><li>Port: 8000</li><li>Essential: Yes</li><li>Environment variables: S3 bucket, DynamoDB table, region, state</li></ul><p><strong>Container 2 — NGINX</strong></p><ul><li>Image: humangov-nginx</li><li>Port: 80</li><li>Essential: No</li><li>Protocol: HTTP</li></ul><p>This creates a clean separation between backend logic and webserver routing.</p><p><strong>4. ECS Service + Load Balancer</strong></p><p>I deployed the task definition as a service (humangov-svc) with:</p><ul><li>Launch type: <strong>Fargate</strong></li><li>Desired count: <strong>2 tasks</strong> (HA)</li><li>Networking: Default VPC + default SG (port 80 allowed)</li><li>Load Balancer: <strong>Application Load Balancer</strong></li><li>Target group: humangov-tg</li></ul><p>The ALB routes traffic to the NGINX container, which forwards requests to the Flask backend.</p><p>Once the service stabilized, ECS automatically distributed tasks across multiple AZs for resilience.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6QfGOzmNeaPDutDdmVELDg.png" /></figure><p><strong>Validation</strong></p><p>I accessed the ALB DNS name and tested the application end‑to‑end:</p><ul><li>Submitted employee data</li><li>Uploaded a PDF</li><li>Verified S3 storage</li><li>Confirmed DynamoDB record creation</li></ul><p>The full workflow executed successfully across the containerized architecture.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AhTSYcGGpGyswADWCypkGg.png" /><figcaption>Website</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cSSLZJk5SKhUjw_h8ktvdQ.png" /><figcaption>Entering the employee into the database</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*h_Q2UKlJClN6sF30fdm_8g.png" /><figcaption>Created employee with link to credentials</figcaption></figure><p><strong>Cleanup</strong></p><p>To avoid unnecessary cost, I removed all resources:</p><ul><li>Deleted ECS service, task definition, and cluster</li><li>Deleted ECR repositories</li><li>Removed uploaded PDFs from S3</li><li>Ran terraform destroy to remove S3 + DynamoDB</li></ul><p>This returned the environment to a clean state.</p><p><strong>Key Takeaways</strong></p><p>This project demonstrates:</p><ul><li><strong>Containerization discipline</strong> (multi‑container architecture, reverse proxying, lightweight images)</li><li><strong>Cloud‑native deployment patterns</strong> using ECS Fargate</li><li><strong>Infrastructure automation</strong> with Terraform modules</li><li><strong>Secure IAM design</strong> for least‑privilege execution</li><li><strong>Operational awareness</strong> around cost, cleanup, and lifecycle management</li></ul><p>It’s a complete, production‑aligned workflow that mirrors how modern organizations deploy microservices and containerized workloads at scale.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VZV3MYi2JAbO2RgZCI9HZw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7aa93cf38e1f" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[HumanGov: Configuration and Deployment of HumanGov SaaS Application on AWS EC2 Inventory Across US…]]></title>
            <link>https://garyrbyrd.medium.com/humangov-configuration-and-deployment-of-humangov-saas-application-on-aws-ec2-inventory-across-us-2fbfdcb5e1c6?source=rss-01c9ddbcf0ab------2</link>
            <guid isPermaLink="false">https://medium.com/p/2fbfdcb5e1c6</guid>
            <dc:creator><![CDATA[Gary R Byrd]]></dc:creator>
            <pubDate>Sun, 01 Feb 2026 01:42:39 GMT</pubDate>
            <atom:updated>2026-02-01T01:42:39.780Z</atom:updated>
            <content:encoded><![CDATA[<h3><strong>HumanGov: Configuration and Deployment of HumanGov SaaS Application on AWS EC2 Inventory Across US States Using Ansible Securely Storing Configuration Files on Github</strong></h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Is9-ZaNdJsB1EfY_R6B-_g.png" /></figure><p><strong>🧱 Part 1 — Provisioning the Foundation with Terraform</strong></p><p>I started by validating and extending the recently created Terraform module to support everything the HumanGov application needed:</p><ul><li>IAM Role + Instance Profile for EC2</li><li>S3 bucket and DynamoDB table with dynamic naming</li><li>Security groups for SSH, HTTP, and app traffic</li><li>A validated Ubuntu AMI</li><li>Provisioners that automatically update Ansible’s inventory</li></ul><p>This phase reinforced why I rely on IaC: one plan, one apply, and the entire environment stands up identically every time. No drift, no guesswork.</p><p><strong>💡 Why I Hosted the Project on GitHub</strong></p><p>I HOSTED the entire HumanGov deployment in a public GitHub repository. This allowed me to treat the project like a real engineering deliverable — versioned, reviewable, and easy for others to clone and reproduce. It also gave recruiters and hiring managers a transparent view into my Terraform modules, Ansible roles, and the overall structure of the deployment.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CpMTv9sMjdV7gxJRHV6MMQ.jpeg" /><figcaption>The repository</figcaption></figure><p><strong>🤖 Part 2 — Automating Deployment with Ansible</strong></p><p>With Terraform handling provisioning, Ansible took over configuration and application deployment. I built a complete Ansible role with:</p><ul><li>Tasks for package installation, directory creation, and virtual environment setup</li><li>Handlers for restarting Nginx and Gunicorn</li><li>Jinja templates for the systemd service and Nginx proxy</li><li>Defaults and variables for clean parameterization</li></ul><p>Running the playbook transformed a raw set of four EC2 instances into fully configured HumanGov environments — consistently, repeatably, and in a fraction of the time.</p><p>Designed to be a national project, a new instance could be added for any state by adding the state’s name to the Terraform module.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*80LXvRBc9X5qxpnPgFooYA.jpeg" /><figcaption>The provisioned VMs, by state</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*2plO2iq84jFgOKdbzZn-Yg.jpeg" /><figcaption>The running application</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/940/1*DbSm1BBX-aj3fEvu7iFiPA.jpeg" /><figcaption>Cleaning up (terraform destroy) afterwards</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Xyimd0nH9YUtpzCBrOK_9A.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2fbfdcb5e1c6" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[ Deploying AI on a Budget: My Lightsail + DeepSeek Project]]></title>
            <link>https://garyrbyrd.medium.com/deploying-ai-on-a-budget-my-lightsail-deepseek-project-4fd96f2baa4e?source=rss-01c9ddbcf0ab------2</link>
            <guid isPermaLink="false">https://medium.com/p/4fd96f2baa4e</guid>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[deepseek-v3]]></category>
            <category><![CDATA[aws-lightsail]]></category>
            <category><![CDATA[generative-ai-tools]]></category>
            <category><![CDATA[generative-ai-use-cases]]></category>
            <dc:creator><![CDATA[Gary R Byrd]]></dc:creator>
            <pubDate>Sun, 03 Aug 2025 12:10:11 GMT</pubDate>
            <atom:updated>2025-08-03T12:49:59.407Z</atom:updated>
            <content:encoded><![CDATA[<h3>🚀 Why I Built It</h3><p>As someone passionate about cloud engineering, automation, and incoming AI strategy, I wanted to explore how large language models (LLMs) could be deployed affordably — without enterprise infrastructure or massive budgets. So, I built a public-facing AI app using:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*_h_7ddpXm5HIP3Gw.png" /><figcaption>Infographic visualizes the end-to-end architecture of the CloudMart AI deployment</figcaption></figure><p>This project helped me sharpen my skills in container orchestration, API integration, and cost modeling — while creating a live demo I could share with recruiters and hiring managers. You can see it in action:</p><h4><a href="https://garyscloudmart.gbnetassure.com/">https://garyscloudmart.gbnetassure.com</a></h4><h3>🛠️ Technical Setup</h3><h4>1. AWS Lightsail Container</h4><ul><li><strong>Specs</strong>: 1 GB RAM, 0.25 vCPU</li><li><strong>Cost</strong>: $7/month (90-day free trial!)</li><li><strong>Deployment</strong>: Docker container running a lightweight frontend that calls OpenRouter’s API</li></ul><h4>2. OpenRouter API (OpenRouter.ai)</h4><ul><li><strong>Model</strong>: Initially launched with <strong>DeepSeek-V3 Free </strong>but was upgraded to <strong>Standard version</strong> after noticing inconsistent performance even with light usage.</li><li><strong>As for the Upgrade:</strong></li><li>Faster response times</li><li>More reliable output</li><li>Better user experience for recruiters and hiring managers</li></ul><h4>3. Custom Domain</h4><ul><li>Configured via an external DNS provider (Azure DNS) and used AWS’s own generated SSL/TLS certificates. Required modest effort for proof of domain ownership to complete.</li><li>Public endpoint: garyscloudmart.gbnetassure.com</li></ul><h3>💰 Cost Analysis</h3><figure><img alt="Infographic outlines a cost-efficient AI chatbot deployment on AWS Lightsail with OpenRouter’s DeepSeek-V3." src="https://cdn-images-1.medium.com/max/666/1*q1Ft54RPxnErc9Ld3CVvJQ.png" /><figcaption>Infographic outlines a cost-efficient AI chatbot deployment on AWS Lightsail with OpenRouter’s DeepSeek-V3</figcaption></figure><h3>🔑 Key Highlights of the Project:</h3><ul><li><strong>LLMs can be deployed affordably</strong> with the right architecture and token strategy.</li><li><strong>OpenRouter’s flexible tiers</strong> make it easy to scale from free experimentation to reliable public demos.</li><li><strong>Lightsail’s simplicity</strong> is perfect for quick deployments and public showcases.</li><li><strong>DeepSeek-V3 Standard</strong> offers strong performance in reasoning, coding, and multilingual tasks — ideal for showcasing AI capabilities.</li></ul><h3>🎯 What’s Next</h3><p>I’m exploring:</p><ul><li>Adding analytics to track usage and engagement</li><li>Writing scenario-based prompts to demonstrate real-world applications (e.g. resume rewriting, SQL generation, cybersecurity Q&amp;A)</li><li>Comparing performance across models like Claude 3, Gemini Pro, and GPT-4</li></ul><h3>🤝 Let’s Connect</h3><p>If you’re hiring for roles in cloud engineering, automation, or AI strategy — or just curious about deploying LLMs in lean environments — I’d love to chat.</p><p>Feel free to try the app, share feedback, or reach out directly!</p><p>#AWS #GenerativeAI #CloudComputing #PortfolioProject #TechInnovation #Ecommerce</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4fd96f2baa4e" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Migration of a Workload running in a Corporate Data Center to AWS using the Amazon EC2 and RDS…]]></title>
            <link>https://garyrbyrd.medium.com/migration-of-a-workload-running-in-a-corporate-data-center-to-aws-using-the-amazon-ec2-and-rds-057d6cb17cef?source=rss-01c9ddbcf0ab------2</link>
            <guid isPermaLink="false">https://medium.com/p/057d6cb17cef</guid>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[oracle-cloud]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[microsoft-azure]]></category>
            <dc:creator><![CDATA[Gary R Byrd]]></dc:creator>
            <pubDate>Thu, 27 Mar 2025 19:14:06 GMT</pubDate>
            <atom:updated>2025-03-29T13:26:25.813Z</atom:updated>
            <content:encoded><![CDATA[<h3>Migration of a Workload running in a Corporate Data Center to AWS using the Amazon EC2 and RDS service</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*CA4OHj0z-dmEAN76Hozebg.png" /></figure><h3>In another project based in a real-world scenario, I acted as the Cloud Specialist responsible for migrating a workload running in a Corporate DataCenter to AWS.</h3><h3>The application and database were migrated to AWS using the Lift &amp; Shift (rehost) model, moving both application and database data.</h3><h3>I followed some migration steps: Planning (sizing, prerequisites, resource naming), Execution (resource provisioning, best practices), Go-live (validation test — Dry-run, final migration — Cutover) and Post Go-live (ensure the operation of the application and user access).</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*rP94ntVqFyyLrjd8513YOw.png" /><figcaption>On-Prem original (Left) — Amazon Cloud plan (Right)</figcaption></figure><p>After drawing up the plan to do the lift and shift the VPC was created and an EC2 VM was built for the application to reside on:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*KKFimledZZBS44D4EBYkvQ.png" /><figcaption>VPC subnets</figcaption></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*3wd0XhFlEJOvENov1OYC5w.png" /><figcaption>EC2 Instance for the application, attached to the public subnet</figcaption></figure><p>A MySQL database was provisioned in Amazon’s RDS service, and attached to our new VPC:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*1YBCAMYuDEgXWD8MQe_INQ.png" /></figure><p>After this I needed to download some app dependencies and the backup to the MySQL database but could not connect at first. An Internet Gateway was needed:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*szT-ZSyjriSjTQ3o0uwLqw.png" /><figcaption>Added the IGW (Internet Gateway) and provided routing</figcaption></figure><p>Now that the downloads were completed, installed the application dependencies on the Ubuntu app server:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*pYZnu8v85dk9LYH5cQj45A.png" /></figure><p>Getting close now, attaching to the database:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/972/1*B5gqzfXsfCMJ4RFPnPZKFA.png" /></figure><p>I failed to get screenshots of creating and restoring the database and installing the app. I hope you’ll forgive! The final result was this website, and you can see I was able to insert an article at the end:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*daaWu7tPE2Mxes4U8mTK-g.png" /></figure><p>Thank you for checking out my project, if you have any comments or questions, please add them!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*A-boeprCGJdNjE0XeQjXJw.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=057d6cb17cef" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Automated user migration and management of AWS Identity and Access Management (IAM) resources]]></title>
            <link>https://garyrbyrd.medium.com/automated-user-migration-and-management-of-aws-identity-and-access-management-iam-resources-71be9f661164?source=rss-01c9ddbcf0ab------2</link>
            <guid isPermaLink="false">https://medium.com/p/71be9f661164</guid>
            <category><![CDATA[oracle-cloud]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[azure]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[google-cloud-platform]]></category>
            <dc:creator><![CDATA[Gary R Byrd]]></dc:creator>
            <pubDate>Wed, 19 Mar 2025 18:21:28 GMT</pubDate>
            <atom:updated>2025-03-29T13:24:58.435Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jdK6qaygPGSPH-ajQu82ow.png" /></figure><p>In this project based on a real-world scenario, I acted as a Cloud Specialist with the mission to migrate users in an automated way and manage AWS IAM (Identity and Access Management) resources.</p><p>There were 100 users that needed to be migrated and have MFA (Multi-factor authentication) enabled on their accounts, as this is a security best practice. They also needed to be added to groups to ensure their permissions.</p><p>To avoid repetitive and manual tasks in the AWS console, I needed to think about automating the processes.</p><p>Using GitBash with AWS CLI and Shell Script, I added 5 users to the IAM interface as a POC of the process:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/320/1*HIJvX7Pnb-5a-CJMTy_Iig.png" /></figure><p>And here is the result:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YndDO9Gx3v8bm9IfzoGNdg.png" /></figure><p>Thank you for taking a look at this project! If you have any comments or questions, please add them!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*AE_ZAX_PBZlbp9eByk9L8g.png" /></figure><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=71be9f661164" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>