<?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: Arshad Zackeriya  🇳🇿 ☁️ </title>
    <description>The latest articles on DEV Community by Arshad Zackeriya  🇳🇿 ☁️  (@awsfanboy).</description>
    <link>https://dev.to/awsfanboy</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%2F195372%2F2a22c34d-76aa-46a0-addd-b2810d448c8b.png</url>
      <title>DEV Community: Arshad Zackeriya  🇳🇿 ☁️ </title>
      <link>https://dev.to/awsfanboy</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/awsfanboy"/>
    <language>en</language>
    <item>
      <title>good one!</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Wed, 17 Dec 2025 10:38:47 +0000</pubDate>
      <link>https://dev.to/awsfanboy/good-one-j1o</link>
      <guid>https://dev.to/awsfanboy/good-one-j1o</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/aws" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Forganization%2Fprofile_image%2F1726%2F1f5cc5bc-5f61-428d-9d35-ba0c39f8af2d.png" alt="AWS" width="500" height="500"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuser%2Fprofile_image%2F372078%2Ffaefa940-f3bd-4582-a8e9-8660dc2a650f.jpg" alt="" width="512" height="512"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/aws/how-i-built-my-first-app-with-kiro-1569" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How I Built My First App with Kiro&lt;/h2&gt;
      &lt;h3&gt;Derek Bingham ☘️ for AWS ・ Dec 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#genai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kiro&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>genai</category>
      <category>kiro</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Wed, 17 Dec 2025 10:37:50 +0000</pubDate>
      <link>https://dev.to/awsfanboy/-2bof</link>
      <guid>https://dev.to/awsfanboy/-2bof</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/aws" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__org__pic"&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%2Forganization%2Fprofile_image%2F1726%2F1f5cc5bc-5f61-428d-9d35-ba0c39f8af2d.png" alt="AWS" width="500" height="500"&gt;
      &lt;div class="ltag__link__user__pic"&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%2Fuser%2Fprofile_image%2F372078%2Ffaefa940-f3bd-4582-a8e9-8660dc2a650f.jpg" alt="" width="512" height="512"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/aws/how-i-built-my-first-app-with-kiro-1569" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;How I Built My First App with Kiro&lt;/h2&gt;
      &lt;h3&gt;Derek Bingham ☘️ for AWS ・ Dec 12&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#genai&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#kiro&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>genai</category>
      <category>kiro</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Sun, 29 Dec 2024 22:15:25 +0000</pubDate>
      <link>https://dev.to/awsfanboy/-16nm</link>
      <guid>https://dev.to/awsfanboy/-16nm</guid>
      <description>&lt;div class="ltag__link"&gt;
  &lt;a href="/lilupa" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F1349006%2Fd8607000-dd04-449b-9361-f566c6cef2ff.jpeg" alt="lilupa"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="https://dev.to/lilupa/effortless-api-scaling-unlock-the-power-of-aws-appsync-3mhl" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Effortless API Scaling: Unlock the Power of AWS AppSync&lt;/h2&gt;
      &lt;h3&gt;Lilupa Karu ・ Dec 26 '24&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#aws&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#appsync&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#graphql&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#serverless&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>aws</category>
      <category>api</category>
      <category>serverless</category>
      <category>cloudcomputing</category>
    </item>
    <item>
      <title>Simplify IP Utilization Monitoring in Subnets with Serverless Automation</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Mon, 28 Oct 2024 03:23:33 +0000</pubDate>
      <link>https://dev.to/aws-heroes/use-amazon-q-developer-and-aws-infrastructure-composer-to-automate-the-monitoring-of-available-ip-addresses-in-subnets-1hip</link>
      <guid>https://dev.to/aws-heroes/use-amazon-q-developer-and-aws-infrastructure-composer-to-automate-the-monitoring-of-available-ip-addresses-in-subnets-1hip</guid>
      <description>&lt;p&gt;I want to begin with saying that Amazon Q developer and AWS Infrastructure Composer helped me to design this solution in a matter of minutes.&lt;/p&gt;

&lt;p&gt;Amazon Q: &lt;a href="https://aws.amazon.com/q/" rel="noopener noreferrer"&gt;https://aws.amazon.com/q/&lt;/a&gt;&lt;br&gt;
AWS Infrastructure Composer: &lt;a href="https://aws.amazon.com/infrastructure-composer/" rel="noopener noreferrer"&gt;https://aws.amazon.com/infrastructure-composer/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem:
&lt;/h2&gt;

&lt;p&gt;Let's discuss the problem I'm attempting to tackle. IP exhaustion, which occurs when given subnets run out of IPs, is a problem that may arise if you are using Amazon EKS and your workload is growing.&lt;/p&gt;

&lt;p&gt;Unless you have &lt;a href="https://docs.aws.amazon.com/vpc/latest/ipam/what-it-is-ipam.html" rel="noopener noreferrer"&gt;IPAM&lt;/a&gt;, AWS Cloudwatch metrics do not support them at the time I am writing this blog. Monitoring your available IP addresses in subnets without the use of IPAM is what I'm attempting to accomplish here. &lt;/p&gt;

&lt;h2&gt;
  
  
  Solution:
&lt;/h2&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%2F682oc8biv7j6mkse0qri.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%2F682oc8biv7j6mkse0qri.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="493"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  AWS Services involved in this solution:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;AWS Lambda&lt;/li&gt;
&lt;li&gt;Event Bridge Scheduler&lt;/li&gt;
&lt;li&gt;Amazon CloudWatch Metrics&lt;/li&gt;
&lt;li&gt;Amazon CloudWatch Alarm&lt;/li&gt;
&lt;li&gt;Amazon SNS&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Lambda Function
&lt;/h3&gt;

&lt;p&gt;I was able to create this in a matter of minutes with the help of Amazon Q Developer, however, I obviously needed to make a few little adjustments. This is very beneficial if you understand the basics and what you are doing. Instead of configuring AWS services blindly, I recommend everyone to better understand AWS services.&lt;/p&gt;

&lt;h3&gt;
  
  
  Full Python Script here:
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;botocore.exceptions&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;ClientError&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;vpc_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;VPC_ID&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="n"&gt;subnet_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SUBNET_IDS&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;,&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;namespace&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;environ&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NAMESPACE&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

    &lt;span class="n"&gt;ec2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ec2&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;cloudwatch&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;cloudwatch&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;try&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;ec2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;describe_subnets&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;Filters&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;vpc-id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Values&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;vpc_id&lt;/span&gt;&lt;span class="p"&gt;]},&lt;/span&gt;
                &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;subnet-id&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Values&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;subnet_ids&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Subnets&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
            &lt;span class="n"&gt;subnet_id&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SubnetId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;available_ip_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AvailableIpAddressCount&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;cidr_block&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;CidrBlock&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="n"&gt;total_ip_count&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="o"&gt;**&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;32&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nf"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;cidr_block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;/&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]))&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;5&lt;/span&gt;  &lt;span class="c1"&gt;# Subtract 5 for reserved IPs
&lt;/span&gt;
            &lt;span class="n"&gt;subnet_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;subnet_id&lt;/span&gt;  &lt;span class="c1"&gt;# Default to subnet ID if no name tag
&lt;/span&gt;            &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Tags&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;[]):&lt;/span&gt;
                &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
                    &lt;span class="n"&gt;subnet_name&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tag&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
                    &lt;span class="k"&gt;break&lt;/span&gt;

            &lt;span class="n"&gt;utilization_percentage&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="n"&gt;total_ip_count&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;available_ip_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;total_ip_count&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;

            &lt;span class="c1"&gt;# Send metrics to CloudWatch
&lt;/span&gt;            &lt;span class="n"&gt;cloudwatch&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;put_metric_data&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
                &lt;span class="n"&gt;Namespace&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;namespace&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="n"&gt;MetricData&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MetricName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AvailableIPAddresses&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dimensions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SubnetName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;subnet_name&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SubnetId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;subnet_id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                        &lt;span class="p"&gt;],&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;available_ip_count&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Unit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Count&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
                    &lt;span class="p"&gt;},&lt;/span&gt;
                    &lt;span class="p"&gt;{&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;MetricName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;IPUtilizationPercentage&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Dimensions&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SubnetName&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;subnet_name&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
                            &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;SubnetId&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;subnet_id&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;
                        &lt;span class="p"&gt;],&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Value&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;utilization_percentage&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Unit&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Percent&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
                    &lt;span class="p"&gt;}&lt;/span&gt;
                &lt;span class="p"&gt;]&lt;/span&gt;
            &lt;span class="p"&gt;)&lt;/span&gt;

            &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Metrics sent for Subnet: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;subnet_name&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; (ID: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;subnet_id&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;)&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="k"&gt;except&lt;/span&gt; &lt;span class="n"&gt;ClientError&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;An error occurred: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;500&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;e&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Subnet monitoring completed&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;

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

