<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: neetu-mallan</title>
    <description>The latest articles on DEV Community by neetu-mallan (@neetumallan).</description>
    <link>https://dev.to/neetumallan</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F808362%2F7e491ae5-bf0e-4189-bc8d-3829ebdd49bf.jpg</url>
      <title>DEV Community: neetu-mallan</title>
      <link>https://dev.to/neetumallan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/neetumallan"/>
    <language>en</language>
    <item>
      <title>License to Build: Crafting Games with Amazon Q CLI</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Sun, 08 Jun 2025 15:33:52 +0000</pubDate>
      <link>https://dev.to/neetumallan/license-to-build-crafting-games-with-amazon-q-cli-1j8l</link>
      <guid>https://dev.to/neetumallan/license-to-build-crafting-games-with-amazon-q-cli-1j8l</guid>
      <description>&lt;p&gt;It’s hard to find someone who hasn’t seen—or played—the iconic Chrome Dino game. You know the one: that pixelated little T. rex that appears when your internet vanishes, sprinting endlessly across a desert landscape, dodging cacti and flying pterodactyls. Simple, nostalgic, and strangely addictive.&lt;/p&gt;

&lt;p&gt;So when the AWS Community Builders were invited to join a hands-on learning experience—“Build Games with Amazon Q CLI”—I knew exactly what I wanted to do. Among classics like Snakes and Ladders and Tic-Tac-Toe, I set out to recreate the beloved Chrome Dino.&lt;/p&gt;

&lt;p&gt;What amazed me most wasn’t just that I could recreate these games—it was how I could do it. Amazon Q CLI took in straightforward prompts and returned fully functional games, complete with visuals, special effects, animations, sound—the works. And the best part? I didn’t have to write a single line of code.&lt;/p&gt;

&lt;p&gt;Much like a seasoned developer, Amazon Q builds in phases—laying the groundwork first, then layering enhancements one step at a time. Watching it evolve a simple prompt into an interactive game felt a little like magic.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Setting Amazon Q CLI:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This document provides the necessary steps to install Amazon Q CLI on   the system. &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Once the CLI is installed, verify the setup using the following command.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitp8naa8roafqte68u3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitp8naa8roafqte68u3g.png" alt="Image description" width="800" height="253"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;&lt;strong&gt;Time to get working&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;Just like 007 counts on Q—his brilliant tech whiz—to gear him up for each mission, I had my own digital sidekick: Amazon Q CLI. The moment I gave the word, Q jumped into action, smoothly installing the Pygame library.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqqjk5hn02j5ff5jdd3z.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhqqjk5hn02j5ff5jdd3z.png" alt="Image description" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q create a dinosaur game similar to the Chrome Dino game. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujg67amyczi75ea1r1lp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujg67amyczi75ea1r1lp.png" alt="Image description" width="800" height="61"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As with any good mission, Q started with the basics—a foundational version of the game. It was simple, functional, and just enough to get things rolling. Like handing over a standard-issue gadget before revealing its hidden features.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66p2omxfgyqpz6hfx9y0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66p2omxfgyqpz6hfx9y0.png" alt="Image description" width="800" height="634"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhve4klby8f3lj7fl728b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhve4klby8f3lj7fl728b.png" alt="Image description" width="800" height="463"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Initial game snapshot:&lt;/u&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgfd4hbtu17r3gxdqi2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgfd4hbtu17r3gxdqi2x.png" alt="Image description" width="800" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Enhancements:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Q upgrade the plain dino into a proper pixelated T. rex—true to the original classic. As always, Q responded with precision, swapping out the basic form for a retro-styled reptile that looked ready to take on any mission the game could throw at it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyas1v18zveoyren4c08w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyas1v18zveoyren4c08w.png" alt="Image description" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;While testing the game, I noticed a curious glitch—each time my Dino successfully dodged an obstacle, everything would suddenly reset, almost like the game forgot it had just happened. It broke the flow of the run and felt a little jarring.&lt;/p&gt;

&lt;p&gt;So, I shared this experience with Q, hoping it could help smooth things out. It analyzed the problem, adjusted the logic, and patched things up. Mission back on track.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyl5kt4v39vs6e2f8o4y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbyl5kt4v39vs6e2f8o4y.png" alt="Image description" width="800" height="402"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sound effects:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Q add some sound effects&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0pbd9fjkatjhla6erf3b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0pbd9fjkatjhla6erf3b.png" alt="Image description" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffofp6rctxdmn82z1p095.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffofp6rctxdmn82z1p095.png" alt="Image description" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sntfa2zccjuv9n675y2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4sntfa2zccjuv9n675y2.png" alt="Image description" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And when I requested a space-themed twist on the classic desert run, Q didn’t just follow instructions—it improvised. The background transformed into a galactic expanse, the cacti morphed into sleek spaceships, and the birds into drifting asteroids. It was like asking for a pen and getting a laser-equipped grappling hook instead.&lt;/p&gt;

&lt;p&gt;Q explain me the features of the game:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80e4xdyl151gkdquflx4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F80e4xdyl151gkdquflx4.png" alt="Image description" width="800" height="284"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz5kxay11ow0xxgtmud7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhz5kxay11ow0xxgtmud7.png" alt="Image description" width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Q increase the difficulty over time by introducing multiple obstacles as the game progresses and increase the speed of the obstacles. Q understood the assignment—escalating the challenge with precision.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8hvfwwrqsi6ptjtscn34.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8hvfwwrqsi6ptjtscn34.png" alt="Image description" width="800" height="133"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Final Game Video&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExbXg2MDZ3cmZkZWJvN2sydjUzdGdyZHFjc2kzM29neDZncnQ5dGttMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FVwGcuWEt2OztQvTTwr%2Fgiphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmedia4.giphy.com%2Fmedia%2Fv1.Y2lkPTc5MGI3NjExbXg2MDZ3cmZkZWJvN2sydjUzdGdyZHFjc2kzM29neDZncnQ5dGttMSZlcD12MV9pbnRlcm5hbF9naWZfYnlfaWQmY3Q9Zw%2FVwGcuWEt2OztQvTTwr%2Fgiphy.gif" width="480" height="256"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Amazon Q didn’t just help me build a game—it equipped me for it. Every prompt I gave felt like issuing an order , and every response was packed with precision, creativity, and flair. No code. No delays. Just results.&lt;/p&gt;

&lt;p&gt;In this mission, I wasn’t the agent in distress—I was the one in command. And Amazon Q? It was my very own Quartermaster.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>python</category>
      <category>ai</category>
      <category>awschallenge</category>
    </item>
    <item>
      <title>JAWS Pankration 2024 - A speaker's perspective</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Thu, 29 Aug 2024 05:29:46 +0000</pubDate>
      <link>https://dev.to/neetumallan/jaws-pankration-2024-a-speakers-perspective-3fj</link>
      <guid>https://dev.to/neetumallan/jaws-pankration-2024-a-speakers-perspective-3fj</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Introduction&lt;/em&gt;:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Back in 2022 at the AWS Community event in Bangkok, when I first heard Hidetoshi San and Shun San present their talk about Jaws Pankration event held in 2021, I knew I had to be part of this incredible event. &lt;br&gt;
Here’s a detailed account of my experience and the impressive organization behind JAWS Pankration 2024.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is JAWS Pankration?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's a 24-hour virtual event hosted by the Japan AWS User Group  in a follow-the-sun format. It features AWS enthusiasts and experts from around the world sharing knowledge and best practices.&lt;br&gt;
This year the event was conducted from 24th Aug,2024 3:00 AM (GMT) to 25th Aug, 2024 3:00 AM(GMT).&lt;/p&gt;

&lt;p&gt;Event Page: &lt;a href="https://jawspankration2024.jaws-ug.jp/en/" rel="noopener noreferrer"&gt;https://jawspankration2024.jaws-ug.jp/en/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Submission and Selection&lt;/em&gt;:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The Call for Papers (CFP) was announced in late May, with a submission deadline of June 30. I submitted two topics and was thrilled to receive notification by July 10 that my session, "Cloudy with a Chance of Precision: Deploying Scalable Weather Forecasting Apps on AWS EKS," was selected.&lt;/p&gt;

&lt;p&gt;This year the committee had received 146 submissions in response to the CFP for almost 70 available session slots. In the final list of sessions there were speakers from 25 countries, some even giving sessions in their native language.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1cng5h2a3tb0renex2xp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1cng5h2a3tb0renex2xp.png" alt="Image description" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The complete time table was posted on the Pankration website by 12th Jul, 2024:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://jawspankration2024.jaws-ug.jp/en/timetable/" rel="noopener noreferrer"&gt;https://jawspankration2024.jaws-ug.jp/en/timetable/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Preparation and Communication&lt;/em&gt;:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Slack Channel: Upon selection, I joined the event’s Slack channel for communication with the committee.&lt;/p&gt;

&lt;p&gt;Swag Coordination: The team efficiently handled swag distribution, overcoming international shipping challenges and ensuring timely delivery. The swag included a Prairie card—a digital business card for easy networking.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea4we9ws9bl0gw3r43jn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea4we9ws9bl0gw3r43jn.png" alt="Image description" width="800" height="812"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The team published news articles for important announcements, one such about the use of Prairie card is available here:  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://jawspankration2024.jaws-ug.jp/en/news/la8ky_-d2yp/" rel="noopener noreferrer"&gt;https://jawspankration2024.jaws-ug.jp/en/news/la8ky_-d2yp/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Promotion: The committee provided promotional materials and a speaker map created using AWS Location services.&lt;/p&gt;