&lt;/div&gt;



&lt;h3&gt;
  
  
  Get IP address utilization:
&lt;/h3&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%2F9t102jw795ejlkqosvta.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%2F9t102jw795ejlkqosvta.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="301"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Send metrics to CloudWatch:
&lt;/h3&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%2F991p9mkfwnc5y6z646cd.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%2F991p9mkfwnc5y6z646cd.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="630"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Use AWS Infrastructure Composer to design the infrastructure.
&lt;/h3&gt;

&lt;p&gt;This further enables you design your infrastructure visually, generate Infrastructure as Code and deploy it using AWS SAM (AWS Serverless Application Model) &lt;a href="https://aws.amazon.com/serverless/sam/" rel="noopener noreferrer"&gt;https://aws.amazon.com/serverless/sam/&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%2Fy1ayt7ya6z5ai0dcj743.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%2Fy1ayt7ya6z5ai0dcj743.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="467"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  How to Deploy
&lt;/h1&gt;

&lt;h2&gt;
  
  
  Prerequisites
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AWS CLI installed and configured with appropriate permissions&lt;/li&gt;
&lt;li&gt;AWS Toolkit for Visual Studio Code installed and configured&lt;/li&gt;
&lt;li&gt;AWS SAM CLI installed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Deployment Steps
&lt;/h2&gt;

&lt;h4&gt;
  
  
  Repository for entire code and instructions on how to deploy: &lt;a href="https://github.com/awsfanboy/aws-subnet-ip-address-utilization-monitor" rel="noopener noreferrer"&gt;https://github.com/awsfanboy/aws-subnet-ip-address-utilization-monitor&lt;/a&gt;
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Modify the &lt;code&gt;template.yaml&lt;/code&gt; file to adjust default parameter values or add/remove resources as needed. eg: VPC ID, Subnet Name, Subnet ID, CloudWatch Metric Namespace.&lt;/li&gt;
&lt;li&gt;(Optional) Update the &lt;code&gt;lambda_function.py&lt;/code&gt; file in the src directory.&lt;/li&gt;
&lt;li&gt;Build the SAM application: &lt;code&gt;sam build&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Deploy the SAM application: &lt;code&gt;sam deploy --guided&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;This will start an interactive deployment process. You'll be prompted to provide values for the parameters defined in the template. You can accept the default values or provide your own.&lt;/li&gt;
&lt;li&gt;During the deployment, you'll be asked to confirm the creation of IAM roles and the changes to be applied. Review and confirm these.&lt;/li&gt;
&lt;li&gt;SAM will output the ARNs of the created Lambda function and SNS topic once the deployment is complete.&lt;/li&gt;
&lt;/ul&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%2Fhtbqyjhmmkon8lzq1x32.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%2Fhtbqyjhmmkon8lzq1x32.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Parameters
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="n"&gt;VpcId&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;ID&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;VPC&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;monitor&lt;/span&gt;
    &lt;span class="n"&gt;SubnetIds&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Comma&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;separated&lt;/span&gt; &lt;span class="nb"&gt;list&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt; &lt;span class="n"&gt;IDs&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;monitor&lt;/span&gt;
    &lt;span class="n"&gt;SubnetName1&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;first&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt;
    &lt;span class="n"&gt;SubnetName2&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Name&lt;/span&gt; &lt;span class="n"&gt;of&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;second&lt;/span&gt; &lt;span class="n"&gt;subnet&lt;/span&gt;
    &lt;span class="n"&gt;CWMetericNamespace&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;The&lt;/span&gt; &lt;span class="n"&gt;CloudWatch&lt;/span&gt; &lt;span class="n"&gt;metric&lt;/span&gt; &lt;span class="n"&gt;namespace&lt;/span&gt;
    &lt;span class="n"&gt;AlertEmail&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Email&lt;/span&gt; &lt;span class="n"&gt;address&lt;/span&gt; &lt;span class="n"&gt;to&lt;/span&gt; &lt;span class="n"&gt;receive&lt;/span&gt; &lt;span class="n"&gt;alerts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Resources Created
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Lambda function for monitoring subnets&lt;/li&gt;
&lt;li&gt;EventBridge rule to trigger the Lambda function every minute&lt;/li&gt;
&lt;li&gt;SNS topic for sending alerts&lt;/li&gt;
&lt;li&gt;CloudWatch alarms for each monitored subnet&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Customization
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To monitor more than two subnets, duplicate the &lt;code&gt;SubnetUtilizationAlarm&lt;/code&gt; resource in the template and adjust the &lt;code&gt;SubnetIds&lt;/code&gt; parameter.&lt;/li&gt;
&lt;li&gt;Modify the Lambda function code in &lt;code&gt;src/lambda_function.py&lt;/code&gt; to implement your specific monitoring logic.&lt;/li&gt;
&lt;li&gt;Adjust the alarm thresholds and evaluation periods in the &lt;code&gt;SubnetUtilizationAlarm&lt;/code&gt; resources as needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Cleanup
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;To remove all resources created by this stack: &lt;code&gt;sam delete&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Follow the prompts to confirm the deletion of resources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Demo
&lt;/h1&gt;

&lt;p&gt;I have an Amazon EKS cluster running a deployment with 6 replicas. Worker nodes are running on 2 Subnets. IP address utilization is looking good.&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%2F6wey2ogr6313pce1gu1e.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%2F6wey2ogr6313pce1gu1e.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The alarm state is OK.&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%2F541pu8sp6dt6q6gwqy9a.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%2F541pu8sp6dt6q6gwqy9a.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Okay! let's increase the number of replicas from &lt;code&gt;6&lt;/code&gt; to &lt;code&gt;600&lt;/code&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%2F8m6imppc2nzzsnrs86cw.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%2F8m6imppc2nzzsnrs86cw.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="500" height="304"&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%2Fb98kfzvvjbzhlnok4t4b.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%2Fb98kfzvvjbzhlnok4t4b.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="183"&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%2Fna1a1venkeffc0dqf1rb.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%2Fna1a1venkeffc0dqf1rb.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="626" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's check metrics from the CloudWatch and ooops! now we can see that IP utilization is high.&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%2F21wtswi863idv6cwz4v3.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%2F21wtswi863idv6cwz4v3.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="610" height="322"&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%2F9x0fnf83ykffvwm0jxdm.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%2F9x0fnf83ykffvwm0jxdm.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now, let's check the Alarms in the CloudWatch. Now the state changed from &lt;code&gt;OK&lt;/code&gt; to &lt;code&gt;ALARM&lt;/code&gt; state.&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%2F0ucpq689l8yfcbzrujwc.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%2F0ucpq689l8yfcbzrujwc.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="139"&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%2Fr5htj5jqz9vs9yuj9pzw.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%2Fr5htj5jqz9vs9yuj9pzw.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's check my emails&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%2F15znwffvuoitkspq8dmg.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%2F15znwffvuoitkspq8dmg.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I can see there are 2 emails in my inbox.&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%2Fqur2zvxtbsi6dnetvnti.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%2Fqur2zvxtbsi6dnetvnti.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="112"&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%2Fpbjluiy5sjyrt4vt5z0h.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%2Fpbjluiy5sjyrt4vt5z0h.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Cost
&lt;/h1&gt;

&lt;p&gt;I calculated the cost using &lt;a href="https://calculator.aws/#/" rel="noopener noreferrer"&gt;calculator.aws&lt;/a&gt;, and it appears to be not bad though.&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%2Fu3ptzvmd5h7oirnhws78.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%2Fu3ptzvmd5h7oirnhws78.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="202" height="249"&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%2Flamoowwevtm1gwf5h1rv.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%2Flamoowwevtm1gwf5h1rv.png" alt="Use Amazon Q developer and AWS Infrastructure Composer to automate the monitoring of available IP addresses in Subnets." width="800" height="411"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  What Next?
&lt;/h1&gt;

&lt;p&gt;These notifications can be sent to Slack, PagerDuty, and other platforms.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;I hope my automation will help someone who doesn't want to use IPAM to monitor IP address utilization in subnets, and I truly wish we could access these metrics straight from CloudWatch.&lt;/p&gt;

&lt;p&gt;If you have any suggestions for improvement or if you would like to use anything you currently have in a different way, please feel free to share.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>amazonq</category>
      <category>awsvpc</category>
      <category>eks</category>
    </item>
    <item>
      <title>We gave a lightning talk at the AWS Summit in Sydney 2024.</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Sat, 27 Apr 2024 07:38:54 +0000</pubDate>
      <link>https://dev.to/aws-builders/we-gave-a-lightning-talk-at-the-aws-summit-in-sydney-2024-o2j</link>
      <guid>https://dev.to/aws-builders/we-gave-a-lightning-talk-at-the-aws-summit-in-sydney-2024-o2j</guid>
      <description>&lt;p&gt;Have you heard about AWS Summits? I attended the AWS Summit in Sydney for the second time with my wife, following my attendance at AWS Summit Singapore in 2019.&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%2F0gr2qzwcei67a7gcdghs.jpg" 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%2F0gr2qzwcei67a7gcdghs.jpg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This year, @geethikaguruge and I presented a session about "Streamlined Deployment to Amazon EKS with Amazon CodeCatalyst" at AWS Summit Sydney. We are honored to represent AWS Community Aotearoa (New Zealand). Thank you &lt;a href="https://awsug.nz/" rel="noopener noreferrer"&gt;AWS UG Aotearoa&lt;/a&gt;. I would like to thank &lt;a href="https://www.linkedin.com/in/belinda-mckeon/" rel="noopener noreferrer"&gt;Belinda&lt;/a&gt; for giving us this opportunity and also thank &lt;a href="https://www.linkedin.com/in/derekwbingham/" rel="noopener noreferrer"&gt;Derek&lt;/a&gt; for all the support he provided. My wife, &lt;a href="https://www.linkedin.com/in/shafwana-shafeek-43b019195/" rel="noopener noreferrer"&gt;Shafwana&lt;/a&gt;, provided me with all the support I needed to prepare my talk.&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%2Ferdmq69j73vdfjksvkzf.jpeg" 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%2Ferdmq69j73vdfjksvkzf.jpeg" alt=" " width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How did Geethika and I prepare for the event?
&lt;/h3&gt;

&lt;p&gt;We both planned our sessions with slides and demos well. We scheduled them a few days every week after dinner to practice and perfect the presentations. Since it was a lightning talk, we had to keep our speeches concise, with no more than 15 minutes. I want to mention the AWS New Voices program. Before the event, I was chosen to be a coach for the program, which provided me with the chance to enhance my public speaking skills while coaching other members of the community. Additionally, I was able to learn from &lt;a href="https://www.linkedin.com/in/meridith/" rel="noopener noreferrer"&gt;Meridith Grundei&lt;/a&gt;, and I would like to express my gratitude to &lt;a href="https://www.linkedin.com/in/markpergola/" rel="noopener noreferrer"&gt;Mark Pergola&lt;/a&gt; for giving me this opportunity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day of the AWS Summit Sydney 2024
&lt;/h3&gt;

&lt;p&gt;Geethika and myself presenting at AWS Summit Sydney&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%2F6hrdjaxob51erpfnw87k.jpeg" 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%2F6hrdjaxob51erpfnw87k.jpeg" alt=" " width="800" height="600"&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%2F69cvgmd65ybcyydxw7yb.jpeg" 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%2F69cvgmd65ybcyydxw7yb.jpeg" alt=" " width="800" height="450"&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%2F095c2mwxpm5inykpv027.jpeg" 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%2F095c2mwxpm5inykpv027.jpeg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Adding more colours to AWS Summit Sydney with &lt;a class="mentioned-user" href="https://dev.to/xelfer"&gt;@xelfer&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/kristinehoward/" rel="noopener noreferrer"&gt;Kristine Howard &lt;/a&gt;
&lt;/h3&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%2Fakus4qgc9t5b8u1ah1f7.jpeg" 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%2Fakus4qgc9t5b8u1ah1f7.jpeg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are interested in printing the AWS icons pattern, you can check it out on my blog by following the link provided: &lt;a href="https://dev.to/aws-builders/level-up-your-aws-community-day-creating-custom-gaming-mats-with-aws-architecture-icons-547n"&gt;https://dev.to/aws-builders/level-up-your-aws-community-day-creating-custom-gaming-mats-with-aws-architecture-icons-547n&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Playing AWS BuildersCard Game
&lt;/h3&gt;

&lt;p&gt;Had an amazing time playing BuildersCard Game while learning about AWS Well-Architected Framework with &lt;a href="https://www.linkedin.com/in/ACoAAAjDBiYB8lvznJf-W-122NHppFKsxqR_19Q?lipi=urn%3Ali%3Apage%3Ad_flagship3_detail_base%3BM4O4%2F7ZUT2Gq4BMn1DJ8vQ%3D%3D" rel="noopener noreferrer"&gt;Shehan Marino Perera&lt;/a&gt; at AWS Summit Sydney. Thank you &lt;a href="https://www.linkedin.com/in/ACoAACIqq-cBRAONOeYo10Zi67QWKvA2XAraHMA?lipi=urn%3Ali%3Apage%3Ad_flagship3_detail_base%3BM4O4%2F7ZUT2Gq4BMn1DJ8vQ%3D%3D" rel="noopener noreferrer"&gt;Aileen Lu&lt;/a&gt; &lt;a href="https://www.linkedin.com/in/ACoAAAg26mMBZUlwv-Ef7glzttDU5xfQmp-tO_0?lipi=urn%3Ali%3Apage%3Ad_flagship3_detail_base%3BM4O4%2F7ZUT2Gq4BMn1DJ8vQ%3D%3D" rel="noopener noreferrer"&gt;David Heidt&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%2Fu0af3kgggka0h1r1dmgl.jpeg" 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%2Fu0af3kgggka0h1r1dmgl.jpeg" alt=" " width="800" height="800"&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%2Ft7y81urqp6gukpbubbq5.jpeg" 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%2Ft7y81urqp6gukpbubbq5.jpeg" alt=" " width="800" height="778"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;a class="mentioned-user" href="https://dev.to/zachjonesnoel"&gt;@zachjonesnoel&lt;/a&gt; and I gave away some of our swags
&lt;/h4&gt;

&lt;p&gt;With &lt;a class="mentioned-user" href="https://dev.to/xelfer"&gt;@xelfer&lt;/a&gt; and &lt;a class="mentioned-user" href="https://dev.to/ssennettau"&gt;@ssennettau&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%2Fiz2yp05i4fm3c4v9kes0.jpg" 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%2Fiz2yp05i4fm3c4v9kes0.jpg" alt=" " width="800" height="1062"&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%2Fntpy1kemwopl9coxhbub.jpg" 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%2Fntpy1kemwopl9coxhbub.jpg" alt=" " width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  After attending the summit, I attended the ANZ Community Leaders Meetup
&lt;/h3&gt;

&lt;p&gt;First of all, &lt;a class="mentioned-user" href="https://dev.to/shafjag"&gt;@shafjag&lt;/a&gt;, I would like to thank you for organizing such a great event. &lt;/p&gt;

&lt;p&gt;Amazing sessions by &lt;a href="https://www.linkedin.com/in/kristinehoward/" rel="noopener noreferrer"&gt;Kris Howard&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/mikegchambers/" rel="noopener noreferrer"&gt;Mike Chambers&lt;/a&gt; &lt;a href="https://www.linkedin.com/in/cloudnavig8r/" rel="noopener noreferrer"&gt;Scott Friend&lt;/a&gt; and &lt;a href="https://www.linkedin.com/in/mariaencinar/" rel="noopener noreferrer"&gt;Maria Encinar&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%2Fmhnrjins7uv3uc52cdtn.jpg" 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%2Fmhnrjins7uv3uc52cdtn.jpg" alt=" " width="800" height="450"&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%2F38j2n83n3anb81qr9ffg.jpg" 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%2F38j2n83n3anb81qr9ffg.jpg" alt=" " width="800" height="450"&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%2F27njioj5nnap4yc1mvsc.jpg" 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%2F27njioj5nnap4yc1mvsc.jpg" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  It's all about community
&lt;/h3&gt;

&lt;p&gt;I am proud to be part of the AWS Community Aotearoa (New Zealand) and grateful for the opportunity. &lt;/p&gt;