&lt;p&gt;Speaker Map: &lt;a href="https://speakermap.jawspankration2024.jaws-ug.jp/" rel="noopener noreferrer"&gt;https://speakermap.jawspankration2024.jaws-ug.jp/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The commitment and the technological innovation shown in planning and execution of each stage of this event was phenomenal. &lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Technical and Logistical Details&lt;/em&gt;:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Translation Environment: This year, the team built a solution utilizing AWS IVS and Translate services for real-time translation and distribution. A demo site helped us practice before the event.&lt;/p&gt;

&lt;p&gt;All speakers were supplied with instructions for connecting to the final streaming env and a do's and don'ts list. &lt;/p&gt;

&lt;p&gt;Translation Architecture published by Jaws Team:&lt;br&gt;
&lt;a href="https://jawspankration2024.jaws-ug.jp/en/news/7__wsyicbqsy/" rel="noopener noreferrer"&gt;https://jawspankration2024.jaws-ug.jp/en/news/7__wsyicbqsy/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzjz5dkh9nxhwdjo5huu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbzjz5dkh9nxhwdjo5huu.png" alt="Image description" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An awesome 30 second video was created by the team to be played just before the speaker introduction and after the presentation was completed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://x.com/jawsdays/status/1826598303662023076" rel="noopener noreferrer"&gt;https://x.com/jawsdays/status/1826598303662023076&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Final Preparations: We were required to complete our sessions within 15 minutes and allowed 5 minutes for Q&amp;amp;A. I prepared my presentation, ensuring all AWS resources(ECR,EKS,ALB) were correctly set up and running&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Event Day&lt;/em&gt;:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Pre-Talk: On August 24, 2024, my talk was scheduled for 2:30 PM IST. The event started at 8:00 AM IST. I joined the Speaker waiting room via Voice Ping at 2:00 PM IST, where I was welcomed by Ai Hayakawa San speaking in Japanese, at my end I could see the Japanese text being translated real time into English.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1c8jmyjpdyj0l6jaiwev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1c8jmyjpdyj0l6jaiwev.png" alt="Image description" width="800" height="497"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Live Session: On logging into the Zoom, Masanori San welcomed me and after few system checks, friendly conversation &amp;amp; a countdown, I delivered my presentation within the stipulated time. The meticulous planning by the team made the session delivery a breeze.&lt;/p&gt;

&lt;p&gt;Post-Talk: For answering any Q&amp;amp;A , I re-joined the "Ask The Speaker" room in Voice Ping where I could experience the real time translation magic again while catching up with Shun San! &lt;/p&gt;

&lt;p&gt;The entire event broadcast allowed subtitles in viewer's preferred language.&lt;/p&gt;

&lt;p&gt;On the same day, an accurate summary of my talk was published by the Pankration team powered by Amazon Bedrock.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4t1k5pq4xloltmqgfhil.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4t1k5pq4xloltmqgfhil.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;&lt;em&gt;Conclusion&lt;/em&gt;:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The dedication and innovation shown by the JAWS Pankration team were remarkable. The event’s execution and the support provided to speakers exemplify excellent organisation. I’m grateful for the opportunity to participate and contribute to this fantastic global event.&lt;/p&gt;

&lt;p&gt;In the subsequent blog posts, I would be documenting technical details behind the preparation for my talk on the event day. So stay tuned!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>containers</category>
      <category>jawspankration</category>
    </item>
    <item>
      <title>Resetting RDS retention period using Step Functions &amp; Lambda</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Mon, 24 Apr 2023 02:52:38 +0000</pubDate>
      <link>https://dev.to/aws-builders/resetting-rds-retention-period-using-step-functions-lambda-45g3</link>
      <guid>https://dev.to/aws-builders/resetting-rds-retention-period-using-step-functions-lambda-45g3</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Retention Period?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Retention Period on RDS Instances decides how long automated backups have to be stored. &lt;br&gt;
While creating a DB instance, by default the automated backup frequency is set to 7 days, it means a backup of the instance is stored till 7 days. &lt;br&gt;
In our case, lot of times folks who created the instance forgot to reset this in case the backups weren't needed.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2f6zsj4necf8crn55ej5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2f6zsj4necf8crn55ej5.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The retention period can be set to 0 in which case no backups will be taken for the DB instance especially in Dev envs where we had no need to store backups of databases.&lt;/p&gt;

&lt;p&gt;When we took the clean up task every week manually, we saw that the process to set this retention period to 0 was tedious as we had to wait for the instance to start in case it was in stopped state then modify it, wait for the modification to complete &amp;amp; then stop the instance.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsh11uxoxl14hv34ch5n.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsh11uxoxl14hv34ch5n.jpg" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Repeat this over for a lot of instances &amp;amp; you could easily spend half a day doing this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/10fxZavhBFXsUE/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/10fxZavhBFXsUE/giphy.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To automate this, I thought of going with a Serverless solution comprising of Step Functions, Lambda &amp;amp; Eventbridge scheduler. &lt;/p&gt;

&lt;p&gt;Prerequisites:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Role for the step Functions to invoke the said Lambda functions &amp;amp; to perform start, stop &amp;amp; modify actions on the RDS instances&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F244460qnea5w92vur6fm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F244460qnea5w92vur6fm.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;IAM Role for Lambda functions to allow sending callback response to Step Functions(sendTaskSuccess &amp;amp; sendTaskFailure)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiiq63suz8eswm6r1whb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpiiq63suz8eswm6r1whb.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Step Functions has the foll. states-&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Lambda Invocation&lt;/li&gt;
&lt;li&gt;Map state&lt;/li&gt;
&lt;li&gt;A Choice State.&lt;/li&gt;
&lt;li&gt;Workflow 1 when the DB is in stopped state&lt;/li&gt;
&lt;li&gt;Workflow 2 when the DB is in starting/rebooting/backing-up state.&lt;/li&gt;
&lt;li&gt;Workflow 3 when the DB is in available state.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qizd02ze92xcrh9p4zp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0qizd02ze92xcrh9p4zp.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets go over each state using a short demo:&lt;/p&gt;

&lt;p&gt;1.&lt;strong&gt;Lambda Invocation&lt;/strong&gt; : [AWS SDK Integrations]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/cFdhVBGIoIs" rel="noopener noreferrer"&gt;Lambda Invocation State&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;2.&lt;strong&gt;Map &amp;amp; Choice states&lt;/strong&gt; :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/CYJEDXk2aM0" rel="noopener noreferrer"&gt;Map &amp;amp; Choice States&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.&lt;strong&gt;&lt;em&gt;DB is in Stopped State:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/KMVUbyoGiW4" rel="noopener noreferrer"&gt;Workflow 1 Explanation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the Lambda function we discussed in the demo, the SDK waiter API is implemented for the instance as shown in the below code snippet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqy6qq49hca0iqz55pik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpqy6qq49hca0iqz55pik.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the same function to perform the modify action I had to introduce a lag of a few seconds before  calling the waiter API, this is because after firing the modify_DB_instance SDK call, the operation is started after a lag of few seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsrww8lvorfyhw3ym6ic.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbsrww8lvorfyhw3ym6ic.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: If the lag is not introduced, as the DB is in available state, the waiter call will be skipped and the token  returned thus moving to the next state without applying the modification.&lt;/p&gt;

&lt;p&gt;Lets see how the execution flow works for a single  DB instance in Stopped state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/isJWc1rZcdY" rel="noopener noreferrer"&gt;Demo: Step Function execution for Instance in Stopped state&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2l3nd7estp0zrqkmzhw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fr2l3nd7estp0zrqkmzhw.png" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The entire execution for the single instance takes around 14 minutes.&lt;/p&gt;

&lt;p&gt;4.&lt;strong&gt;&lt;em&gt;DB is in starting/rebooting states:&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/hA9DiDMkXgw" rel="noopener noreferrer"&gt;Workflow 2 Explanation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's see how the execution flow works for a single  DB instance in Rebooting state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/fLH2MwxELIo" rel="noopener noreferrer"&gt;Demo for Instance in Rebooting State&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The entire execution for the single instance takes almost 5 minutes.&lt;/p&gt;

&lt;p&gt;5.&lt;strong&gt;&lt;em&gt;DB is in Available State:&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/s8mHyphtjp8" rel="noopener noreferrer"&gt;Workflow 3 Explanation&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets see how the execution flow works for a single  DB instance in Available state.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/YWLHRyx1I7E" rel="noopener noreferrer"&gt;Demo: Step Function execution for Instance in Available state&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The entire execution for the single instance takes almost 3 seconds.&lt;/p&gt;

&lt;p&gt;We can introduce a Eventbridge schedule to execute this step function twice a week or once a month to automate the process further.&lt;/p&gt;