</description>
      <category>aws</category>
      <category>awssummit</category>
      <category>kubernetes</category>
      <category>eks</category>
    </item>
    <item>
      <title>How to Secure Your AWS Account Using a Hardware security key [YubiKey]</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Sun, 25 Feb 2024 00:42:31 +0000</pubDate>
      <link>https://dev.to/aws-builders/how-to-secure-your-aws-account-using-a-hardware-security-key-yubikey-2mo0</link>
      <guid>https://dev.to/aws-builders/how-to-secure-your-aws-account-using-a-hardware-security-key-yubikey-2mo0</guid>
      <description>&lt;p&gt;I have set up Single Sign-On (SSO) for my personal AWS account, which is great because it allows me to effortlessly switch between AWS accounts while doing podcasts, live demos, or learning. I recently purchased a YubiKey from &lt;a href="https://www.yubico.com/" rel="noopener noreferrer"&gt;https://www.yubico.com/&lt;/a&gt; to secure my personal AWS Account. You might be wondering why it's necessary to secure your AWS Account. It's important to keep your account secure regardless of whether you're using it for learning or production purposes. &lt;/p&gt;

&lt;h3&gt;
  
  
  AWS provides several options for setting up a MFA device. In this article, I will demonstrate how to easily configure Yubikey for SSO user log in in AWS.
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Authenticator App

&lt;ul&gt;
&lt;li&gt;Google Authenticator, Authy, or other similar apps for two-factor authentication.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Please ensure that you have already enabled this feature.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Built-in authenticator&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;For example, Apple Touch ID, Windows Hello, or similar technology.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Security Key&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Using a hardware security key, such as YubiKey, for authentication purposes. I am writing about this topic today.&lt;/li&gt;
&lt;li&gt;If you'd like to learn more about &lt;code&gt;WebAuthn&lt;/code&gt; and &lt;code&gt;FIDO2&lt;/code&gt;, I recommend checking out this article: &lt;a href="https://aws.amazon.com/blogs/aws/multi-factor-authentication-with-webauthn-for-aws-sso/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/aws/multi-factor-authentication-with-webauthn-for-aws-sso/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This is what I bought from &lt;a href="https://www.yubico.com/nz/product/yubikey-bio-series/yubikey-c-bio/" rel="noopener noreferrer"&gt;https://www.yubico.com/nz/product/yubikey-bio-series/yubikey-c-bio/&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%2Fjcyakxkv1sl1lfs2yizs.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%2Fjcyakxkv1sl1lfs2yizs.png" alt=" " width="792" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's get started
&lt;/h2&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%2Fddaq3585xmjw2bhjdjwz.jpg" 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%2Fddaq3585xmjw2bhjdjwz.jpg" alt=" " width="564" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to AWS SSO&lt;/li&gt;
&lt;/ul&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%2Fsaai6567rxtkef447262.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%2Fsaai6567rxtkef447262.png" alt="Image AWS SSO Log in" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Click the &lt;code&gt;MFA Devices&lt;/code&gt; and click &lt;code&gt;Register device&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fvohijce2lgvjed51vwvn.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%2Fvohijce2lgvjed51vwvn.png" alt=" " width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Select &lt;code&gt;Security key&lt;/code&gt; and click &lt;code&gt;Next&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&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%2Fay4kzi2to8lt4bw5kbpq.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%2Fay4kzi2to8lt4bw5kbpq.png" alt=" " width="800" height="701"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Insert the YubiKey into the USB port and touch the fingerprint reader (If you are using the same version), I bought a &lt;code&gt;USB C Bio&lt;/code&gt; version. Allow the site to access the Key.&lt;/li&gt;
&lt;/ul&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%2Fgq5kohj9n9v05o222cxr.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%2Fgq5kohj9n9v05o222cxr.png" alt=" " width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enter the PIN "When setting up your YubiKey for the first time, you must create a secure PIN"&lt;/li&gt;
&lt;/ul&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%2Fffaydtzymnjm9rjncpmq.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%2Fffaydtzymnjm9rjncpmq.png" alt=" " width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Touch the key again to complete the setup&lt;/li&gt;
&lt;/ul&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%2Fxrbp9c7edfbrguzg3ume.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%2Fxrbp9c7edfbrguzg3ume.png" alt=" " width="800" height="771"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Yay!! The security key has been registered successfully.&lt;/li&gt;
&lt;/ul&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%2Ffnpxjyv7knyupu9vdyfr.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%2Ffnpxjyv7knyupu9vdyfr.png" alt=" " width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I can see that a new security key has been added to the MFA devices.&lt;/li&gt;
&lt;/ul&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%2Fbngh8b8n1oh4dxeq284e.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%2Fbngh8b8n1oh4dxeq284e.png" alt=" " width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's log in back to the AWS SSO
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;After you enter your username and password, it will display a prompt that looks like this.&lt;/li&gt;
&lt;/ul&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%2F8tj8fti90mlx2znrqz19.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%2F8tj8fti90mlx2znrqz19.png" alt=" " width="800" height="758"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Plug the key and touch the fingerprint sensor&lt;/li&gt;
&lt;/ul&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%2Fk5t6os4s3rnrlau7qpc3.jpg" 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%2Fk5t6os4s3rnrlau7qpc3.jpg" alt=" " width="800" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;WebAuthn is a highly secure authentication method. By using a hardware security key, you can make log in to and securing your AWS account much easier. In this article, I have demonstrated how to secure your AWS SSO log in using hardware security key (YubiKey). However, you can also use a hardware security key to secure your IAM access.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>security</category>
      <category>awssso</category>
      <category>learning</category>
    </item>
    <item>
      <title>My experience with using AWS Application Composer in Visual Studio Code</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Thu, 01 Feb 2024 21:02:01 +0000</pubDate>
      <link>https://dev.to/aws-builders/my-experience-with-using-aws-application-composer-in-visual-studio-code-143p</link>
      <guid>https://dev.to/aws-builders/my-experience-with-using-aws-application-composer-in-visual-studio-code-143p</guid>
      <description>&lt;p&gt;We all love shopping. And what if we could buy everything we need in one place? The same concept applies to our development tools. At the 2022 AWS re:Invent, AWS announced an amazing tool called AWS Application Composer. With this tool, you can build your serverless application on a visual canvas. Later on, AWS expanded its support to cover not only serverless applications, but also over 1000+ CloudFormation resources.&lt;/p&gt;

&lt;p&gt;During the 2023 AWS re:Invent, AWS announced the support of AWS Application Composer in AWS Toolkit for Visual Studio Code . I find this very exciting because it allows developers to use the AWS Application Composer, as well as Amazon Q, CodeWhisperer, CodeCatalyst all in one place in the Visual Studio Code editor. This will make infrastructure-as-code (IaC) development quicker and reduce the need for context switching.&lt;/p&gt;

&lt;p&gt;This post is mainly about to show the experience of AWS Application Composer in Visual Studio Code. &lt;/p&gt;

&lt;h4&gt;
  
  
  Prerequisites
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Visual Studio Code

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://code.visualstudio.com/" rel="noopener noreferrer"&gt;https://code.visualstudio.com/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;AWS Toolkit for Visual Studio Code

&lt;ul&gt;
&lt;li&gt;download from here &lt;a href="https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-toolkit-vscode" rel="noopener noreferrer"&gt;https://marketplace.visualstudio.com/items?itemName=AmazonWebServices.aws-toolkit-vscode&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h4&gt;
  
  
  This is the updated AWS Toolkit for Visual Studio Code
&lt;/h4&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%2Fo5he3oau10g0d3eqrynu.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%2Fo5he3oau10g0d3eqrynu.png" alt="AWS Toolkit for Visual Studio Code" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  AWS Application Composer in Visual Studio CODE
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;It's really simple, just create a blank yaml file eg: &lt;code&gt;template.yaml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Right click on the file and click &lt;code&gt;Open with Application Composer&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;If you are using a big screen you can experience the best out of it &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To make things easier to show, I made a little video. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/DbuvKm6HcGc"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;I basically used AWS Application Composer in Visual Studio Code to create a lambda function and lambda layer, which generated my IaC. How awesome is that?&lt;/p&gt;

&lt;p&gt;The following video demonstrates how to use the AWS Step Functions Workflow Studio using AWS Application Composer in Visual Studio Code.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/-jJUylCqiZ4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h4&gt;
  
  
  AWS Application Composer Support 1000+ CloudFormation resources
&lt;/h4&gt;

&lt;p&gt;I launched a CloudFormation Stack for an EKS Cluster with all the dependencies, like as a VPC, NAT Gateway, SUBNETS, and so on, because I was curious to try this out in Visual Studio Code. It was beautifully visualized using AWS Application Composer. &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%2Fqhjgnpdp5mqhfzlw1ujc.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%2Fqhjgnpdp5mqhfzlw1ujc.png" alt="AWS Application Composer Support 1000+ CloudFormation resources" width="800" height="476"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Conclusion
&lt;/h4&gt;

&lt;p&gt;I want to stay away from context switching as a developer. Amazon Q, CodeWhisperer, CodeCatalyst, and Application Composer are now  all available in one location. This will help with the development of code for me and other developers. &lt;/p&gt;

&lt;p&gt;In my next article, I'll go into detail on how to use AWS SAM to deploy your infrastructure.&lt;/p&gt;

&lt;p&gt;Me and &lt;a class="mentioned-user" href="https://dev.to/zachjonesnoel"&gt;@zachjonesnoel&lt;/a&gt; will be doing deep dive soon in our of the &lt;a href="https://www.youtube.com/@thezacsshowtalkingaws/streams" rel="noopener noreferrer"&gt;The Zacs' Show Talking AWS Shows&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devtools</category>
      <category>devops</category>
      <category>aws</category>
      <category>awsapplicationcomposer</category>
    </item>
    <item>
      <title>Level Up Your AWS Community Day: Creating Custom Gaming Mats with AWS Architecture Icons</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Sun, 10 Sep 2023 21:44:27 +0000</pubDate>
      <link>https://dev.to/aws-builders/level-up-your-aws-community-day-creating-custom-gaming-mats-with-aws-architecture-icons-547n</link>
      <guid>https://dev.to/aws-builders/level-up-your-aws-community-day-creating-custom-gaming-mats-with-aws-architecture-icons-547n</guid>
      <description>&lt;p&gt;The AWS Community Day Aotearoa- 2023 (New Zealand) was a success. This Gaming Mat SWAG drew a lot of attention from the attendees. First and foremost, I'd like to thank fellow AWS Community Builder &lt;a class="mentioned-user" href="https://dev.to/rmitula"&gt;@rmitula&lt;/a&gt; for his assistance in designing the Gaming Mat for AWS Community Day Aotearoa (New Zealand). The custom-made AWS Architecture Icons Mouse Pad that was given away during Poland AWS Community Day - Warsaw inspired me to do this.&lt;/p&gt;

&lt;p&gt;Here is the Cool Gaming Mat:&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%2Fy1asx0mr9sgjig0jobp9.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%2Fy1asx0mr9sgjig0jobp9.png" alt=" " width="800" height="320"&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%2Fohi75at981jj7tek6kgh.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%2Fohi75at981jj7tek6kgh.png" alt=" " width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I decided to include the steps and a script for creating the Gaming Mat design.&lt;/p&gt;

&lt;p&gt;Check this out if you're searching for some fantastic SWAGS for your AWS Community Day: &lt;a href="https://github.com/awsfanboy/AWS-Community-Day-Gaming-Mat" rel="noopener noreferrer"&gt;https://github.com/awsfanboy/AWS-Community-Day-Gaming-Mat&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let me know if you need any help :) .&lt;/p&gt;

</description>
      <category>community</category>
      <category>aws</category>
      <category>python</category>
      <category>awscommunityday</category>
    </item>
    <item>
      <title>Fortify Your AWS Network Security with AWS Network Firewall: A Complete Guide (Terraform Code included)</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Mon, 06 Mar 2023 10:28:05 +0000</pubDate>
      <link>https://dev.to/aws-builders/lets-play-with-aws-network-firewall-hands-on-lab-2ha4</link>
      <guid>https://dev.to/aws-builders/lets-play-with-aws-network-firewall-hands-on-lab-2ha4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;I've wanted to write about this since last December, when I participated in a session at AWS Community Day Sri Lanka 2022, which was organised by AWS User Group Colombo. During the session, I delivered a speech and demonstrated how awesome and simple it is to set up an AWS Network firewall. later on, with Terraform, I was able to codify my demo to infrastructure as code. I hope you all enjoy this step-by-step guided workshop.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  What you will get from this post (Hands on Lab)
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Understand AWS Network Security&lt;/li&gt;
&lt;li&gt;Learn about few of AWS Networking Services&lt;/li&gt;
&lt;li&gt;Step-by-Step guide on how to deploy AWS Network Firewall using terraform&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Prerequisites
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;AWS Account&lt;/li&gt;
&lt;li&gt;Terraform (Version is available in the Github repo)&lt;/li&gt;
&lt;li&gt;To use this lab, you need to have a basic understanding of the following services.

&lt;ul&gt;
&lt;li&gt;VPC, Route Tables&lt;/li&gt;
&lt;li&gt;Transit Gateway&lt;/li&gt;
&lt;li&gt;VPC Endpoints&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;But before we dive into the AWS Network Firewall, it's essential that we comprehend a few things.&lt;/p&gt;

&lt;h1&gt;
  
  
  Basic AWS Network Security and Limitations
&lt;/h1&gt;

&lt;p&gt;When you have multiple AWS accounts and VPCs, it is difficult to monitor, govern, and enforce security on the network resources.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A complicated hybrid network configuration in which multiple AWS networking services are linked with on-premises environments and AWS VPN traffic.&lt;/li&gt;
&lt;li&gt;Manage multiple Security Groups and Limited rules supported by Security Groups. As of this writing, only 60 inbound rules for IPv4 and 60 inbound rules for IPv6 traffic are supported.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  Little bit about AWS PrivateLink and VPC Endpoints, VPC Endpoint Services
&lt;/h1&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%2Fqpkirktttkda19g83i5q.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%2Fqpkirktttkda19g83i5q.png" alt="AWS PrivateLink" width="621" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ref : &lt;a href="https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/vpc/latest/privatelink/concepts.html&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;AWS PrivateLink is a networking service offered by AWS that allows for secure and private communication between VPCs and AWS services without the need for traffic to pass through the internet or a NAT gateway. It uses VPC endpoints to establish a private connection between your VPC and AWS services via the AWS network, thereby avoiding the public internet.&lt;/p&gt;

&lt;p&gt;You can create a private, highly available and scalable connection between your VPC and AWS services or your own application services running on EC2 instances, AWS Lambda functions, or other AWS resources using VPC endpoints and endpoint services.&lt;/p&gt;

&lt;h1&gt;
  
  
  Little bit about the Gateway Load Balancer
&lt;/h1&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%2Fku35xdcwrlbbw6tjpll5.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%2Fku35xdcwrlbbw6tjpll5.png" alt="Gateway Load Balancer" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Ref : &lt;a href="https://aws.amazon.com/blogs/networking-and-content-delivery/integrate-your-custom-logic-or-appliance-with-aws-gateway-load-balancer/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/networking-and-content-delivery/integrate-your-custom-logic-or-appliance-with-aws-gateway-load-balancer/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Gateway Load Balancers enable the deployment, scalability, and management of virtual appliances such as firewalls, intrusion detection and prevention systems, and deep packet inspection systems. It combines a transparent network gateway (a single entry and exit point for all traffic) and traffic distribution while scaling your virtual appliances with demand.&lt;/p&gt;

&lt;p&gt;For an example, if you want to deploy Trendmicro, Fortinet, Palo Alto Networks, or any other vendor's Appliances as your Firewall in your AWS Cloud Infrastructure, Gateway Load Balancer fulfils that requirement.&lt;/p&gt;

&lt;h2&gt;
  
  
  You may be wondering why this guy is talking everything but AWS Network Firewall
&lt;/h2&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%2Ffjvv0gfcajeh3eia9poi.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%2Ffjvv0gfcajeh3eia9poi.png" alt="dogo" width="600" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;AWS Network Firewall is actually powered by AWS Gateway Load Balancer.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Yes! Yes, you read that correctly. So, what is the difference between Gateway Load Balancer and AWS Network Firewall? Simply put, if you want to use a third-party firewall solution as an appliance, you can pick Gateway Load Balancer, but you must manage the infrastructure of the firewall instance. However, if you require a Firewall solution that can be deployed fast, is a managed service and is highly available, then AWS Network Firewall is the solution.&lt;/p&gt;

&lt;h1&gt;
  
  
  Let's go to AWS Network Firewall now
&lt;/h1&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%2Fmab9garc9ffsygawbaj1.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%2Fmab9garc9ffsygawbaj1.png" alt="yay meme" width="700" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS Network Firewall is a fully managed network security service offered by AWS that enables users to set up, manage, and scale firewall protection across their VPC and on-premises networks.&lt;/p&gt;