&lt;p&gt;I have shown a single use case of setting RDS Retention Period to 0 using Step Functions but this can be adopted for other use-cases too where we need to perform a bulk-modify action on RDS instances.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;What did I learn from this exercise?&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
 Callback pattern are a powerful feature of Step Functions. I had spent some time adding wait states after calling the start/modify SDK API call but quickly realised that this time could not be predicted as it varied based on the DB engines. Thats when callback pattern came to my rescue&lt;/p&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/bHSkKRvkRvy5chUBBp/giphy-downsized-large.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/bHSkKRvkRvy5chUBBp/giphy-downsized-large.gif" alt="Image description"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Please find the code in my github repo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/neetu-mallan/retentionperiodreset" rel="noopener noreferrer"&gt;https://github.com/neetu-mallan/retentionperiodreset&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;What Resources did I use?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;To learn &amp;amp; understand the step functions I have gone through the AWS documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/step-functions/latest/dg/welcome.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=jXxKRd_9nC0" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=jXxKRd_9nC0&lt;/a&gt; -- this Step Functions Crash course by Manoj Fernando really helped me in understanding how step functions help in practical use cases.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The below 2 links helped me understand the callback pattern implementation:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/step-functions/latest/dg/callback-task-sample-sqs.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/step-functions/latest/dg/callback-task-sample-sqs.html&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/step-functions/latest/dg/connect-to-resource.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>stepfunctions</category>
      <category>lambda</category>
    </item>
    <item>
      <title>Chronicles of a First Time AWS Women In Tech Event Speaker</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Mon, 12 Sep 2022 08:25:57 +0000</pubDate>
      <link>https://dev.to/neetumallan/chronicles-of-a-first-time-aws-women-in-tech-event-speaker-2ap1</link>
      <guid>https://dev.to/neetumallan/chronicles-of-a-first-time-aws-women-in-tech-event-speaker-2ap1</guid>
      <description>&lt;p&gt;&lt;em&gt;&lt;strong&gt;"If you can speak , you can influence. If you can influence you can change lives" - Anonymous&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In early July, when I received the email from Ridhima Kapoor inviting me to speak at the AWS Women in Tech Day Event 2022, I was genuinely surprised as I did not feel I had done anything worthy of getting this opportunity (my impostor syndrome kicking in). I was also humbled by the kind of support that the AWS Community lends its members. I grabbed the opportunity with both my hands &amp;amp; sent back a positive reply to Ridhima.&lt;/p&gt;

&lt;p&gt;Other than the fact that it was my first in-person event, it was also the first time I was stepping out of my house for a meetup post the pandemic.&lt;/p&gt;

&lt;p&gt;The content that's going to follow is basically a set of steps I adhered to upto the Event Day.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0yQxXa6H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zifbr4jd1bxd45gfqvae.PNG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0yQxXa6H--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zifbr4jd1bxd45gfqvae.PNG" alt="Image description" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  TABLE OF CONTENTS:
&lt;/h2&gt;

&lt;p&gt;1.Getting over the initial nerves&lt;br&gt;
  2.Selection of topic&lt;br&gt;
  3.Presentation Deck Prep&lt;br&gt;
  4.Presentation Prep&lt;br&gt;
  5.Facing your doubts&lt;br&gt;
  6.The main event&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting over the nerves prep &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/hrk1vT9WDNSAMZydLf/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/hrk1vT9WDNSAMZydLf/giphy.gif" width="480" height="270"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;To get over the initial jitters of "Where to start from" I decided to go over AWS Machine Learning Hero Brooke Jamieson's video which I had come across few months ago. It's a humorous take where Brooke describes her own experiences when she started as a speaker in Tech conferences. I must have gone over it 4–5 times.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;She provides references to some common problems which though seem mundane while watching, you see the relevance when preparing the content such as selection of font size, presentation template , colour palette, speaker bio etc.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Video Link : &lt;a href="https://www.youtube.com/watch?v=u5ub-KP_2N4"&gt;How to be a Tech Conf Speaker&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I was working with a Keynote presentation, I also checked out a few beginner to advanced videos on animations on Keynote&lt;/p&gt;

&lt;p&gt;Video Link: &lt;a href="https://youtu.be/tphW6ajNjCI"&gt;Beginners Tutorial for Keynote&lt;/a&gt; , &lt;br&gt;
&lt;a href="https://youtu.be/g0xjxYV4B_I"&gt;Intermediate Tutorial for Keynote&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I did not go over the tech conference videos by other speakers as I was worried it could influence me to emulate the speaker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Selection of topic &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Selecting the topic of your talk is crucial. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You should be both comfortable &amp;amp; confident with the content. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also pay attention to who will be the audience &amp;amp; whether you need to deliver for a beginner, intermediate or expert level.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be sure to select something which interests you. I had selected "Fundamentals of Data Encryption" as Security in AWS was something I was interested in.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Presentation Deck Prep &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--6BjplnOr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/94iS62lx8CRQA/giphy.gif%3Fcid%3Decf05e476fyf52w58q53o0kl52wovtrwpizxozwa7crllsi0%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--6BjplnOr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/94iS62lx8CRQA/giphy.gif%3Fcid%3Decf05e476fyf52w58q53o0kl52wovtrwpizxozwa7crllsi0%26rid%3Dgiphy.gif%26ct%3Dg" width="500" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Start working on your deck at least 2 weeks before the event. So you have enough time to rehearse &amp;amp; make changes to the content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check whether you will be getting a pre designed template for your talk. I had received a pre defined one from the organising team even though I had spent some time on choosing the slide deck of my own prior to it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Else you might have to decide on the slide colour &amp;amp; design.If that's sorted, you can move on to font selection, look &amp;amp; feel of your content.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Ensure the header, sub header sections are differentiated in font. Also, that the font is big enough for even the back benchers in the room to view.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Avoid clutter in the deck.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I usually prefer less theory on the slide &amp;amp; more of pictures or animation that helps audience understand better.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decide on how much content you want to fit into each slide &amp;amp; the number of slides you want to put in.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Think from the perspective of the audience, what would they like to see for the subject of your choosing&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get your deck reviewed by peers or your mentors, I had received some useful feedback for my slides.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;One such feedback was that the slides should be self explanatory so I had to include labels over arrows &amp;amp; pictures where needed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Remove content if it cannot be correlated with the topic.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Presentation Prep &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--yxJ2EY7V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/qhXjYSKbT3dug/giphy.gif%3Fcid%3Decf05e4709dcxbagiph0eso4x1ady4enzfz2hatftmn8ta3e%26rid%3Dgiphy.gif%26ct%3Dg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--yxJ2EY7V--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_800/https://media.giphy.com/media/qhXjYSKbT3dug/giphy.gif%3Fcid%3Decf05e4709dcxbagiph0eso4x1ady4enzfz2hatftmn8ta3e%26rid%3Dgiphy.gif%26ct%3Dg" width="268" height="151"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;If you are a first time speaker &amp;amp; low on confidence, prepare your speech, write it down on a paper, don't mug it up, if you understand the content you won't have to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rehearse in an empty room or before the mirror &amp;amp; finally with a friend. Get feedback &amp;amp; apply it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;No matter the actual words in your speech go with your gut &amp;amp; change the narrative if you need to.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Time yourself during rehearsals , if your talk is set for 30 mins, check whether you complete well within the time. If there is a QnA session post your talk be mindful of the session as well.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Also in QnA if you are not sure of the answers, be honest &amp;amp; tell the audience you would get back to them.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Facing your doubts &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://i.giphy.com/media/nnPlj0tyeqSuOvYrfl/giphy.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://i.giphy.com/media/nnPlj0tyeqSuOvYrfl/giphy.gif" width="380" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A week before the event I was having some self doubts that's when I spoke to Bhuvaneswari Subramani a very active member of our AWS Community &amp;amp; a seasoned speaker.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Her words gave me a new perspective – she encouraged me to think about my purpose of giving the talk, how big this opportunity &amp;amp; the stage was. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;She advised me about how to overcome stage fright, trying the WonderWoman pose before my talk(I swear it does help), communicate with the audience &amp;amp; smile while speaking. Her pep talk washed over my fears &amp;amp; I started rehearsing with a renewed zeal.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The main event &lt;a&gt;&lt;/a&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Having rehearsed enough, on the day of the event I was able to witness the meticulous planning &amp;amp; preparation behind the scenes of the event. Hats off to Ridhima Kapoor, Rohini Gaonkar &amp;amp; the entire organising team.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I could get essentials such as mic check &amp;amp; stage etiquette ensured much before the start of the event.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--u72yNBe3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ynbirarhcruwqchwn7f4.JPG" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--u72yNBe3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ynbirarhcruwqchwn7f4.JPG" alt="Image description" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Post the start of the event I got so inspired by the talks of all the speakers that I completely trashed my rehearsed speech &amp;amp; went with an impromptu talk connecting with the audience, in the process I realised how much I loved being on the stage.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This was quite a memorable experience for me, all thanks to the support &amp;amp; encouragement of the AWS community members – Ridhima Kapoor, Rohini Gaonkar, Bhuvaneswari Subramani, Sridevi Murugayen, Vivek Raja P.S.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The event updates have already been documented by Bhuvaneswari ma'am in her blog , for those who have missed, you can find the link below&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-heroes/aws-womenintech-2022-451i"&gt;A Trip Back in Time- blog by Bhuvaneswari Subramani&lt;/a&gt;&lt;/p&gt;

</description>
      <category>womenintech</category>
      <category>awswomenintech</category>
      <category>career</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Automating the selection of named profiles from the .aws/credentials file</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Fri, 09 Sep 2022 02:57:55 +0000</pubDate>
      <link>https://dev.to/neetumallan/automating-the-selection-of-named-profiles-from-the-awscredentials-file-2952</link>
      <guid>https://dev.to/neetumallan/automating-the-selection-of-named-profiles-from-the-awscredentials-file-2952</guid>
      <description>&lt;p&gt;While working continuously on the AWS CLI, I found it tedious to switch between users by manually exporting the AWS_ACCESS_KEY_ID &amp;amp; AWS_SECRET_ACCESS_KEY as these credentials need to be set in every session of the shell. So I have created a bash script to automate this selection in which you can provide a named profile &amp;amp; based on the access key ID &amp;amp; secret access key the above environment variables would be set automatically.&lt;/p&gt;

&lt;p&gt;To understand more on named profiles, please go through the AWS documentation link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-profiles.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The .aws/credentials file created follows a format shown below:&lt;br&gt;
[default]&lt;br&gt;
aws_access_key_id=AKIAIOSFODNN7EXAMPLE&lt;br&gt;
aws_secret_access_key=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY&lt;/p&gt;

&lt;p&gt;[user1]&lt;br&gt;
aws_access_key_id=AKIAI44QH8DHBEXAMPLE&lt;br&gt;
aws_secret_access_key=je7MtGbClwBF/2Zp9Utk/h3yCo8nvbEXAMPLEKEY&lt;/p&gt;

&lt;p&gt;In case I do not specify any named profile, the default profile would be applied as below&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;aws ec2 describe-instances&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;else if I want a specific profile to be applied to my command I can :&lt;br&gt;
&lt;strong&gt;aws ec2 describe-instances --profile user1&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This will list the ec2 instances for the user profile of user1.&lt;/p&gt;

&lt;p&gt;You can automate this so that every time you open a shell you just provide the named profile to the script &amp;amp; it will set the access credentials for you that will be valid for the entire session.&lt;/p&gt;

&lt;p&gt;While working on this automation I came across Ben Kehoe's article regarding the same &amp;amp; this worked as an inspiration to write my own script:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ben11kehoe.medium.com/aws-configuration-files-explained-9a7ea7a5b42e"&gt;https://ben11kehoe.medium.com/aws-configuration-files-explained-9a7ea7a5b42e&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have placed the bash script my GitHub repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/neetu-mallan/AutomateCLINamedProfileSelection"&gt;https://github.com/neetu-mallan/AutomateCLINamedProfileSelection&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the README.md file to understand what the script does:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/neetu-mallan/AutomateCLINamedProfileSelection/blob/main/README.md"&gt;https://github.com/neetu-mallan/AutomateCLINamedProfileSelection/blob/main/README.md&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Write IAM Password Policy to enforce login passwords</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Wed, 07 Sep 2022 05:17:58 +0000</pubDate>
      <link>https://dev.to/neetumallan/write-iam-password-policy-to-enforce-login-passwords-3ahf</link>
      <guid>https://dev.to/neetumallan/write-iam-password-policy-to-enforce-login-passwords-3ahf</guid>
      <description>&lt;p&gt;In this blog we will learn how we can create a IAM Password policy &amp;amp; enforce every user to adhere to it. All the steps would be performed in the AWS CLI. &lt;/p&gt;

&lt;p&gt;In the previous blog post, I had mentioned how to create a role &amp;amp; assign it to a user.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/neetumallan/aws-cli-creating-iam-user-role-with-poweruseraccess-26jj"&gt;IAM user role with PowerUserAccess&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I have used the same user here after renewing the session token(a session token created by a assume-role API call expires in 60 mins) The user has a createUser API access after assuming the role.&lt;/p&gt;

&lt;p&gt;Step 1: &lt;strong&gt;Create an admin user for administrative purposes using command&lt;/strong&gt;&lt;br&gt;
aws iam create-user --user-name IAMAdmin --tags Key=Desc,Value=IAMUserForAccount&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fkrYZUFq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/81kf54f3gtrlh3yjdsrk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fkrYZUFq--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/81kf54f3gtrlh3yjdsrk.png" alt="Image description" width="800" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 2:&lt;strong&gt;Use the —query option to filter the query at the client side for specific policy names&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;aws iam list-policies --query ‘Policies[?PolicyName==&lt;code&gt;AdministratorAccess&lt;/code&gt;]' —-use backticks for the string you are trying to search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attach the AdministratorAccess policy to the IAMAdmin user&lt;/strong&gt;:&lt;br&gt;
aws iam attach-user-policy —user-name IAMAdmin —policy-arn arn:aws:iam::aws:policy/AdministratorAccess&lt;/p&gt;

&lt;p&gt;To filter policies using —query option refer to the below link to get understanding of how server side &amp;amp; client side filtering works &amp;amp; how JMES Syntax helps us to query info like getting Policy Arn's.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cli-usage-filter.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 3: &lt;strong&gt;Create access keys for the admin user&lt;/strong&gt;&lt;br&gt;
aws iam create-access-key --user-name IAMAdmin --output text&lt;/p&gt;

&lt;p&gt;STep 4: &lt;strong&gt;To create a password policy with 90 days expiration , mix of numbers, symbols,upper, lowercase &amp;amp; prevent reuse of password&lt;/strong&gt;&lt;br&gt;
aws iam update-account-password-policy --minimum-password-length 32 --require-symbols --require-numbers --require-lowercase-characters --require-uppercase-characters --allow-users-to-change-password --max-password-age 90 --password-reuse-prevention 1&lt;/p&gt;

&lt;p&gt;To check if the IAM password policy has taken effect:&lt;br&gt;
aws iam get-account-password-policy  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MJoLfWU---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zxk0b1i9klfmffby4gg7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MJoLfWU---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zxk0b1i9klfmffby4gg7.png" alt="Image description" width="800" height="289"&gt;&lt;/a&gt;&lt;br&gt;
Step 5: &lt;strong&gt;Generate a random password string that conforms to your policy needs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RANDOM_STRING=$(aws secretsmanager get-random-password --password-length 32 --require-each-included-type --output text --query RandomPassword)&lt;/p&gt;

&lt;p&gt;Step 6:&lt;strong&gt;Create a login profile adhering to our random password for the user IAMAdmin&lt;/strong&gt;&lt;br&gt;
aws iam create-login-profile --user-name IAMAdmin --password $RANDOM_STRING&lt;/p&gt;

&lt;p&gt;Login using the password &amp;amp; username &amp;amp; check if IAMAdmin has administrative access&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9H87TZln--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dy9bx37nl1fqckzx9vm2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9H87TZln--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/dy9bx37nl1fqckzx9vm2.png" alt="Image description" width="800" height="236"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Lets try creating a group &amp;amp; ensure that the any new user attached to the group will adhere to the password policy.&lt;/p&gt;

&lt;p&gt;Step 7: &lt;strong&gt;Create a new group called QualityAssurance&lt;/strong&gt; &lt;br&gt;
aws iam create-group --group-name QualityAssurance&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Attach the EC2ReadOnly Policy to this group&lt;/strong&gt;&lt;br&gt;
aws iam attach-group-policy --policy-arn arn:aws:iam::aws:policy/AmazonEC2ReadOnlyAccess --group-name QualityAssurance&lt;/p&gt;

&lt;p&gt;Step 8: &lt;strong&gt;Create a new user for this group&lt;/strong&gt;&lt;br&gt;
aws iam create-user --user-name Ben&lt;/p&gt;

&lt;p&gt;Step 9:&lt;strong&gt;Add the user Ben to the QualityAssurance group&lt;/strong&gt;&lt;br&gt;
aws iam add-user-to-group --user-name Ben --group-name QualityAssurance&lt;/p&gt;

&lt;p&gt;Step 10: &lt;strong&gt;Generate a random password string that violates our policy needs&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;RANDOM_STRING=$(aws secretsmanager get-random-password --password-length 16 --require-each-included-type --output text --query RandomPassword)&lt;/p&gt;

&lt;p&gt;Step 11:&lt;strong&gt;Create a login profile adhering to our random password for the user named Ben&lt;/strong&gt;&lt;br&gt;
aws iam create-login-profile --user-name Ben --password $RANDOM_STRING&lt;/p&gt;

&lt;p&gt;The step 11 fails with the error: Password policy violation : Password should be minimum length of 32 which proves that the password policy is enforced.&lt;/p&gt;

&lt;p&gt;Lets generate random password which conforms to the IAM password policy &amp;amp; assign it to the user &lt;br&gt;
RANDOM_STRING=$(aws secretsmanager get-random-password --password-length 32 --require-each-included-type --output text --query RandomPassword)&lt;/p&gt;

&lt;p&gt;Step 12:&lt;strong&gt;Create a login profile for the user named Ben with the new random password&lt;/strong&gt;&lt;br&gt;
aws iam create-login-profile --user-name Ben --password $RANDOM_STRING&lt;/p&gt;

&lt;p&gt;As Ben has EC2ReadOnly access, opening the EC2 console does not give any errors as opposed to the S3 access below&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KSftC91r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/npndq4s61hyib9lqcmfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KSftC91r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/npndq4s61hyib9lqcmfz.png" alt="Image description" width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aoxdtEr1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f7udq089h4adakubp7as.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aoxdtEr1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/f7udq089h4adakubp7as.png" alt="Image description" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thus creating a password policy &amp;amp; assigning it at the account level helps to ensure that any user created in the account follows the policy thus enabling security with user credentials.&lt;/p&gt;

&lt;p&gt;This exercise has been inspired by the 2nd recipe in the AWS Cookbook.I have experimented further with the content.&lt;/p&gt;

&lt;p&gt;Happy Learning!!&lt;/p&gt;

</description>
      <category>aws</category>
      <category>iam</category>
      <category>awscloud</category>
    </item>
    <item>
      <title>Setting up Command auto completion for AWS CLI</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Mon, 15 Aug 2022 12:56:22 +0000</pubDate>
      <link>https://dev.to/neetumallan/setting-up-command-auto-completion-for-aws-cli-5cm5</link>
      <guid>https://dev.to/neetumallan/setting-up-command-auto-completion-for-aws-cli-5cm5</guid>
      <description>&lt;p&gt;Once you have installed the AWS CLI, it has the feature to auto complete the commands for you at the press of a TaB key. I am using a MAC &amp;amp; the commands here are pertaining to the Mac OS &amp;amp; the zsh shell is used.&lt;/p&gt;