&lt;h1&gt;
  
  
  AWS Network Firewall Supports
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;OSI Layer 3 and 7 Traffic Filtering&lt;/li&gt;
&lt;li&gt;Domain name filtering&lt;/li&gt;
&lt;li&gt;More number of rules&lt;/li&gt;
&lt;li&gt;Inspect traffic between VPCs (Through TGW) or inbound/outbound Internet traffic&lt;/li&gt;
&lt;li&gt;AWS Direct Connect and AWS VPN traffic running through AWS Transit Gateway&lt;/li&gt;
&lt;li&gt;Managed rules from the AWS Marketplace&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;As of the time of writing, AWS Network Firewall does not support (DPI) Deep Packet Inspection for encrypted traffic. Gateway Load Balancer is the best solution if you are looking for such a solution. As well as the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;VPC peering traffic&lt;/li&gt;
&lt;li&gt;Virtual private gateways&lt;/li&gt;
&lt;li&gt;Inspection of AWS Global Accelerator traffic&lt;/li&gt;
&lt;li&gt;Inspection of AmazonProvidedDNS traffic for Amazon EC2&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I'm not going to deep into detail about AWS Network Firewall offerings because we have these excellent documents instead. &lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;a href="https://aws.amazon.com/network-firewall/faqs/" rel="noopener noreferrer"&gt;https://aws.amazon.com/network-firewall/faqs/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h1&gt;
  
  
  Architecture of The Lab
&lt;/h1&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%2Fxphzt7ts31hxy9b4cutt.jpeg" 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%2Fxphzt7ts31hxy9b4cutt.jpeg" alt=" Architecture of The Lab - devops with zack" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Clone the project
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;git clone https://github.com/devopswithzack/lab-aws-networkfirewall.git&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;code&gt;cd lab-aws-networkfirewall&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Once cloned, open it in an IDE such as VSCODE. Before we proceed, we must make some changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Generate the keys for EC2 instances
&lt;/h3&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%2Fl15lw91g6nf87qwvtksj.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%2Fl15lw91g6nf87qwvtksj.png" alt="Generate the keys for EC2 instances" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Then copy the public key and paste in the &lt;code&gt;env.tfvars&lt;/code&gt;
&lt;/h3&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%2F2hz5wlvhreiz2ig46j50.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%2F2hz5wlvhreiz2ig46j50.png" alt="Then copy the public key and paste in the  raw `env.tfvars` endraw " width="800" height="43"&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%2Fgn8argag1swv562eqru2.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%2Fgn8argag1swv562eqru2.png" alt="Then copy the public key and paste in the  raw `env.tfvars` endraw " width="800" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;This is an optional step. Use only if your backend is an S3 bucket and you want to keep your state in DynamoDB.&lt;/p&gt;
&lt;/blockquote&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%2F1pybol5mkmc7n6u0xs39.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%2F1pybol5mkmc7n6u0xs39.png" alt="This is an optional step. Use only if your backend is an S3 bucket and you want to keep your state in DynamoDB." width="578" height="154"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Run a terraform init
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;terraform init&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;My backend is a S3 bucket and I use dynamo db to lock my state. If you use the same, you can use the &lt;code&gt;backend.conf&lt;/code&gt; file with &lt;code&gt;terraform init -backend-config=backend.conf&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Once all done , run &lt;code&gt;terraform plan&lt;/code&gt; to verify the resources that you are going to create.
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;terraform plan -var-file=env.tfvars&lt;/code&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Now we can apply using the terraform apply
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;terraform apply -var-file=env.tfvars&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Type &lt;code&gt;yes&lt;/code&gt; and enter to the prompt.&lt;/p&gt;

&lt;p&gt;this will take some time to deploy.&lt;/p&gt;

&lt;p&gt;I'm going to cover two scenarios in this lab.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Bastion host in the Egrees VPC public subnet accessing the App EC2 instance in the App VPC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;App EC2 in the APP VPC's private subnet accessing &lt;code&gt;https://www.google.com&lt;/code&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;




&lt;h1&gt;
  
  
  Let's test the AWS Network Firewall.
&lt;/h1&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%2F7qqtu68ubbd9codjk71m.jpeg" 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%2F7qqtu68ubbd9codjk71m.jpeg" alt="Let's test the AWS Network Firewall." width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The numbers listed below correspond to the yellow circled numbers in the architecture diagram.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h1&gt;
  
  
  Scenario 1
&lt;/h1&gt;

&lt;p&gt;SSH into the JUMP HOST, which is on the Public subnet and has port 22 open to the public.&lt;/p&gt;

&lt;p&gt;1- SSH from JUMP HOST to the APP EC2 in the APP VPC's Private Subnet&lt;br&gt;
2 - Routing to &lt;code&gt;10.0.0.8/8&lt;/code&gt; results in TGW&lt;br&gt;
3 - It should go to Inspection VPC, according to the TGW attachment&lt;br&gt;
4 - Direct traffic to the AWS Network Firewall VPC Endpoint &lt;code&gt;vpce-az-a-id&lt;/code&gt;&lt;br&gt;
5 - After passing through the firewall, the traffic is routed to the tgw route tables&lt;br&gt;
6 - TGW routes traffic to &lt;code&gt;10.1.0.0/16&lt;/code&gt; and sends it to App VPC&lt;/p&gt;
&lt;h1&gt;
  
  
  Scenario 2
&lt;/h1&gt;

&lt;p&gt;The app server attempts to connect the &lt;code&gt;https://www.google.com&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;7 - Access to &lt;code&gt;https://www.google.com&lt;/code&gt;&lt;br&gt;
8 - Any traffic should go to the TGW, according to the Route Tables&lt;br&gt;
9 - According to the TGW attachment, it should go to Inspection VPC&lt;br&gt;
10 - Send traffic directly to the AWS Network Firewall VPC Endpoint &lt;code&gt;vpce-az-a-id&lt;/code&gt;&lt;br&gt;
11 - Traffic is routed to the tgw route tables after passing through the firewall&lt;br&gt;
12 - Internet traffic is routed to the Egress VPC using the TGW Route Tables&lt;br&gt;
13 - A NAT Gateway traffic route&lt;br&gt;
14 - The Internet Gateway directs traffic to &lt;code&gt;https://www.google.com&lt;/code&gt;&lt;/p&gt;
&lt;h1&gt;
  
  
  Test 1 - Check the SSH Traffic
&lt;/h1&gt;

&lt;ol&gt;
&lt;li&gt;SSH to The Jump Host using the public IP, Both APP EC2 and the JUMP host&lt;/li&gt;
&lt;/ol&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%2Ftk67lkbnt7hvo0ph0y3f.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%2Ftk67lkbnt7hvo0ph0y3f.png" alt="SSH to The Jump Host using the public IP, Both APP EC2 and the JUMP host" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Now copy the same SSH Private key we created to the Jump host as &lt;code&gt;sshkey.pem&lt;/code&gt; and set the permission as &lt;code&gt;chmod 400 sshkey.pem&lt;/code&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Get the private IP of the APP EC2 from the console and try to SSH from the JUMP HOST&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2F95inax4c88zgt3sa91g4.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%2F95inax4c88zgt3sa91g4.png" alt="Get the private IP of the APP EC2 from the console and try to SSH from the JUMP HOST" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You may notice that it will take some time and that you will be given a timeout.&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%2F2k0kbc9ehpxk0dt4e0nq.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%2F2k0kbc9ehpxk0dt4e0nq.png" alt="timeout" width="800" height="93"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In one of the AWS Network Firewall Rule Groups, SSH Access has been blocked.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Block SSH&lt;/span&gt;
&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_networkfirewall_rule_group"&lt;/span&gt; &lt;span class="s2"&gt;"block_ssh"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;capacity&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"block-ssh"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"STATEFUL"&lt;/span&gt;
  &lt;span class="nx"&gt;rule_group&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;rules_source&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;stateful_rule&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;action&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"DROP"&lt;/span&gt;
        &lt;span class="nx"&gt;header&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;destination&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ANY"&lt;/span&gt;
          &lt;span class="nx"&gt;destination_port&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ANY"&lt;/span&gt;
          &lt;span class="nx"&gt;direction&lt;/span&gt;        &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ANY"&lt;/span&gt;
          &lt;span class="nx"&gt;protocol&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"SSH"&lt;/span&gt;
          &lt;span class="nx"&gt;source&lt;/span&gt;           &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ANY"&lt;/span&gt;
          &lt;span class="nx"&gt;source_port&lt;/span&gt;      &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"ANY"&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
        &lt;span class="nx"&gt;rule_option&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;keyword&lt;/span&gt;  &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"sid"&lt;/span&gt;
          &lt;span class="nx"&gt;settings&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"1"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Let's now manually remove the rule from the console and try it again.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Navigate to the VPC in AWS Console, then select 'Firewalls' from the Network Firewall section&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;There are two rule groups under Stateful Rule Groups.&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%2Fmhxwdzgi0k8melt551db.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%2Fmhxwdzgi0k8melt551db.png" alt=" " width="800" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Disassociate the &lt;code&gt;block-ssh&lt;/code&gt; from the rule group&lt;/li&gt;
&lt;/ol&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%2Fnyrw2olhp5tm213j9aif.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%2Fnyrw2olhp5tm213j9aif.png" alt="Disassociate the  raw `block-ssh` endraw  from the rule group" width="800" height="144"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Wait 1-2 Minutes&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ol&gt;
&lt;li&gt;SSH to the APP EC2 from the JUMP HOST. Now you should be able to SSH&lt;/li&gt;
&lt;/ol&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%2Ftzfjld73tl03un00f3ls.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%2Ftzfjld73tl03un00f3ls.png" alt="SSH to the APP EC2 from the JUMP HOST. Now you should be able to SSH" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Do not exit the APP EC2, as we will try the next scenario&lt;/li&gt;
&lt;/ol&gt;

&lt;h1&gt;
  
  
  Test 2 - Access &lt;code&gt;https://www.google.com&lt;/code&gt; from the APP EC2 server
&lt;/h1&gt;

&lt;p&gt;As you are still in the APP EC2 server try to &lt;code&gt;curl&lt;/code&gt; the &lt;code&gt;https://www.google.com&lt;/code&gt; You will get a time out eventually&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%2Fvjnua88nqfwecq4290oz.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%2Fvjnua88nqfwecq4290oz.png" alt="As you are still in the APP EC2 server try to  raw `curl` endraw  the  raw `https://www.google.com` endraw  You will get a time out eventually" width="569" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In one of the AWS Network Firewall Rule Groups, Accessing &lt;code&gt;google.com&lt;/code&gt; is been blocked.&lt;/p&gt;

&lt;p&gt;The IP CIDR range from APP VPC is not permitted to access '*.google.com', according to the terraform resource code block below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight terraform"&gt;&lt;code&gt;&lt;span class="c1"&gt;# Block google.com&lt;/span&gt;
&lt;span class="k"&gt;resource&lt;/span&gt; &lt;span class="s2"&gt;"aws_networkfirewall_rule_group"&lt;/span&gt; &lt;span class="s2"&gt;"block_google"&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nx"&gt;capacity&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;100&lt;/span&gt;
  &lt;span class="nx"&gt;name&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"block-google"&lt;/span&gt;
  &lt;span class="nx"&gt;type&lt;/span&gt;     &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"STATEFUL"&lt;/span&gt;
  &lt;span class="nx"&gt;rule_group&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;rule_variables&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;ip_sets&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;key&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"HOME_NET"&lt;/span&gt;
        &lt;span class="nx"&gt;ip_set&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
          &lt;span class="nx"&gt;definition&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;module&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;app_vpc&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;vpc_cidr_block&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="nx"&gt;rules_source&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="nx"&gt;rules_source_list&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nx"&gt;generated_rules_type&lt;/span&gt; &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"DENYLIST"&lt;/span&gt;
        &lt;span class="nx"&gt;target_types&lt;/span&gt;         &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"HTTP_HOST"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;"TLS_SNI"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="nx"&gt;targets&lt;/span&gt;              &lt;span class="p"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;".google.com"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Let's now manually remove the rule from the console and try it again. Follow the same steps in Test scenario one to access the rule groups
&lt;/h3&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%2Fn9b0nukyc6lgud2jzf2b.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%2Fn9b0nukyc6lgud2jzf2b.png" alt="Let's now manually remove the rule from the console and try it again. Follow the same steps in Test scenario one to access the rule groups" width="800" height="137"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Wait 1-2 Minutes&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Now curl the &lt;code&gt;https://www.google.com&lt;/code&gt; url from the APP EC2  Server
&lt;/h3&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%2Fh7ae8s8oztaxfpkq0lpy.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%2Fh7ae8s8oztaxfpkq0lpy.png" alt="Now curl the  raw `https://www.google.com` endraw  url from the APP EC2  Server" width="800" height="134"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now you should be able to access &lt;code&gt;https://www.google.com&lt;/code&gt;.&lt;/p&gt;




&lt;h1&gt;
  
  
  CloudWatch Logs
&lt;/h1&gt;

&lt;h3&gt;
  
  
  In the AWS Console, go to CloudWatch and select the logs groups
&lt;/h3&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%2Fur2bsln2i105cak3ksvu.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%2Fur2bsln2i105cak3ksvu.png" alt="In the AWS Console, go to CloudWatch and select the logs groups" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You should be able to see the alert logs, click on them, and examine the logs&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Block SSH
&lt;/h2&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%2Fex3bubouwtg8beid0klk.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%2Fex3bubouwtg8beid0klk.png" alt="Block SSH" width="800" height="304"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Block Google.com
&lt;/h2&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%2Fy3k0gmzlar73sf7ktj9h.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%2Fy3k0gmzlar73sf7ktj9h.png" alt="Block Google.com" width="800" height="320"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Delete the lab
&lt;/h1&gt;

&lt;p&gt;When you're finished testing, make sure to delete the stack to avoid charging.&lt;code&gt;terraform destroy -var-file=env.tfvars&lt;/code&gt;&lt;/p&gt;




&lt;h1&gt;
  
  
  Let's wrap this up
&lt;/h1&gt;

&lt;p&gt;You now understand how the AWS Network Firewall works and how to integrate it into your infrastructure. If you want to contribute to this LAB, please open a PR in the repo: &lt;a href="https://dev.tourl"&gt;&lt;/a&gt;&lt;a href="https://github.com/awsfanboy/lab-aws-networkfirewall" rel="noopener noreferrer"&gt;https://github.com/awsfanboy/lab-aws-networkfirewall&lt;/a&gt; . I welcome feedback and suggestions, so please leave them in the comments or email them to &lt;code&gt;hello@awsfanboy.com&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>terraform</category>
      <category>devops</category>
    </item>
    <item>
      <title>Manage CodeCommit and CodePipeline in Multiple AWS Accounts</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Sun, 13 Feb 2022 15:09:10 +0000</pubDate>
      <link>https://dev.to/awsfanboy/manage-codecommit-and-codepipeline-in-multiple-aws-accounts-18i5</link>
      <guid>https://dev.to/awsfanboy/manage-codecommit-and-codepipeline-in-multiple-aws-accounts-18i5</guid>
      <description>&lt;p&gt;This video demonstrate how to setup AWS Codepipelines in multiple AWS accounts with single CodeComit as a Single Source Of Truth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/bB3vwAUgsBk" rel="noopener noreferrer"&gt;https://youtu.be/bB3vwAUgsBk&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Use this repo to access the IAM policy materials used in this demo.&lt;br&gt;
&lt;a href="https://github.com/awsfanboy/aws-codecommit-with-crossaccount-codepipeline" rel="noopener noreferrer"&gt;https://github.com/awsfanboy/aws-codecommit-with-crossaccount-codepipeline&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>AWS VPC Endpoint Service for Access Elasticache Redis From Multiple AWS Accounts</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Wed, 20 Oct 2021 12:58:40 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-vpc-endpoint-service-for-access-elasticache-redis-from-multiple-aws-accounts-439d</link>
      <guid>https://dev.to/aws-builders/aws-vpc-endpoint-service-for-access-elasticache-redis-from-multiple-aws-accounts-439d</guid>
      <description>&lt;p&gt;This is a scenario, that  how to access the AWS Elasticache From Multiple AWS Accounts using VPC Endpoints. &lt;br&gt;
Eg: AWS Account A Application Servers needs to Access the AWS Account B Elasticache Service trough VPC Endpoints.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>redis</category>
      <category>vpc</category>
      <category>elasticache</category>
    </item>
    <item>
      <title>AWS Secret Manager with a simple Golang ECS Task.</title>
      <dc:creator>Arshad Zackeriya  🇳🇿 ☁️ </dc:creator>
      <pubDate>Fri, 06 Nov 2020 04:49:23 +0000</pubDate>
      <link>https://dev.to/aws-builders/aws-secret-manager-with-a-simple-golang-ecs-task-2d98</link>
      <guid>https://dev.to/aws-builders/aws-secret-manager-with-a-simple-golang-ecs-task-2d98</guid>
      <description>&lt;p&gt;This article is about sharing my experience how we have secured the database credentials using AWS Secret manager. This has been a challenge always where and how to access the database configurations.&lt;/p&gt;