&lt;p&gt;To enable this, execute the foll. commands&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Check the location of aws_completer&lt;br&gt;
which aws_completer&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Check the shell using command echo $SHELL&lt;br&gt;
/bin/zsh&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Find the profile script of shell&lt;br&gt;
ls -a ~/&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In my case its the zsh &amp;amp; this shell does not have a profile script .zshrc created by default even if you are using the shell&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Create the file using command:&lt;br&gt;
Touch ~/.zshrc&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Add the path of the aws_completer to this:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;PATH="/usr/local/bin/aws_completer:${PATH}"&lt;br&gt;
export PATH&lt;/p&gt;

&lt;p&gt;Add the below command to the .zshrc file so that the command completion works every time you open the shell&lt;/p&gt;

&lt;p&gt;autoload bashcompinit &amp;amp;&amp;amp; bashcompinit&lt;br&gt;
autoload -Uz compinit &amp;amp;&amp;amp; compinit&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;To enable command completion run the below command&lt;br&gt;
complete -C '/usr/local/bin/aws_completer' aws&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Execute the command below to reproduce the above changes in current shell&lt;br&gt;
source ~/.zshrc&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Verify the command completion using the &lt;/p&gt;

&lt;p&gt;aws i(TAB key press)&lt;/p&gt;

&lt;p&gt;For other OS's , please refer to the below documentation by AWS&lt;br&gt;
&lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-completion.html"&gt;https://docs.aws.amazon.com/cli/latest/userguide/cli-configure-completion.html&lt;/a&gt; &lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscli</category>
    </item>
    <item>
      <title>AWS CLI: Creating IAM User &amp; Role with PowerUserAccess</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Mon, 15 Aug 2022 12:55:30 +0000</pubDate>
      <link>https://dev.to/neetumallan/aws-cli-creating-iam-user-role-with-poweruseraccess-26jj</link>
      <guid>https://dev.to/neetumallan/aws-cli-creating-iam-user-role-with-poweruseraccess-26jj</guid>
      <description>&lt;p&gt;Having used the AWS Management Console for a while now, I wanted to switch over &amp;amp; use Developer Tools, to begin with AWS CLI quite extensively.  &lt;/p&gt;

&lt;p&gt;To start with I have created a new Free-Tier Account having a Root User.&lt;/p&gt;

&lt;p&gt;To use AWS CLI, install it on your local machine steps using the : &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html"&gt;https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Step 1: Create access keys for Root User.&lt;/p&gt;

&lt;p&gt;Though not a good practice, this step helped me to create the IAM user from scratch on the CLI. I have deleted the access keys once the IAM user was created &amp;amp; generated &amp;amp; assigned its own access keys.Download the csv file from the Management console &amp;amp; store it in a secure location on your computer.&lt;/p&gt;

&lt;p&gt;Step 2: Setting up the CLI to use the access keys of the root user &amp;amp; create an IAM user &lt;br&gt;
Execute the below commands:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Provide the access keys to setup the CLI to operate using root user credentials&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;aws configure&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create group named "Developers", an IAM user named "Neetu" &amp;amp; attach it to the group.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;aws iam create-group --group-name Developers&lt;/p&gt;

&lt;p&gt;aws iam create-user —user-name Neetu&lt;/p&gt;

&lt;p&gt;aws iam add-user-to-group --user-name Neetu --group-name Developers&lt;/p&gt;

&lt;p&gt;aws iam get-group --group-name Developers&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;generate access keys for the IAM user &amp;amp; store it in a file on your local system&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;aws iam create-access-key --user-name Neetu &amp;gt; access_keys_iamuser.txt&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attach a permissions policy to the IAM User to be able to Create a role &amp;amp; attach itself a role policy. Replace the resource name with the ARN of the IAM user.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;{&lt;br&gt;
    "Version": "2012-10-17",&lt;br&gt;
    "Statement": [&lt;br&gt;
        {&lt;br&gt;
            "Sid": "VisualEditor0",&lt;br&gt;
            "Effect": "Allow",&lt;br&gt;
            "Action": [&lt;br&gt;
                "iam:CreateRole",&lt;br&gt;
                "iam:AttachRolePolicy"&lt;br&gt;
            ],&lt;br&gt;
            "Resource": "arn:aws:iam::XYZ:role/*"&lt;br&gt;
        }&lt;br&gt;
    ]&lt;br&gt;
}&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Delete the access keys of the root user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;aws iam delete-access-key --access-key-id &lt;/p&gt;

&lt;p&gt;Replace  with the access key ID from the credentials csv you download&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Re-run the aws configure command this time with the IAM users credentials&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Create a role policy json file to allow the IAM user to assume a role&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;{&lt;br&gt;
  "Version" : "2012-10-17",&lt;br&gt;
  "Statement" : [&lt;br&gt;
    {&lt;br&gt;
      "Effect" : "Allow",&lt;br&gt;
      "Principal" : {&lt;br&gt;
         "AWS" : "PRINCIPAL_ARN"&lt;br&gt;
       },&lt;br&gt;
      "Action" : "sts:AssumeRole"&lt;br&gt;
    }&lt;br&gt;
  ]&lt;br&gt;
}&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store the ARN of the IAM user in an environment variable using the below command, this will correspond to the ARN of the IAM user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;PRINCIPAL_ARN=$(Aws Sts get-caller-identity —query Arn —output text)&lt;/p&gt;