&lt;p&gt;When i was setting up a CI/CD pipeline for a Golang based project we wanted to Store the RDS credentials in a secured location. Thanks to AWS Secret Manager we were able to overcome that challenge. Secret manager will store the RDS credentials and can simply call the AWS Secret manger through the code to retrieve them. Lets See the below architecture how the services are connected.&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%2Fi%2F7v9orcngt4y7sjp9yu6y.jpeg" 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%2Fi%2F7v9orcngt4y7sjp9yu6y.jpeg" alt="1*qZkWhg8ZMxbe42sVqy-k0Q" width="681" height="527"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basically in my above simple setup demonstrate the connectivity of all the services. In the codepool we are not storing any database credentials. When the code is building lets assume i need to do some update queries to the database, then we must need the database credentials to connect the database.For any situations like this can configure an environment variable in the code build configurations as below.&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%2Fi%2F5p7h2zkzrog877o5ri2m.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%2Fi%2F5p7h2zkzrog877o5ri2m.png" alt="1*zPzezUNW78336r3AKzwoMA" width="800" height="107"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But this example i don't have any pre-build queries to run. lets go through below step by step how to configure the secrete manager for RDS credentials and how to retrieve them from your application on ECS cluster. as a summary my task needs to connect to the RDS database but we are not storing any database credentials inside the code.&lt;/p&gt;

&lt;p&gt;First go to the secret manager and enter your RDS information as below and select your right RDS, in my example i have only one RDS.&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%2Fi%2Fs6psvfcch3yusa8hny2w.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%2Fi%2Fs6psvfcch3yusa8hny2w.png" alt="1*iYJDeQCFAzjjZ4I-tT2aog" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Once you have entered the information then click next, and it will take you to the below screen.&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%2Fi%2F5w7wdfz7i1zbkr19ayv5.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%2Fi%2F5w7wdfz7i1zbkr19ayv5.png" alt="1*pHP-D71wAmnYCqdkuUEREQ" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here you have to give a Secret Name for your credentials, my example i have mentioned as “dev/aws-secret-manager-test/postgres”. Then click next.&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%2Fi%2Fjsy8zfwa2cefbvbm5zf2.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%2Fi%2Fjsy8zfwa2cefbvbm5zf2.png" alt="1*DdtsqTxP7XwpSLiskU2qmg" width="800" height="413"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This screen is really interesting, lets assume in your organization that you have any security policies for password rotations then this would be great option to use.&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%2Fi%2F4y1wigtsexcvjedjp2k5.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%2Fi%2F4y1wigtsexcvjedjp2k5.png" alt="1*HFsSGCjo2zM-tBcA6ehhLg" width="800" height="478"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally in the review page you can see the Secret Name as highlighted and AWS will provide you some sample code block how to retrieve your secrete using different programing languages. For my example i am using Golang.&lt;/p&gt;

&lt;p&gt;below 2 functions where i am accessing the RDS and testing the connection to the database. If you are using in a local machine or server use the docker build.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;func main() {
    var err error

    databaseAuth := getDatabaseAuth()
    psql := fmt.Sprintf("host=%s port=%d user=%s password=%s dbname=%s sslmode=disable",
        databaseAuth.Host, databaseAuth.Port, databaseAuth.UserName, databaseAuth.Password, os.Getenv("DB_NAME"))

    DB, err = sql.Open("postgres", psql)
    if err != nil {
        Logger.AddLogger(Logger.ERROR, "Database driver error")
        panic(err)

    }
    if err = DB.Ping(); err != nil {
        Logger.AddLogger(Logger.ERROR, "Database parameters error")
        panic(err)
    }
    Logger.AddLogger(Logger.INFO, "Connected to Database")
}

func getDatabaseAuth() Models.DatabaseAuth {
    secretName := os.Getenv("AWS_SECRET_NAME")
    region := os.Getenv("AWS_REGION")

    svc := secretsmanager.New(session.New(&amp;amp;aws.Config {
        Region: &amp;amp;region,
    }))

    input := &amp;amp;secretsmanager.GetSecretValueInput{
        SecretId:     aws.String(secretName),
        VersionStage: aws.String("AWSCURRENT"),
    }

    result, err := svc.GetSecretValue(input)
    var databaseAuth = Models.DatabaseAuth{}

    if err == nil {
        var secretString, decodedBinarySecret string

        if result.SecretString != nil {
            secretString = result.SecretString
            json.Unmarshal([]byte(secretString) , &amp;amp;databaseAuth)
        } else {
            decodedBinarySecretBytes := make([]byte, base64.StdEncoding.DecodedLen(len(result.SecretBinary)))
            len, err := base64.StdEncoding.Decode(decodedBinarySecretBytes, result.SecretBinary)
            if err != nil {
                fmt.Println("Base64 Decode Error:", err)
            }
            decodedBinarySecret = string(decodedBinarySecretBytes[:len])
            json.Unmarshal([]byte(decodedBinarySecret) , &amp;amp;databaseAuth)
        }
    }
    return databaseAuth
}

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

&lt;/div&gt;



&lt;p&gt;Now lets check about the security which is really pivotal, if the source resources are out of AWS cloud then you can use an IAM user to access. since i am using the ECS service i have created an IAM role and attached to the task. Lets see the task now.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My role name is : dev-EcsTaskExecutionRole&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;For the above role attach these policies &lt;strong&gt;(AmazonECSTaskExecutionRolePolicy, CloudWatchEventsFullAccess)&lt;/strong&gt; and you have to make a custom policy for access the secret manager. you can replace the Resource as per to your region and the resource ids.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;“Resource”: “arn:aws:secretsmanager:ap-southeast-1:123456789123:secret:dev/aws-secret-manager-test/postgres”&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "VisualEditor0",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetResourcePolicy",
                "secretsmanager:GetSecretValue",
                "secretsmanager:DescribeSecret",
                "secretsmanager:ListSecretVersionIds"
            ],
            "Resource": "arn:aws:secretsmanager:ap-southeast-1:123456789123:secret:dev/aws-secret-manager-test/postgres"
        },
        {
            "Sid": "VisualEditor1",
            "Effect": "Allow",
            "Action": [
                "secretsmanager:GetRandomPassword",
                "secretsmanager:ListSecrets"
            ],
            "Resource": ""
        }
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h6&gt;
  
  
  Task Definition
&lt;/h6&gt;

&lt;p&gt;Make sure you select the correct role, in my setups its “dev-EcsTaskExecutionRole”&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%2Fi%2Fmuirbd8n70ourevrhqgt.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%2Fi%2Fmuirbd8n70ourevrhqgt.png" alt="1*4GowS2nKvwkmvgzehpfS-A" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Set the Command to execute your file as “go,run,main.go”. Once you have create the task definition, run the task. Make sure your security groups and the subnets are correct.&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%2Fi%2Fen5oym01lgr2g4mhkplg.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%2Fi%2Fen5oym01lgr2g4mhkplg.png" alt="1*bZfhrOR3hU833q5AQDkPzg" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The task should execute successfully and able to see the “Connected to Database” message in the container insight as below.&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%2Fi%2Fc4wz2d5c8w7z20bgnhmv.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%2Fi%2Fc4wz2d5c8w7z20bgnhmv.png" alt="1*SOiGmpVKjYHuwSfVXrXCFA" width="800" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h6&gt;
  
  
  Summary
&lt;/h6&gt;

&lt;p&gt;If you are concern about your database connection strings to be store in a secret location and access them securely AWS Secret manager is a good option. You can try other service like Parameter Store as well. Secret manager gives you the ability to store multiple key/values in a single secret, which is something parameter store can do, but not nearly as nicely. This is useful for many applications. please comment your thoughts and if you have any better way please comment.&lt;/p&gt;

&lt;p&gt;Project Repo URL for testing&lt;/p&gt;

&lt;p&gt;Docker file also included, if you have any feedback or any questions please feel free to comment.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/devopswithzack/aws-secret-manager-golang" rel="noopener noreferrer"&gt;aws-secret-manager-golang&lt;/a&gt;&lt;/p&gt;

</description>
      <category>aws</category>
      <category>go</category>
      <category>security</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