&lt;p&gt;echo $PRINCIPAL_ARN to check if the variable is properly configured&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Replace this ARN in the assume-role-policy-template.json &amp;amp; rename the file&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;sed ‘s|PRINCIPAL_ARN|${PRINCIPAL_ARN}|g’ assume-role-policy-template.json &amp;gt; assume-role-policy.json&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a role with the trust relationship with the principal ARN as the user&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;ROLE_ARN=$(aws iam create-role --role-name PowerUserAccessRole --assume-role-policy-document file://assume-role-policy.json --output text --query Role.Arn)&lt;/p&gt;

&lt;p&gt;This command creates a role by the name of "PowerUserAccessRole" which has the Sts:AssumeRole policy attached to it.&lt;/p&gt;

&lt;p&gt;Note: Do not forget file:// even if you have provided the complete path of the assume-role-policy.json as the command then gives Malformed/Invalid JSON error which is not intuitive.&lt;br&gt;
(Complete Error: when calling the CreateRole operation: This policy contains invalid Json)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assume the role &amp;amp; get the temporary credentials using the command which is generated with an expiry time:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;aws sts assume-role --role-arn $ROLE_ARN --role-session-name DeveloperAccess&lt;/p&gt;

&lt;p&gt;{&lt;br&gt;
    "Credentials": {&lt;br&gt;
        "AccessKeyId": "",&lt;br&gt;
        "SecretAccessKey": "",&lt;br&gt;
        "SessionToken": "IQoJb3JpZ2luX2VjEA0aCXVzLWVhc3QtMSJGMEQCIAQEX4oH3oDqi7DZcdyjN8UdhxWfP7cOvMdYjztyQ9H7AiAl88n2FIIw0zQco+C/ncvHTskgacVgubhrBNupFD8SdCqbAgh1EAAaDDY1MjU2OTkwNTIwNiIMv6opwh02jCFt+WFgKvgBDaKG1CICFrAXUbrEYE2/STYd8BqNvJxnbw5nI8hImVZNWiJW7yhqbisU02r1G2TIh9bHnwjaYXw0PTyiFPNqYF81ZdkcelWR00qWUCpAgvY7v1lRsNLgxvokk9eJNpRqjqHlfEwd6MlUcuntFQ8v3UU9hVJRL9gzB3+v5Uaq8KiUJdzYVas76eSMzi7XWtbQv18ZavZOAPOUqigBIS8wuo1IXSaDHFO/AvhbaXvlGgBJdE++rxfptI822oigOxuokmEAXXVdImBeo7hI3xh2naPhhUnxjMDtnzoSa+jAipfLxclvIOrigT4SaRdp3o3YNxdBS3KQyCUw4YfZlwY6ngFKdr+QZt4qEEtWbbEsxs5Nj5zVu1/z9DeiTPbsiTT9yVFDO9X8/6Ln/IyNtq5E/DUKisLLj4KAWykxjRC/tdNv+ZjdklK6424MBEE6LXQPbxkfnoZjsKPI2/kUgp7L6mzMmQSvEGTpICeJHB3BVqrOtN0VGeiSO8YEnJtBUsEpzM0kiN+1ZzE0NSsufsjYmmBZ7Oypn4zUhTxLvnj06w==",&lt;br&gt;
        "Expiration": "2022-08-12T13:13:21+00:00"&lt;br&gt;
    },&lt;br&gt;
    "AssumedRoleUser": {&lt;br&gt;
        "AssumedRoleId": "AROAZP4BSRA3LG6JASGGG:DeveloperAccess",&lt;br&gt;
        "Arn": "arn:aws:sts::652569905206:assumed-role/PowerUserAccessRole/DeveloperAccess"&lt;br&gt;
    }&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;The above commands help us to create a IAM user &amp;amp; follow the principle of least privilege to assign a PowerUserAccessRole to the user. Temporary credentials are generated so that the IAM user can perform limited functions till the session token expires. &lt;/p&gt;

&lt;p&gt;The inspiration for this article is the first recipe in the AWS Cookbook which I have improvised further to get a better understanding of using AWS CLI &lt;/p&gt;

</description>
      <category>aws</category>
      <category>awscommunity</category>
      <category>cli</category>
    </item>
    <item>
      <title>Creating EC2WebServerInstance using CloudFormation</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Sat, 09 Jul 2022 12:04:59 +0000</pubDate>
      <link>https://dev.to/neetumallan/creating-ec2webserverinstance-using-cloudformation-242n</link>
      <guid>https://dev.to/neetumallan/creating-ec2webserverinstance-using-cloudformation-242n</guid>
      <description>&lt;p&gt;Drawing inspiration from Drew Firment's challenge to play in the cloud sandbox. I had decided to begin my AWS builder journey through the project- "Use CloudFormation to Launch an EC2 Web Server".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--TcL0SUXR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7je57k5kuk48obcz4qb8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--TcL0SUXR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7je57k5kuk48obcz4qb8.png" alt="Image description" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This was a real fun activity with loads of learnings. Quite a CloudFormation novice that I am, I did have a fair share of hiccups that I have mentioned in the Troubleshooting section. For the exercise I have followed the online tutorial given in the AWS documentation walkthrough &lt;a href="https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-walkthrough-createbasicwebserver.html#working-with-templates-cfn-designer-walkthrough-createbasicwebserver-resourceproperties"&gt;https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/working-with-templates-cfn-designer-walkthrough-createbasicwebserver.html#working-with-templates-cfn-designer-walkthrough-createbasicwebserver-resourceproperties&lt;/a&gt; .&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5epWqYjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fe5l7jk90opgm7xd4zsz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5epWqYjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fe5l7jk90opgm7xd4zsz.png" alt="Image description" width="800" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It was really satisfying seeing the above congratulatory message post the successful launch of the web server. I could really experience the power of cloud!!!&lt;/p&gt;

&lt;p&gt;Troubleshooting guide:&lt;br&gt;
1.While uploading the completed CloudFormation Template to create a stack. I faced the error- "Failed to retrieve external values". This was due to incorrect placement of the access key name while declaring the parameters for the WebServerInstance&lt;br&gt;
                  EC2InstanceKey: &amp;lt;--- Mention the actual key name created in the AWS region you are using&lt;br&gt;
          Description: Name of an EC2 KeyPair to enable SSH access to the instance.&lt;br&gt;
          Type: 'AWS::EC2::KeyPair::KeyName'&lt;br&gt;
              ConstraintDescription: must be the name of an existing EC2 KeyPair.&lt;br&gt;
    Subsequently, while referring this key in the WebServer Instance use the exact name as              given below&lt;br&gt;
        KeyName: !Ref EC2InstanceKey&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Public Route Table resource creation failed while creating the stack. Here, the error shown in the Events section of CloudFormation was self explanatory. The VPCId had been missed in the properties of the table in the template.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;AMI ID: Mention the appropriate AMI ID as per the latest architecture.  The script present in the walkthrough tutorial has older versions of AMI,as a result the EC2 Instance Connect was not working and neither could I connect to the EC2 Public IPV4 address. &lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Rather than opting for the static declaration of AMI ID and instance types as in the walkthrough, one can opt for passing dynamically with the help of SSM Parameter store.&lt;/p&gt;

&lt;p&gt;4.Explicitly specify the Subnet-Route Table association using the AWS::EC2::SubnetRouteTableAssociation type. I had not used as it was not mentioned in the walkthrough due to which I had to map the internet gateway to the route table post the stack creation.This led to the EC2 instance not being connected to the internet and same behaviour post the addition too.&lt;/p&gt;

&lt;p&gt;My sincere thanks to Drew. Moving to the next challenge. Onwards and Upwards!!! #AWS&lt;/p&gt;

&lt;p&gt;The CloudFormation template is present at the below GitHub link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/neetu-mallan/CloudFormationTemplate/tree/master"&gt;https://github.com/neetu-mallan/CloudFormationTemplate/tree/master&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>Creating a EKS cluster using Managed Nodes(EC2 instances)</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Sat, 09 Jul 2022 11:28:30 +0000</pubDate>
      <link>https://dev.to/neetumallan/creating-a-eks-cluster-using-managed-nodesec2-instances-46il</link>
      <guid>https://dev.to/neetumallan/creating-a-eks-cluster-using-managed-nodesec2-instances-46il</guid>
      <description>&lt;p&gt;For the past few weeks I have been learning Kubernetes fundamentals, as part of the hands on lab, I will be creating an EKS Cluster in my AWS account using Managed Nodes. I would be making use of the AWS Console to create the cluster &amp;amp; the CLI to create nodes &amp;amp; communicate from my local system using kubectl tool with the remote nodes to deploy the container images.&lt;/p&gt;

&lt;p&gt;Pre-requisites:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS account
Setup the AWS CLI &amp;amp; kubectl tools in your local machine.&lt;/li&gt;
&lt;li&gt;AWS CLI: Install the CLI tool &amp;amp; check the successful installation using the below command&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--weif4Q7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/asxiukvicu8g2w3k8kp8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--weif4Q7r--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/asxiukvicu8g2w3k8kp8.png" alt="Image description" width="800" height="54"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;kubectl : Install the kubectl tool &amp;amp; then check the successful installation using the below command&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--sKmK7ZLR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nzeyyc9y42kpnioyi527.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--sKmK7ZLR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/nzeyyc9y42kpnioyi527.png" alt="Image description" width="800" height="41"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code repository:&lt;br&gt;
&lt;a href="https://github.com/neetu-mallan/ManagedNodeEKSCluster/tree/master"&gt;https://github.com/neetu-mallan/ManagedNodeEKSCluster/tree/master&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To create the cluster, follow the below steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;VPC &amp;amp; Subnet creation:
Create a custom VPC, 2 public &amp;amp; 2 private subnets, Internet Gateway, NatGateway etc. using the below command.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;aws cloudformation create-stack \&lt;br&gt;
  --region ap-south-1 \&lt;br&gt;
  --stack-name VPCForEKSCluster \&lt;br&gt;
  --template-url &lt;a href="https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml"&gt;https://s3.us-west-2.amazonaws.com/amazon-eks/cloudformation/2020-10-29/amazon-eks-vpc-private-subnets.yaml&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a cluster IAM role
The below command creates a STS role which can be assumed by the EKS service.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Command:&lt;br&gt;
aws iam create-role \&lt;br&gt;
  --role-name EKSClusterRole \&lt;br&gt;
  --assume-role-policy-document file://cluster-role-trust-policy.json&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--8Xo1sMjX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3bjo2z5o36egigthjz9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--8Xo1sMjX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/c3bjo2z5o36egigthjz9.png" alt="Image description" width="800" height="86"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.Attach the AmazonEKSClusterPolicy to the IAM role created above&lt;/p&gt;

&lt;p&gt;Command:&lt;br&gt;
aws iam attach-role-policy \&lt;br&gt;
  --policy-arn arn:aws:iam::aws:policy/AmazonEKSClusterPolicy \&lt;br&gt;
  --role-name EKSClusterRole&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hoPtdJjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0nvk6rxxit2gmtfgc9k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hoPtdJjM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x0nvk6rxxit2gmtfgc9k.png" alt="Image description" width="800" height="96"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cluster Creation:
Create a cluster using the AWS Management Console, make sure to select the VPC, subnets, security groups as created on Step 1.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--rQL79xce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42ptwslsd3x64xn52ore.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--rQL79xce--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/42ptwslsd3x64xn52ore.png" alt="Image description" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lw2snSxt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m24sv3yospipleq1828l.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lw2snSxt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/m24sv3yospipleq1828l.png" alt="Image description" width="800" height="642"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create kubeconfig file.
This config file helps you to communicate with the remote cluster using the kubectl tool&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;aws eks update-kubeconfig --region ap-south-1 --name MyCluster&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--neVADDIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95jfwc6asf2vglhdgghk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--neVADDIR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/95jfwc6asf2vglhdgghk.png" alt="Image description" width="800" height="60"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As shown in the command output in the above screenshot, if we try to print the contents of the config file, we can see that it creates an entry for the Cluster created in Step 4 in our local .kube folder.&lt;br&gt;
Be sure to change the region name &amp;amp; cluster name as per your AWS account.&lt;/p&gt;

&lt;p&gt;Run the "kubectl get svc" command to ensure the config is working fine &amp;amp; you are able to connect to the cluster.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LTsR2-X8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x2udw2j1ldehu7ju5r92.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LTsR2-X8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x2udw2j1ldehu7ju5r92.png" alt="Image description" width="800" height="92"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Note: In my case, I faced an issue wherein I was getting the "exec plugin: invalid apiVersion "client.authentication.k8s.io/v1alpha1", the config file was updated with the api version v1alpha1 which was no longer valid. I had to update the aws cli &amp;amp; rerun the update-kubeconfig command mentioned above to fix the issue.&lt;/p&gt;

&lt;p&gt;a. Create an IAM Role for the nodes to interact with AWS resources.&lt;/p&gt;

&lt;p&gt;aws iam create-role \&lt;br&gt;
--role-name EKSNodeRole \&lt;br&gt;
--assume-role-policy-document NodeIAMRole.json&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--bK9qqTUn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3h3tc0yy2euzx3s3xlze.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--bK9qqTUn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3h3tc0yy2euzx3s3xlze.png" alt="Image description" width="800" height="89"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Assign the specific policies to the EKSNode Role using the below commands:&lt;/p&gt;

&lt;p&gt;aws iam attach-role-policy \&lt;br&gt;
--policy-arn arn:aws:iam::aws:policy/AmazonEKSWorkerNodePolicy --role-name EKSNodeRole&lt;br&gt;
aws iam attach-role-policy \&lt;br&gt;
--policy-arn arn:aws:iam::aws:policy/AmazonEC2ContainerRegistryReadOnly --role-name EKSNodeRole&lt;br&gt;
aws iam attach-role-policy \&lt;br&gt;
--policy-arn arn:aws:iam::aws:policy/AmazonEKS_CNI_Policy --role-name EKSNodeRole&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Add Nodes to Cluster:&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;There are 2 options here- we can go for Fargate(Serverless) &amp;amp; Managed(EC2) nodes.&lt;/li&gt;
&lt;li&gt;I am choosing the EC2 Managed nodes for the below exercise&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Go to the Compute tab under the cluster &amp;amp; click on Add NodeGroup. I have created a NodeGroup "DemoWorkerNodes" as shown below. The cluster &amp;amp; node group creation can take a couple of minutes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oDNTGpMB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csley49zazaycvlwojbc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oDNTGpMB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/csley49zazaycvlwojbc.png" alt="Image description" width="800" height="392"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--fxCp1zAj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rf1vqowbsowbs1be4x56.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fxCp1zAj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rf1vqowbsowbs1be4x56.png" alt="Image description" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--XC5pZtod--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vkzk4wuzq4dzzrk2y03v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--XC5pZtod--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vkzk4wuzq4dzzrk2y03v.png" alt="Image description" width="800" height="569"&gt;&lt;/a&gt;]&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--xG9KFoRV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0c5a8kc80hqoza2pwdpg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--xG9KFoRV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0c5a8kc80hqoza2pwdpg.png" alt="Image description" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Troubleshooting pointers: Initially I changed the Instance Config from t3.medium to t2.micro but 3 of the 5 containers were not starting. I had to delete the node group &amp;amp; re-create using t3.medium as default EC2 config &amp;amp; then the deployment worked fine.&lt;br&gt;
Commands to be used to troubleshoot:&lt;br&gt;
 kubectl get pods&lt;br&gt;
 kubectl describe pod pod-name&lt;br&gt;
 kubectl logs pod-name .... replace pod-name with the name of your pod.&lt;/p&gt;

&lt;p&gt;Run the kubectl get nodes command to check that we can see the nodes created through the node group in our local system too.&lt;br&gt;
This ensures that all the config done above works &amp;amp; we are able to connect to the remote nodes locally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HFOLs9W1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u9csn0ulqnv7hmmi2dux.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HFOLs9W1--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/u9csn0ulqnv7hmmi2dux.png" alt="Image description" width="800" height="66"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Deploy the containers using the kubectl create command onto the nodes from your local machine as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--AyUDy2v0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdbimzijo4ymvtjjahhk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--AyUDy2v0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bdbimzijo4ymvtjjahhk.png" alt="Image description" width="800" height="332"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once done, copy the load balancer services external IP as shown in the screenshot &amp;amp; open them in the web browser to see the successfully deployed application.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eoHNzo62--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axkltypk8flx69vs94h3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eoHNzo62--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/axkltypk8flx69vs94h3.png" alt="Image description" width="800" height="146"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--FxpVMxeV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8u9ms2upiwwzlbvq0a72.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FxpVMxeV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8u9ms2upiwwzlbvq0a72.png" alt="Image description" width="800" height="734"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Clean up your account post the successful deployment. Delete the node groups &amp;amp; then the EKS cluster &amp;amp; the associated IAM roles. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Hands-On Idea&lt;/em&gt;: &lt;br&gt;
AWS EKS Official Documentation &amp;amp; KodeKloud Kubernetes Beginner's Course &lt;a href="https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html"&gt;https://docs.aws.amazon.com/eks/latest/userguide/getting-started.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>containers</category>
      <category>aws</category>
      <category>eks</category>
    </item>
    <item>
      <title>Triggering a Lambda function using SQS to populate DynamoDB</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Wed, 15 Jun 2022 07:49:32 +0000</pubDate>
      <link>https://dev.to/neetumallan/triggering-a-lambda-function-using-sqs-to-populate-dynamodb-4n3i</link>
      <guid>https://dev.to/neetumallan/triggering-a-lambda-function-using-sqs-to-populate-dynamodb-4n3i</guid>
      <description>&lt;p&gt;This post is intended for beginners who want to understand how event driven architectures communicate in AWS. The repository holding the python scripts to be used is mentioned at the end of the &lt;/p&gt;

&lt;p&gt;Log into your AWS console with your IAM credentials, select the region closest to you &amp;amp; follow the below steps:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Creating a SQS(Simple Queue Service):
&lt;/h2&gt;

&lt;p&gt;Create a simple SQS queue called "DynamoDBMessages" which will receive a number of messages from the EC2 instance running in our account. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LT5JkiX---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0usj59026zeroeq69hp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LT5JkiX---/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/0usj59026zeroeq69hp6.png" alt="Image description" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No need to change the access policy or the configuration we can keep it as default&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VzffkIy5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lb64lqds6d0lo1gblsbw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VzffkIy5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lb64lqds6d0lo1gblsbw.png" alt="Image description" width="800" height="608"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Lambda execution role:
&lt;/h2&gt;

&lt;p&gt;We need to grant access to the Lambda service so that the function created in the next step can access the SQS queue to check for messages, DynamoDB in order to write the messages from the queue to the DB table &amp;amp; access to write to CloudWatch Logs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LE6b7CFE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lcv4a43jwggyhwkdvy38.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LE6b7CFE--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lcv4a43jwggyhwkdvy38.png" alt="Image description" width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--YdzOsgr4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x74or4lsm66lfmloctb1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--YdzOsgr4--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/x74or4lsm66lfmloctb1.png" alt="Image description" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Lambda function:
&lt;/h2&gt;

&lt;p&gt;This function will be triggered by an event whenever the messages are placed on DynamoDBMessages Queue created in step 1.&lt;/p&gt;

&lt;p&gt;Provide the function name &amp;amp; select the runtime as Python 3.9 as we will be running the function written in Python.&lt;br&gt;
The architecture can be default as x86_64. Click on Create Function.&lt;/p&gt;

&lt;p&gt;Once the Function Overview screen open click on "Add Trigger", select SQS in the trigger configuration &amp;amp; select the queue we created above.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BSjAsL7K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g39nl1xlqwp8fu586iqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BSjAsL7K--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/g39nl1xlqwp8fu586iqp.png" alt="Image description" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the Code tab &amp;amp; change the contents of the lambdafunction.py to the code attached (filename= lambda_function.py) in the repository given below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7cRfFubw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5cgh17xmim6nb8qdx5m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7cRfFubw--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k5cgh17xmim6nb8qdx5m.png" alt="Image description" width="800" height="530"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next, Deploy the code by clicking on Deploy.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Create a DynamoDB table:
&lt;/h2&gt;

&lt;p&gt;Create a table by the name of Messages as shown below:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--obYkpYlS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h9ds10f88aaufxx5pw2x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--obYkpYlS--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/h9ds10f88aaufxx5pw2x.png" alt="Image description" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Create a EC2 Instance:
&lt;/h2&gt;

&lt;p&gt;This instance will execute the code which will send messages to SQS. Be sure to select instance type t2.micro which is free tier eligible.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ndlxeVTT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mys35fayql3eke4hzdo6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ndlxeVTT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/mys35fayql3eke4hzdo6.png" alt="Image description" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select the EC2 Instance once its in the running state &amp;amp; click on Connect, alternatively we can also use the AWS CLI. You can run the scp command to move the send_message.py file to the EC2 Instance from your local once you are able to SSH into the instance(This requires the KeyPair pem file created at the time of instance creation)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--W8sCPkzk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2afh73biu1m42tj3ik1c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--W8sCPkzk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2afh73biu1m42tj3ik1c.png" alt="Image description" width="800" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To run the below command, install boto3 &amp;amp; faker packages on the EC2 instance as this will not be pre-installed. Next, you might face "No Credentials Error" thrown by boto3 package. To overcome this, there are three options, &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run aws configure &amp;amp; give the access key id, key, region, format.&lt;/li&gt;
&lt;li&gt;Edit the credentials file in the /.aws folder. Create the folder/file if not present &amp;amp; then enter the above access key &amp;amp; region details.
The above two options are not safe as any other user having access to this EC2 instance can get hold of these credentials.
Alternatively STS service can be used to get temporary credentials for package execution on EC2.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once the above steps are complete, run the below command to trigger sending of the messages to DynamoDBMessages queue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lF1puLRu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ouptrxv1jrnjhxs76164.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lF1puLRu--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ouptrxv1jrnjhxs76164.png" alt="Image description" width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The SQS queue name created should follow the -q option in the above command.&lt;/p&gt;

&lt;p&gt;Press Ctrl+C once you see an adequate number of messages being sent.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BX0vuZnf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ut6zsox6i0h3vhw6f7xm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BX0vuZnf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ut6zsox6i0h3vhw6f7xm.png" alt="Image description" width="800" height="412"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Check the DynamoDB table "Message" for the messages sent from the EC2 -&amp;gt; SQS -&amp;gt; Lambda -&amp;gt; DynamoDB. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Mp7LZyti--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1i3v8tii40bm76gfluon.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Mp7LZyti--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1i3v8tii40bm76gfluon.png" alt="Image description" width="800" height="504"&gt;&lt;/a&gt;&lt;br&gt;
For any errors one can also check the CloudWatch Logs, under the Lambda log group.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--t06n0gQN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tn71m1dibkr2hng52ck.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--t06n0gQN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2tn71m1dibkr2hng52ck.png" alt="Image description" width="800" height="663"&gt;&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;GitHub Repository:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/neetu-mallan/SQSLambdaDynamoDB/tree/master"&gt;https://github.com/neetu-mallan/SQSLambdaDynamoDB/tree/master&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>serverless</category>
      <category>eventdriven</category>
    </item>
    <item>
      <title>Networking basics - Part 1</title>
      <dc:creator>neetu-mallan</dc:creator>
      <pubDate>Fri, 15 Apr 2022 19:16:07 +0000</pubDate>
      <link>https://dev.to/neetumallan/networking-basics-part-1-35g7</link>
      <guid>https://dev.to/neetumallan/networking-basics-part-1-35g7</guid>
      <description>&lt;p&gt;As a part of my prep for AWS SAA-C02, I started learning the basics of how networking works in the cloud. &lt;strong&gt;This post has been written for sharing my learnings with my fellow community members from AWS User group Madurai.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Understanding Networking is essential to understand the way AWS Services communicate&lt;br&gt;
internally as well as with the on premises infrastructure. &lt;br&gt;
Let's begin with the most fundamental model of networking. &lt;/p&gt;

&lt;h2&gt;
  
  
  Table of contents:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;OSI Model&lt;/li&gt;
&lt;li&gt;Layer 1 - Physical Layer&lt;/li&gt;
&lt;li&gt;Layer 2 - Data Link Layer&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  OSI model &lt;a&gt;&lt;/a&gt; (open systems interconnection)
&lt;/h2&gt;

&lt;p&gt;This is a 7 layer model which conceptualises movement of information from one point to another either in LAN or situated in different parts of the world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--v_eKB8fH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrjnkbrc7yrlln38wao4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--v_eKB8fH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lrjnkbrc7yrlln38wao4.png" alt="OSI model" width="781" height="638"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The above abstracted model depicts a network stack, the bottom 3 layers form the Media layer - show the movement of data one point to another.&lt;br&gt;
The remaining layers form the Host layers - show how information is segmented,converted into an understandable format between each layer of the model.&lt;br&gt;
The information sent by the sender(web browser) flows through these layers &amp;amp; reaches the receiver (network card) &amp;amp; is sent back over the same stack to the sender.&lt;/p&gt;

&lt;p&gt;Let's understand the important layers that perform specific functions to interact with each layer above &amp;amp; below it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Physical Layer &lt;a&gt;&lt;/a&gt;:
&lt;/h3&gt;

&lt;p&gt;This layer specifies how raw bit streams should be transmitted &amp;amp; received between a device &amp;amp; a shared medium such as a Ethernet cable, fibre optic cable or Wifi.It defines characteristics such as pulse rates, modulation , the voltage levels,etc.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DpgUgtHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bspw05ogue2xcioxcofd.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DpgUgtHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/bspw05ogue2xcioxcofd.jpeg" alt="Devices connected through a copper cable" width="374" height="135"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;-The physical layer operates at the LAN level.&lt;br&gt;
-Converts binary 1s &amp;amp; 0s to electrical, optical or radio signals&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Why the need for Layer 2?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--9tCUXM6n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9zi5tfzblp9m7of9uasv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9tCUXM6n--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/9zi5tfzblp9m7of9uasv.png" alt="Devices connected by Ethernet Hub" width="800" height="791"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's take an example of a ethernet hub connecting multiple devices on a LAN&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It acts as a broadcast medium.&lt;/li&gt;
&lt;li&gt;Data transmission from one device is sent to all other devices&lt;/li&gt;
&lt;li&gt;Cannot uniquely identify devices. Thus one to one communication is not possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--ny2feVOr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vcky7j4vy4b693zwn8ki.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ny2feVOr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/vcky7j4vy4b693zwn8ki.png" alt="Collision while communicating over a Hub" width="566" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No collision control. As all devices can broadcast simultaneously, collision happens &amp;amp; there can be loss or scrambling of data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Data Link Layer &lt;a&gt;&lt;/a&gt;:
&lt;/h3&gt;

&lt;p&gt;This is an important Layer of the OSI model , it allows meaningful communication between the higher layers &amp;amp; Layer 1. It removes the drawback of the physical layer by allowing device to device communication.&lt;br&gt;
For Data Link Layer to function a fully functional physical layer should exist.It means that Layer 2 is built upon Layer 1.&lt;/p&gt;

&lt;p&gt;This Layer introduces MAC address to identify devices &amp;amp; frames for effective communication.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;What is MAC address?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Media access control (MAC) address are 48 bit hexadecimal addresses given to a network card.&lt;/li&gt;
&lt;li&gt;Its a combination of OUI (Organisationally Unique Identifier)that identifies the network card manufacturer &amp;amp; NIC (Network Interface controller).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;What is a frame?&lt;/strong&gt;&lt;/em&gt;&lt;br&gt;
A frame is a container sent over a shared medium to the Layer 1. Layer 1 does not understand the Frame it simply transfers &amp;amp; receives them in the form of electrical/optical/RF signals over the shared medium.&lt;/p&gt;

&lt;p&gt;Lets take an example of a Ethernet frame&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SzXMmpI8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1v18g6hhupnveyn9yi41.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SzXMmpI8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/1v18g6hhupnveyn9yi41.jpeg" alt="Ethernet frame structure" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here the ET denotes the Ethernet type which is the protocol used by Layer 3 to send the payload.&lt;br&gt;
The destination &amp;amp; Source MAC uniquely identify the communicating devices. To broadcast the data to all devices the destination address can be mentioned as FF:FF:FF(all FF’s).&lt;br&gt;
FCS denotes the Frame Check Sequence, its used for error detection &amp;amp; control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Description of the above diagram:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;Step 1&lt;/u&gt;: At the Source, Layer 3 sends the payload ,say in the form of a IP packet.&lt;br&gt;
&lt;u&gt;Step 2&lt;/u&gt;:This packet is encapsulated by Layer 2 into a frame as shown above &amp;amp; sent to layer 1 in the form of raw bits&lt;br&gt;
&lt;u&gt;Step 3&lt;/u&gt;: Layer 1 sends these bits over the shared medium to the destination Layer 1 &amp;amp; subsequently to Layer 2. &lt;br&gt;
&lt;u&gt;Step 4&lt;/u&gt;: Layer 2 retrieves the frame from the bits checks if the destination address is its own, extracts the IP packet &amp;amp; gives it to the layer 3 on the destination end , the protocol to be used in this Layer 3 is determined by the ET type.&lt;/p&gt;

&lt;p&gt;In the OSI model,the lower layers are abstracted, it means that the devices at Layer 2 are unaware of the Layer 1. This is similar to when a user enters url in the browser &amp;amp; hits enter he/she is unaware of what layers the request passes through to get a corresponding response.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;How does Layer 2 overcome Collision detection?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Layer 2 uses &lt;strong&gt;CSMA/CD&lt;/strong&gt; (Carrier Sense Multiple Access &amp;amp; Collision detection) network protocol to transmit data to Layer 1.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Lets understand how this works with the example of a &lt;strong&gt;Switch&lt;/strong&gt; which is the network device that functions at the Data link layer&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--hsxWHZOX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jatv1mohf7bmoftb28w9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--hsxWHZOX--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/jatv1mohf7bmoftb28w9.jpeg" alt="switch functionality" width="800" height="839"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In Layer 2, switches are intelligent devices which maintain a MAC address table as shown in the diagram above. This allows a &lt;strong&gt;unicast&lt;/strong&gt; (1:1)communication.&lt;br&gt;
Initially this table is empty, as say PC A starts transmitting a frame the switch makes an entry in the table for the port PC A is connected to.&lt;/p&gt;

&lt;p&gt;In the above diagram suppose that PC A transmits a frame with destination MAC address of PC C.&lt;br&gt;
&lt;u&gt;Step 1&lt;/u&gt;.: The switch receives the frame, stores &amp;amp; analyses it to find the destination system &amp;amp; its port based on the MAC address.&lt;br&gt;
&lt;u&gt;Step 2&lt;/u&gt;: It checks if there is a carrier on the communication channel ie if there is a transmission from PC C at the same time.&lt;br&gt;
&lt;u&gt;Step 3&lt;/u&gt;: If no, frame is sent to PC C. This is how the switch implements the CSMA protocol.&lt;br&gt;
&lt;u&gt;Step 4&lt;/u&gt;: If two devices for some reason transmit frame at the same time, switch ensures that the collision only limits to the port it occurs on rather than broadcasting it to other devices as in layer 1. &lt;br&gt;
&lt;u&gt;Step 5&lt;/u&gt;: In case a collision occurs, the switch implements a back off time wherein no communication occurs on the affected port. After the back off period,a retry is done to send the frame.&lt;/p&gt;

&lt;p&gt;This is how, Switches operating at Layer 2 help to overcome the drawbacks of Layer 1.&lt;/p&gt;

&lt;p&gt;Layer 2 works well at the LAN,WAN level &amp;amp; the internet is a combination of multiple interconnected Layer 2 networks but what if we want to connect multiple devices around the world.&lt;br&gt;
Then we need the layer 3 (Network Layer) which we will talk about in the part 2 of this series.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>beginners</category>
      <category>networking</category>
    </item>
  </channel>
</rss>
