<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Abdul Sami on Medium]]></title>
        <description><![CDATA[Stories by Abdul Sami on Medium]]></description>
        <link>https://medium.com/@as1987137?source=rss-69e64dade771------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*SyWkoVGdKGGyqASxrk5SHw.jpeg</url>
            <title>Stories by Abdul Sami on Medium</title>
            <link>https://medium.com/@as1987137?source=rss-69e64dade771------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 18 May 2026 06:36:42 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@as1987137/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Deploy N8N on EC2 Instance]]></title>
            <link>https://medium.com/@as1987137/deploy-n8n-on-ec2-instance-6c7911656aca?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/6c7911656aca</guid>
            <category><![CDATA[n8n-workflow]]></category>
            <category><![CDATA[self-improvement]]></category>
            <category><![CDATA[ai-agent-development]]></category>
            <category><![CDATA[n8n]]></category>
            <category><![CDATA[ai-agent]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Fri, 25 Jul 2025 16:44:39 GMT</pubDate>
            <atom:updated>2025-07-25T16:44:39.586Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*cwecuDrtx0Drja_-JmWrzA.webp" /></figure><h3>Step 1: Launch an EC2 Instance</h3><ul><li><strong>Log in to AWS Console</strong></li><li>Navigate to the AWS Console and go to <strong>EC2</strong> &gt; <strong>Instances</strong>.</li><li>Click <strong>Launch Instance</strong>.</li><li><strong>Configure Instance Details</strong></li><li><strong>Name</strong> your server (e.g., MyEC2Server).</li><li>Choose an Amazon Machine Image (AMI):</li><li><strong>Amazon Linux 2023</strong> or</li><li><strong>Ubuntu 22.04 LTS</strong></li><li><strong>Select an Instance Type</strong></li><li>Choose one of the following:</li><li>t2.micro – Free Tier (suitable for basic usage)</li><li>t2.small – Slightly more performance</li><li>Higher tiers if needed for performance</li><li><strong>Create or Use a Key Pair</strong></li><li>Choose an existing key pair or create a new one.</li><li>Download the private key file (.pem or .ppk).</li><li><strong>Important:</strong> Save this key securely; it is required for SSH access.</li><li><strong>Launch the Instance</strong></li><li>Click <strong>Launch Instance</strong> and wait for it to start.</li></ul><h3>Step 2: Configure Security Group (Firewall Rules)</h3><p>Once your instance is launched, configure the firewall settings to allow incoming traffic.</p><p><strong>Access Security Group</strong></p><ul><li>Go to <strong>EC2 &gt; Instances</strong>.</li><li>Select your running instance.</li><li>Under the <strong>Security</strong> tab, click the linked <strong>Security Group</strong> name.</li></ul><p><strong>Edit Inbound Rules</strong></p><ul><li>Click <strong>Inbound Rules</strong>, then <strong>Edit Inbound Rules</strong>.</li><li>Click <strong>Add Rule</strong> to add the following entries:</li><li>TCP 80 0.0.0.0/0</li><li>TCP 4430.0.0.0/0</li><li>TCP 56780.0.0.0/0<em>(Optional: for n8n testing)</em></li></ul><p><strong>Save Changes</strong></p><ul><li>Click <strong>Save Rules</strong> to apply the changes.</li></ul><p><strong>Verify Instance Status</strong></p><ul><li>Go back to <strong>EC2 &gt; Instances</strong>.</li><li>Confirm the <strong>Instance State</strong> is <strong>Running</strong></li></ul><h3>Step 3: Connect a Domain to Your EC2 Server</h3><p>To make your application accessible via a custom domain like yourdomain.com or n8n.yourdomain.com, set up an A record in your domain&#39;s DNS settings.</p><p><strong>Go to Your Domain Registrar</strong></p><ul><li>Log in to your account on Namecheap, GoDaddy, Google Domains, etc.</li></ul><p><strong>Find DNS Settings</strong></p><ul><li>Navigate to the DNS management section for your domain.</li></ul><p><strong>Create an A Record</strong></p><p>FieldValue<br><strong>Type: </strong>A<strong>Host</strong>n8n <em>(or </em><em>@ for root domain)<br></em><strong>Value: </strong>Your EC2 Public IP (e.g., 12.61.155.33)<br><strong>TTL: </strong>Auto or 5 minutes</p><p>This links your domain (e.g., n8n.yourdomain.com) to your EC2 server.</p><p><strong>Wait for DNS Propagation</strong></p><p>Changes usually propagate within <strong>5 minutes to 1 hour</strong>.</p><h3>Step 4: Install Docker, Docker Compose, NGINX, and Deploy n8n</h3><p>Now that your EC2 server is live and your domain is connected, it’s time to install Docker and deploy <strong>n8n</strong> with NGINX and SSL.</p><pre>sudo yum update -y<br>sudo yum install -y docker</pre><p>Start and Enable Docker</p><pre>sudo systemctl start docker<br>sudo systemctl enable docker</pre><p>Add Your User to the Docker Group</p><pre>sudo usermod -aG docker ec2-user<br>newgrp docker</pre><p>Install Docker Compose</p><pre>sudo curl -L &quot;https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)&quot; -o /usr/local/bin/docker-compose<br>sudo chmod +x /usr/local/bin/docker-compose</pre><p>Install NGINX and Certbot (SSL)</p><pre>sudo dnf install -y nginx<br>sudo systemctl start nginx<br>sudo systemctl enable nginx<br><br>sudo dnf install -y certbot python3-certbot-nginx</pre><p><strong>Set Up n8n with Docker Compose</strong></p><p>Create project directory:</p><pre>mkdir ~/n8n<br>cd ~/n8n<br>nano docker-compose.yml</pre><p>Paste the following into docker-compose.yml:</p><pre>version: &#39;3&#39;<br>services:<br>  n8n:<br>    image: n8nio/n8n<br>    restart: always<br>    ports:<br>      - &quot;5678:5678&quot;<br>    environment:<br>      - N8N_BASIC_AUTH_ACTIVE=true<br>      - N8N_BASIC_AUTH_USER=admin<br>      - N8N_BASIC_AUTH_PASSWORD=yourStrongPasswordHere<br>      - WEBHOOK_URL=https://yourwebsitedomain/<br>    volumes:<br>      - n8n_data:/home/node/.n8n<br>volumes:<br>  n8n_data:</pre><blockquote><em>Replace </em><em>yourStrongPasswordHere and </em><em>yourwebsitedomain with your actual credentials and domain.</em></blockquote><p>Start n8n:</p><pre>docker-compose up -d</pre><p><strong>Configure NGINX as a Reverse Proxy</strong></p><p>Create NGINX config:</p><pre>sudo nano /etc/nginx/conf.d/n8n.conf</pre><p>Paste the following config:</p><pre>server {<br>    listen 80;<br>    server_name yourdomainaddress;<br><br>    location / {<br>        proxy_pass http://localhost:5678/;<br>        proxy_http_version 1.1;<br>        proxy_set_header Upgrade $http_upgrade;<br>        proxy_set_header Connection &quot;upgrade&quot;;<br>        proxy_set_header Host $host;<br>        proxy_set_header X-Real-IP $remote_addr;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>    }<br>}</pre><blockquote><em>Replace </em><em>yourdomainaddress with your actual domain (e.g., </em><em>n8n.yourdomain.com)</em></blockquote><p>Test and Reload NGINX</p><pre>sudo nginx -t<br>sudo systemctl restart nginx</pre><p>Secure with SSL Using Certbot</p><pre>sudo certbot --nginx -d yourwebsitedomain</pre><p>Thanks, For more details <br>Contact me at as1987137@gmail.com</p><p>Linkedin: <a href="https://www.linkedin.com/in/abdul-sami-a48b78234/">https://www.linkedin.com/in/abdul-sami-a48b78234/</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6c7911656aca" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Beginner Guide to AWS Step Functions]]></title>
            <link>https://medium.com/@as1987137/starting-aws-step-functions-dbe3ce456acc?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/dbe3ce456acc</guid>
            <category><![CDATA[machine-learning]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[step-functions]]></category>
            <category><![CDATA[etl]]></category>
            <category><![CDATA[aws-step-functions]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Fri, 15 Nov 2024 12:24:04 GMT</pubDate>
            <atom:updated>2024-11-15T12:24:42.314Z</atom:updated>
            <content:encoded><![CDATA[<p>AWS Step Functions is a serverless orchestration service designed to coordinate distributed applications effortlessly. By using a visual workflow editor and defining your processes in Amazon States Language, Step Functions let you focus on logic rather than infrastructure</p><p>In this guide, I will cover the essentials, from setting up your first state machine to implementing error handling and choosing the right workflow type.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/400/1*piF6wSMlKHLKlnxuqID7XA.png" /></figure><h4><strong>Step 1: Create a State Machine</strong></h4><ul><li>Log in to the <strong>AWS Management Console</strong>.</li><li>Navigate to <strong>Step Functions</strong> and click <strong>Create State Machine</strong>.</li><li>Choose a <strong>template</strong> or start from scratch.</li></ul><p>You can select <strong>Standard Workflows</strong> for durable, long-running processes or <strong>Express Workflows</strong> for high-throughput, short-lived tasks</p><h4><strong>Step 2: Define Your Workflow</strong></h4><p>Here’s an example of a basic state machine that calls an AWS Lambda function:</p><pre>{<br>  &quot;StartAt&quot;: &quot;LambdaTask&quot;,<br>  &quot;States&quot;: {<br>    &quot;LambdaTask&quot;: {<br>      &quot;Type&quot;: &quot;Task&quot;,<br>      &quot;Resource&quot;: &quot;arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME&quot;,<br>      &quot;End&quot;: true<br>    }<br>  }<br>}</pre><h4><strong>Step 3: Test Your Workflow</strong></h4><p>After defining the workflow, deploy it and test it with sample inputs. AWS Step Functions provide detailed execution logs to debug and optimize your state machine.</p><h3><strong>Error Handling</strong></h3><p>One of the most powerful features of AWS Step Functions is built-in error handling. You can define <strong>Retry</strong> and <strong>Catch</strong> blocks for each state to handle failures gracefully.</p><pre>{<br>  &quot;Type&quot;: &quot;Task&quot;,<br>  &quot;Resource&quot;: &quot;arn:aws:lambda:REGION:ACCOUNT_ID:function:FUNCTION_NAME&quot;,<br>  &quot;Retry&quot;: [<br>    {<br>      &quot;ErrorEquals&quot;: [&quot;States.TaskFailed&quot;],<br>      &quot;IntervalSeconds&quot;: 5,<br>      &quot;MaxAttempts&quot;: 3<br>    }<br>  ],<br>  &quot;Catch&quot;: [<br>    {<br>      &quot;ErrorEquals&quot;: [&quot;States.ALL&quot;],<br>      &quot;Next&quot;: &quot;ErrorHandler&quot;<br>    }<br>  ]<br>}</pre><h3><strong>Best Practices and Real-Life Insights</strong></h3><ul><li><strong>Choose the Right Workflow</strong>:<br>Use <strong>Standard Workflows</strong> for processes like order processing or ETL jobs, where durability is key. Opt for <strong>Express Workflows</strong> for real-time data streaming or IoT events.</li><li><strong>Start with Templates</strong>:<br>AWS Step Functions provide pre-built templates for common scenarios, such as integrating with AWS Lambda or processing S3 events. These templates are a great way to get started quickly.</li><li><strong>Handle Failures Thoughtfully</strong>:<br>Adding retries and fallback logic can save your application from cascading failures.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_xUQVBxpkkif5ZU7EvPdEQ.png" /></figure><h3>Conclusion</h3><p>AWS Step Functions bring order to the chaos of managing distributed systems. By leveraging state machines, built-in error handling, and tailored workflows, you can create scalable, reliable applications without writing excessive boilerplate code.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dbe3ce456acc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[RabbitMq and Go. Creating Push and Assignment System using Golang]]></title>
            <link>https://blog.devops.dev/rabbitmq-and-go-creating-push-and-assignment-system-using-golang-fb52ddbd3734?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/fb52ddbd3734</guid>
            <category><![CDATA[rabbitmq]]></category>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[mqtt]]></category>
            <category><![CDATA[websocket]]></category>
            <category><![CDATA[api-development]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Thu, 20 Jun 2024 10:38:35 GMT</pubDate>
            <atom:updated>2024-07-08T17:15:39.092Z</atom:updated>
            <content:encoded><![CDATA[<p>RabbitMQ is a powerful message broker that allows different parts of a system to communicate asynchronously by sending and receiving messages. It’s particularly useful in microservices architecture where services need to interact without being tightly coupled. In this article, we will explore how to set up a RabbitMQ consumer using Go, a popular programming language known for its simplicity and efficiency</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/517/1*OvEG4Y6J1jM6y-Rx5YgQjQ.png" /></figure><h3>Setting Up RabbitMQ</h3><p>First, let’s run RabbitMQ using Docker. Open your terminal and run:</p><pre>docker run -d --name rabbitmq -p 5672:5672 -p 15672:15672 rabbitmq</pre><h4>Writing the Go Application</h4><pre>go mod init rabbitmq-example<br><br>go get github.com/streadway/amqp</pre><h3>Create a Connection File</h3><pre>package main<br><br>import (<br>    &quot;log&quot;<br>    &quot;github.com/streadway/amqp&quot;<br>)<br><br>func failOnError(err error, msg string) {<br>    if err != nil {<br>        log.Fatalf(&quot;%s: %s&quot;, msg, err)<br>    }<br>}<br><br>func connectRabbitMQ() (*amqp.Connection, *amqp.Channel, amqp.Queue) {<br>    conn, err := amqp.Dial(&quot;amqp://guest:guest@localhost:5672/&quot;)<br>    failOnError(err, &quot;Failed to connect to RabbitMQ&quot;)<br><br>    ch, err := conn.Channel()<br>    failOnError(err, &quot;Failed to open a channel&quot;)<br><br>    q, err := ch.QueueDeclare(<br>        &quot;hello&quot;, // name<br>        false,   // durable<br>        false,   // delete when unused<br>        false,   // exclusive<br>        false,   // no-wait<br>        nil,     // arguments<br>    )<br>    failOnError(err, &quot;Failed to declare a queue&quot;)<br><br>    return conn, ch, q<br>}<br><br>func consumeMessages(ch *amqp.Channel, q amqp.Queue, consumerID int) {<br>    msgs, err := ch.Consume(<br>        q.Name, // queue<br>        &quot;&quot;,     // consumer<br>        true,   // auto-ack<br>        false,  // exclusive<br>        false,  // no-local<br>        false,  // no-wait<br>        nil,    // args<br>    )<br>    failOnError(err, &quot;Failed to register a consumer&quot;)<br><br>    for d := range msgs {<br>        log.Printf(&quot;Consumer %d received a message: %s&quot;, consumerID, d.Body)<br>    }<br>}<br><br>func checkQueueStatus(ch *amqp.Channel, queueName string) {<br>    q, err := ch.QueueInspect(queueName)<br>    failOnError(err, &quot;Failed to inspect queue&quot;)<br><br>    log.Printf(&quot;Queue %s has %d messages and %d consumers&quot;, q.Name, q.Messages, q.Consumers)<br>}</pre><h3><strong>Create the Main Application File</strong>:</h3><pre>package main<br><br>import (<br>    &quot;log&quot;<br>    &quot;time&quot;<br>)<br><br>func main() {<br>    conn, ch, q := connectRabbitMQ()<br>    defer conn.Close()<br>    defer ch.Close()<br><br>    numConsumers := 3<br>    for i := 1; i &lt;= numConsumers; i++ {<br>        go consumeMessages(ch, q, i)<br>    }<br><br>    // Periodically check the status of the queue<br>    go func() {<br>        for {<br>            checkQueueStatus(ch, q.Name)<br>            time.Sleep(10 * time.Second) // Check every 10 seconds<br>        }<br>    }()<br><br>    log.Printf(&quot; [*] Waiting for messages. To exit press CTRL+C&quot;)<br>    select {}<br>}</pre><h3>Running the Application</h3><pre>go run main.go rabbitmq.go</pre><p>This will start three consumers that listen to the hello queue and log any messages they receive. Additionally, it will periodically log the status of the queue, including the number of messages and consumers.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fb52ddbd3734" width="1" height="1" alt=""><hr><p><a href="https://blog.devops.dev/rabbitmq-and-go-creating-push-and-assignment-system-using-golang-fb52ddbd3734">RabbitMq and Go. Creating Push and Assignment System using Golang</a> was originally published in <a href="https://blog.devops.dev">DevOps.dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Writing CLI Tools in Golang(with Native Libraries)]]></title>
            <link>https://blog.devops.dev/writing-cli-tools-in-golang-with-native-libraries-6fcdbaf18c45?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/6fcdbaf18c45</guid>
            <category><![CDATA[golang]]></category>
            <category><![CDATA[golang-tools]]></category>
            <category><![CDATA[devops-tool]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[golang-development]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Mon, 05 Feb 2024 18:03:22 GMT</pubDate>
            <atom:updated>2024-07-08T16:59:27.688Z</atom:updated>
            <content:encoded><![CDATA[<p>If you are a bit old in the field of<a href="https://medium.com/@as1987137/understanding-awk-command-in-the-linux-operating-system-671329471400"> Software development</a> and maintenance, you should be familiar with CLI tools. But you can create your own CLI tools in <a href="https://www.fiverr.com/abdulsami_dev/write-and-debug-code-in-python-golang-c-and-cpp">Golang</a> with the “Flag” library.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*_NvQ4A-qQ686Zp5Pk8UElQ@2x.png" /></figure><p>These are the following options found while reading the flag library …</p><ol><li><strong>Arg()</strong> and <strong>Args() </strong>functions return command line arguments</li></ol><p>here is the below code to explain you</p><pre>verbose := flag.Bool(&quot;v&quot;, false, &quot;Verbose Mode Activated&quot;)<br><br> // Int Flag Created<br> n := flag.Int(&quot;i&quot;, 1, &quot;Number of times&quot;)<br> flag.Parse()<br><br> args := flag.Args()<br><br> name := &quot;World&quot;<br> if len(args) &gt; 0 {<br>  name = args[0]<br> }<br><br> if *verbose {<br>  name = &quot;VERBOSE &quot; + name<br> }<br><br> fmt.Printf(&quot;Hello, %s!\n&quot;, name)<br> for i := 0; i &lt; *n; i++ {<br>  fmt.Print(name)<br> }</pre><p>2. <strong>Bool</strong> and <strong>Boolfunc </strong>, both output a bool value but the latter takes a bool value as the output of a function</p><pre>// Bool <br>verbose := flag.Bool(&quot;v&quot;, false, &quot;Enable verbose mode&quot;)<br><br>//Boolfunc <br>isVerbose := flag.BoolFunc(&quot;v&quot;, &quot;Enable verbose mode&quot;, func() bool {<br>    <br>    return true<br>})</pre><p>3.<strong> </strong><a href="https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2"><strong>Duration</strong></a><strong> </strong>and <a href="https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2"><strong>DurationValue</strong></a><strong> </strong>are both time and duration related functions in golang flag library, below is the implementation so you can understand</p><pre>// Implementation for Duration<br>timeout := flag.Duration(&quot;timeout&quot;, 5*time.Second, &quot;Timeout for the operation&quot;)<br>    flag.Parse()<br><br>    fmt.Printf(&quot;Timeout set to: %v\n&quot;, *timeout)<br><br>// Implementation for   DurationVar<br>var timeout time.Duration<br>    flag.DurationVar(&amp;timeout, &quot;timeout&quot;, 5*time.Second, &quot;Timeout for the operation&quot;)<br>    flag.Parse()<br><br>    fmt.Printf(&quot;Timeout set to: %v\n&quot;, timeout)</pre><p>4. <strong>Float64</strong> and<strong> Float64Var</strong></p><p>The Float64 function creates a flag &quot;threshold&quot; with a default value of 0.5, and Float64Var uses an existing variable &quot;customThreshold&quot; with a default value of 1.5.</p><pre>// Float64<br>threshold := flag.Float64(&quot;threshold&quot;, 0.5, &quot;Set the threshold value&quot;)<br><br>// Float64Var<br>var customThreshold float64<br>flag.Float64Var(&amp;customThreshold, &quot;customThreshold&quot;, 1.5, &quot;Set a custom threshold value&quot;)<br><br>// Usage:<br>fmt.Println(&quot;Threshold:&quot;, *threshold)<br>fmt.Println(&quot;Custom Threshold:&quot;, customThreshold)</pre><p>5.<strong> Func Function</strong></p><p>The Func function defines a &quot;config&quot; flag, calling a function for validation. If the validation is successful, it sets the configPath variable</p><pre>// Func<br>var configPath string<br>flag.Func(&quot;config&quot;, &quot;Path to config file&quot;, func(value string) error {<br>    if isValidConfig(value) {<br>        configPath = value<br>        return nil<br>    }<br>    return fmt.Errorf(&quot;invalid config file path&quot;)<br>})<br><br>// Usage:<br>fmt.Println(&quot;Config Path:&quot;, configPath)</pre><p>6. <strong>Float64 Flags</strong></p><pre>// Original Example<br>verbose := flag.Bool(&quot;v&quot;, false, &quot;Verbose Mode Activated&quot;)<br>n := flag.Int(&quot;i&quot;, 1, &quot;Number of times&quot;)<br>flag.Parse()<br>args := flag.Args()<br>name := &quot;World&quot;<br>if len(args) &gt; 0 {<br>    name = args[0]<br>}<br>if *verbose {<br>    name = &quot;VERBOSE &quot; + name<br>}<br>fmt.Printf(&quot;Hello, %s!\n&quot;, name)<br>for i := 0; i &lt; *n; i++ {<br>    fmt.Print(name)<br>}</pre><p>Check out insightful articles on <a href="https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2">tech</a> and programming by <a href="https://medium.com/@as1987137">Me</a>. Dive into engaging content that demystifies complex <a href="https://medium.com/@as1987137/going-serverless-serverless-api-with-api-gateway-and-lambda-2417fc0628ad">topics </a>and enhances your coding journey. Don’t miss out on a blend of expertise and clarity — follow for regular updates!</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6fcdbaf18c45" width="1" height="1" alt=""><hr><p><a href="https://blog.devops.dev/writing-cli-tools-in-golang-with-native-libraries-6fcdbaf18c45">Writing CLI Tools in Golang(with Native Libraries)</a> was originally published in <a href="https://blog.devops.dev">DevOps.dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Understanding AWK command in the Linux Operating System.]]></title>
            <link>https://blog.devops.dev/understanding-awk-command-in-the-linux-operating-system-671329471400?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/671329471400</guid>
            <category><![CDATA[awk]]></category>
            <category><![CDATA[linux-tutorial]]></category>
            <category><![CDATA[linux-hacking]]></category>
            <category><![CDATA[linux]]></category>
            <category><![CDATA[bash-script]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Wed, 17 Jan 2024 18:05:14 GMT</pubDate>
            <atom:updated>2024-07-08T16:59:23.446Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/225/1*jtdaT4rkkvZAvkBKLUMwGg.png" /></figure><p>In Linux System, You have multiple Log and Management Files.Let Suppose you want to extract some data from that file.You cannot do directly.</p><p>Let’s Suppose this is log file</p><pre>03/22 08:51:06 TRACE  :...read_physical_netif: Home list entries returned = 7<br>03/22 08:51:06 INFO   :...read_physical_netif: index #0, interface VLINK1 has address 129.1.1.1, ifidx 0<br>03/22 08:51:06 INFO   :...read_physical_netif: index #1, interface TR1 has address 9.37.65.139, ifidx 1<br>03/22 08:51:06 INFO   :...read_physical_netif: index #2, interface LINK11 has address 9.67.100.1, ifidx 2<br>03/22 08:51:06 INFO   :...read_physical_netif: index #3, interface LINK12 has address 9.67.101.1, ifidx 3<br>03/22 08:51:06 INFO   :...read_physical_netif: index #4, interface CTCD0 has address 9.67.116.98, ifidx 4<br>03/22 08:51:06 INFO   :...read_physical_netif: index #5, interface CTCD2 has address 9.67.117.98, ifidx 5<br>03/22 08:51:06 INFO   :...read_physical_netif: index #6, interface LOOPBACK has address 127.0.0.1, ifidx 0<br>03/22 08:51:06 INFO   :....mailslot_create: creating mailslot for timer<br>03/22 08:51:06 INFO   :...mailbox_register: mailbox allocated for timer</pre><p>if you want to get specific line that command would be easy</p><pre>head -n 5 app.log <br># where 5 is the Line No and app.log is the File</pre><p>But you cannot get only date or log number.<br>We have to Use AWK for this purpose</p><p><strong>Print Full File</strong></p><pre>awk &#39;{print}&#39; app.log</pre><p><strong>Print One to Multiple Columns</strong></p><pre>awk &#39;{print $1,$2}&#39; app.log</pre><p><strong>Alternative Columns</strong></p><pre>awk &#39;{print $1,$4}&#39; app.log</pre><p><strong>Filter on Column</strong></p><pre>awk &#39;/INFO/ {print $1,$2}&#39; app.log<br><br>#Here INFO is the Filter in it </pre><p><strong>Save to Specific log Other File</strong></p><pre>awk &#39;/INFO/ {print $1,$2}&#39; app.log &gt; newlog.log</pre><p><strong>Count Specific Column Enteries</strong></p><pre>awk &#39;/INFO/ {count++} END {print count}&#39; app.log</pre><p><strong>Add Random Line to Count</strong></p><pre>awk &#39;/INFO/ {count++} END {print &quot;the count is&quot;, count}&#39; app.log </pre><h3>Real World Scenario</h3><p>Let&#39;s assume, we have a log file of ip errors, we want to check, how many times specific IPs face Errors</p><pre>awk &#39;/192.168.1.1/ {count++} END {print &quot;the count is&quot;, count}&#39; app.log</pre><p><strong>Matching Time in log file</strong></p><pre>awk &#39;$2 &gt;= &quot;08:51:06&quot; &amp;&amp; $2 &lt;= &quot;08:51:06&quot; {print}&#39; app.log</pre><p><strong>Are You Looking to Read Other Related Medium Articles</strong></p><p><a href="https://medium.com/@as1987137/spinning-up-multiple-databases-with-docker-mysql-cassandra-mariadb-and-postgresql-ea0ea356bd1a">https://medium.com/@as1987137/spinning-up-multiple-databases-with-docker-mysql-cassandra-mariadb-and-postgresql-ea0ea356bd1a</a></p><p><a href="https://medium.com/@as1987137/building-a-real-time-chat-application-with-websockets-using-aws-lambda-api-gateway-and-dynamodb-5c01399f1510">https://medium.com/@as1987137/building-a-real-time-chat-application-with-websockets-using-aws-lambda-api-gateway-and-dynamodb-5c01399f1510</a></p><p>Awk is used where we have formatted and Arranged data like CSV or Column Values.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=671329471400" width="1" height="1" alt=""><hr><p><a href="https://blog.devops.dev/understanding-awk-command-in-the-linux-operating-system-671329471400">Understanding AWK command in the Linux Operating System.</a> was originally published in <a href="https://blog.devops.dev">DevOps.dev</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Spinning Up Multiple Databases with Docker: MySQL, Cassandra, MariaDB, and PostgreSQL]]></title>
            <link>https://medium.com/@as1987137/spinning-up-multiple-databases-with-docker-mysql-cassandra-mariadb-and-postgresql-ea0ea356bd1a?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/ea0ea356bd1a</guid>
            <category><![CDATA[docker]]></category>
            <category><![CDATA[postgresql]]></category>
            <category><![CDATA[mysql]]></category>
            <category><![CDATA[backend]]></category>
            <category><![CDATA[database]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Wed, 11 Oct 2023 21:28:01 GMT</pubDate>
            <atom:updated>2023-10-11T21:28:01.242Z</atom:updated>
            <content:encoded><![CDATA[<p>Docker has revolutionized the way we build, ship, and run applications. It’s a powerful tool for containerization, and it makes setting up and managing databases for development and testing environments a breeze. In this article, we will walk through the process of spinning up four different databases — MySQL, Cassandra, MariaDB, and PostgreSQL — using Docker containers.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*nc5nsn2e1AvQZsj2D2vx4A.png" /></figure><h3>Setting Up Docker Containers</h3><p>We’ll create Docker containers for each of the databases we want to run. Here’s how to do it:</p><h3>1. MySQL</h3><pre>docker run -d --name mysql-container -e MYSQL_ROOT_PASSWORD=root_password -p 3306:3306 mysql</pre><h3>2. Cassandra</h3><pre>docker run -d --name cassandra-container -p 9042:9042 cassandra</pre><h3>3. MariaDB</h3><pre>docker run -d --name mariadb-container -e MYSQL_ROOT_PASSWORD=root_password -p 3307:3306 mariadb</pre><h3>4. PostgreSQL</h3><pre>docker run -d --name postgres-container -e POSTGRES_PASSWORD=root_password -p 5432:5432 postgres</pre><p>Check Other Code and Implementation</p><p><a href="https://github.com/AbdulSami455/Ec2_Database_Containers">https://github.com/AbdulSami455/Ec2_Database_Containers</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ea0ea356bd1a" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Real-Time Chat Application with WebSockets using AWS Lambda, API Gateway, and DynamoDB]]></title>
            <link>https://medium.com/@as1987137/building-a-real-time-chat-application-with-websockets-using-aws-lambda-api-gateway-and-dynamodb-5c01399f1510?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/5c01399f1510</guid>
            <category><![CDATA[aws-s3]]></category>
            <category><![CDATA[websocket]]></category>
            <category><![CDATA[websocket-server]]></category>
            <category><![CDATA[api-gateway]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Sat, 19 Aug 2023 22:11:02 GMT</pubDate>
            <atom:updated>2023-08-19T22:11:02.945Z</atom:updated>
            <content:encoded><![CDATA[<p>In the world of modern web applications, where responsiveness and real-time interactions are paramount, WebSockets emerge as a game-changer. Unlike the traditional request-response cycle, WebSockets introduce a persistent, bidirectional communication channel between clients and servers. This technology opens the door to instant data updates, live notifications, and interactive experiences that were once limited by the constraints of HTTP.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/249/1*CvnWilhM1fqR_p36elMyhg.png" /></figure><p><strong>Here is the Full Code :</strong></p><p><a href="https://github.com/AbdulSami455/Real-Time-Chat-Application-With-WebSockets-APIGateway-Lambda-DynamoDb">GitHub - AbdulSami455/Real-Time-Chat-Application-With-WebSockets-APIGateway-Lambda-DynamoDb: Real Time Chat Application with WebSockets (AWS Services--Aws Lambda,API-Gateway,DynamoDb)</a></p><h3>Step 1 :</h3><p><strong>Create DynamoDb</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/896/1*QKtvmgp7kqloodnPq49m3w.png" /></figure><h3><strong>Step 2:</strong></h3><p><strong>Set up Lambda Functions</strong></p><p>Three Functions :</p><p><strong>Function for Messaging</strong></p><pre>import json<br>import boto3<br>import os<br><br>dynamodb = boto3.client(&#39;dynamodb&#39;)<br><br><br>def lambda_handler(event, context):<br>    message = json.loads(event[&#39;body&#39;])[&#39;message&#39;]<br>    paginator = dynamodb.get_paginator(&#39;scan&#39;)<br>    connectionIds = []<br><br>    apigatewaymanagementapi = boto3.client(<br>        &#39;apigatewaymanagementapi&#39;,<br>        endpoint_url = &quot;https://&quot; + event[&quot;requestContext&quot;][&quot;domainName&quot;] + &quot;/&quot; + event[&quot;requestContext&quot;][&quot;stage&quot;]<br>    )<br><br>    for page in paginator.paginate(TableName=os.environ[&#39;WEBSOCKET_TABLE&#39;]):<br>        connectionIds.extend(page[&#39;Items&#39;])<br><br>    for connectionId in connectionIds:<br>        apigatewaymanagementapi.post_to_connection(<br>            Data=message,<br>            ConnectionId=connectionId[&#39;connectionId&#39;][&#39;S&#39;]<br>        )<br><br>    return {}</pre><p><strong>Function for Connection</strong></p><pre><br>#These all are Module Required for Working<br>import json<br>import boto3<br>import os<br><br>dynamodb = boto3.client(&#39;dynamodb&#39;)<br><br><br>#Main Lambda Function<br>def lambda_handler(event, context):<br>    connectionId = event[&#39;requestContext&#39;][&#39;connectionId&#39;]<br><br>    dynamodb.put_item(<br>        TableName=os.environ[&#39;WEBSOCKET_TABLE&#39;],<br>        Item={&#39;connectionId&#39;: {&#39;S&#39;: connectionId}}<br>    )<br><br>    return {}</pre><p><strong>Function for Disconnection</strong></p><pre>import json<br>import boto3<br>import os<br><br>dynamodb = boto3.client(&#39;dynamodb&#39;)<br><br>def lambda_handler(event, context):<br>    connectionId = event[&#39;requestContext&#39;][&#39;connectionId&#39;]<br><br>    dynamodb.delete_item(<br>        TableName=os.environ[&#39;WEBSOCKET_TABLE&#39;],<br>        Key={&#39;connectionId&#39;: {&#39;S&#39;: connectionId}}<br>    )<br><br>    return {}</pre><h3>Step 3 :</h3><p><strong>Configure Aws API Gateway</strong></p><ol><li>Create an API Gateway to handle WebSocket connections.</li><li>Define routes for WebSocket events (connect, disconnect, message).</li></ol><figure><img alt="" src="https://cdn-images-1.medium.com/max/609/1*Ma0HW0CuXJPmu5ks0Vnyzg.jpeg" /></figure><p>Here are the Other Aws Projects :</p><p><strong>Movie Library with Aws Cloudfront and S3</strong></p><p><a href="https://github.com/AbdulSami455/MovieLibrary-with-Aws-Cloudfront-and-S3">GitHub - AbdulSami455/MovieLibrary-with-Aws-Cloudfront-and-S3</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=5c01399f1510" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building a Scalable Movie Library with AWS CloudFront and S3: Leveraging CDN for High-Performance…]]></title>
            <link>https://medium.com/@as1987137/building-a-scalable-movie-library-with-aws-cloudfront-and-s3-leveraging-cdn-for-high-performance-8e91bc9ba9c9?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/8e91bc9ba9c9</guid>
            <category><![CDATA[cdn-providers]]></category>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[aws-s3]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-cloudfront]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Thu, 17 Aug 2023 23:26:58 GMT</pubDate>
            <atom:updated>2024-01-10T22:10:34.984Z</atom:updated>
            <content:encoded><![CDATA[<h3>Building a Scalable Movie Library with AWS CloudFront and S3: Leveraging CDN for High-Performance Content Delivery</h3><p>In Today Digtial Age, Content and its seem Supply is Crucial Part of our Networks and Businesses.In this article, we’ll delve into the process of building a scalable and efficient movie library using AWS CloudFront and Amazon S3 as a Content Delivery Network (CDN)</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*emBTrSggOenvK1PGyVCetQ.png" /></figure><p>In order to Understand, How I connect Aws s3 bucket with Aws Cloudfront which is independent CDN Network. You can see my Full Guideline on Github Repo <br><a href="https://github.com/AbdulSami455/MovieLibrary-with-Aws-Cloudfront-and-S3">https://github.com/AbdulSami455/MovieLibrary-with-Aws-Cloudfront-and-S3</a></p><h3><strong>Let me Explain for You</strong></h3><p>The connection between AWS S3 and AWS CloudFront is established by configuring your CloudFront distribution to use your S3 bucket as the origin source. This means that CloudFront will pull content from your S3 bucket and distribute it across its network of edge locations. Any requests for your content are directed to CloudFront, which checks its cache and retrieves the content from your S3 bucket if needed.</p><p>AWS S3 provides the origin source for your content, while AWS CloudFront acts as the distribution layer that caches and delivers the content to users from edge locations. This integration not only accelerates content delivery but also reduces the load on your origin server, ensuring a seamless and efficient experience for users accessing your movie library.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/480/1*lxVboi1LmBQhpCh7_DcdJg.png" /></figure><h3>Benefits of CDN</h3><ol><li>Faster Content Delivery</li><li>Improved Website Performance</li><li>Scalability and Reliability</li><li>Global Reach</li><li>Redundancy and High Availability</li></ol><h3>Want One-two-One Consulation on AWS?</h3><p><a href="https://www.fiverr.com/abdulsami_dev/help-you-with-aws-ec2-s3-vpc-lambda-and-fix-aws-issues">Avail Now for 50% Discount</a></p><h3>More About AWS</h3><p>Read More Articles on AWS + Cloud Engineering</p><p><strong>Product Api : </strong><a href="https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2">https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2</a></p><p><strong>Product Api with Authorization</strong> : <a href="https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2">https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2</a></p><p><strong>Real Time Chat Application:</strong></p><p><a href="https://github.com/AbdulSami455/Real-TIme-Chat-Application-With-WebSockets-APIGateway-Lambda-DynamoDb">https://github.com/AbdulSami455/Real-TIme-Chat-Application-With-WebSockets-APIGateway-Lambda-DynamoDb</a></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=8e91bc9ba9c9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Serverless Product Inventory API with Aws Services]]></title>
            <link>https://medium.com/@as1987137/serverless-product-inventory-api-with-aws-services-f4f0191cdba2?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/f4f0191cdba2</guid>
            <category><![CDATA[aws-lambda]]></category>
            <category><![CDATA[aws-s3]]></category>
            <category><![CDATA[product]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-ec2]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Sun, 13 Aug 2023 15:25:36 GMT</pubDate>
            <atom:updated>2023-08-13T15:25:36.380Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/641/1*HU7tWBT-b-X7sXQdvUJfTw.png" /></figure><h3>Step 1</h3><p><strong>Creating DynamoDB Table</strong></p><p>if you are having any problem in creating dynamoDb. You can see Guide in my repo</p><p><a href="https://github.com/AbdulSami455">https://github.com/AbdulSami455</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*FAoFa6qQeRHixts_6oNfiA.png" /></figure><h3>Step 2</h3><p><strong>Creating Lambda Functions</strong></p><pre>import boto3<br>import json<br>import logging<br><br>from custom_encoder import CustomEncoder<br>logger = logging.getLogger()<br>logger.setLevel(logging.INFO)<br><br>dynamodbtablename = &#39;Product-inventory&#39;<br>dynamodb = boto3.resource(&#39;dynamodb&#39;)<br>table = dynamodb.Table(dynamodbtablename)<br><br>getmethod = &#39;GET&#39;<br>postmethod = &#39;POST&#39;<br>patchmethod = &#39;PATCH&#39;<br>deletemethod = &#39;DELETE&#39;<br>healthpath = &#39;/health&#39;<br>productpath = &#39;/product&#39;<br>productspath = &#39;/products&#39;<br><br><br>def lambda_handler(event, context):<br>    logger.info(event)<br>    httpMethod = event[&#39;httpMethod&#39;]<br>    path = event[&#39;path&#39;]<br>    if httpMethod == getmethod and path == healthpath:<br>        response = buildResponse(200)<br>    elif httpMethod == getmethod and path == productpath:<br>        response = getProduct(event[&#39;queryStringParameters&#39;][&#39;productid&#39;])<br>    elif httpMethod == getmethod and path == productspath:<br>        response = getProducts()<br>    elif httpMethod == postmethod and path == productpath:<br>        response = saveProduct(json.loads(event[&#39;body&#39;]))<br>    elif httpMethod == patchmethod and path == productpath:<br>        requestbody = json.loads(event[&#39;body&#39;])<br>        response = modifyProduct(requestbody[&#39;productid&#39;], requestbody[&#39;updatekey&#39;], requestbody[&#39;updatevalue&#39;])<br>    elif httpMethod == deletemethod and path == productpath:<br>        requestbody = json.loads(event[&#39;body&#39;])<br>        response = deleteProduct(requestbody[&#39;productid&#39;])<br>    else:<br>        response = buildResponse(404, &#39;Not Found&#39;)<br>    return response<br><br>#Function to get Product from DynamoDb Database<br>def getProduct(productid):<br>    try:<br>        response = table.get_item(<br>            Key={<br>                &#39;productid&#39;: productid<br>            }<br>        )<br>        if &#39;Item&#39; in response:<br>            return buildResponse(200, response[&#39;Item&#39;])<br>        else:<br>            return buildResponse(404, &#39;Product not found&#39;)<br>    except Exception as e:<br>        logger.error(str(e))<br>        return buildResponse(500, &#39;Internal Server Error&#39;)<br><br><br>#Get ALl Products from DynamoDb<br>def getProducts():<br>    try:<br>        response = table.scan()<br>        items = response.get(&#39;Items&#39;, [])<br>        return buildResponse(200, items)<br>    except Exception as e:<br>        logger.error(str(e))<br>        return buildResponse(500, &#39;Internal Server Error&#39;)<br><br>#Save Product in DynamoDB<br>def saveProduct(product):<br>    try:<br>        table.put_item(Item=product)<br>        return buildResponse(201, &#39;Product saved successfully&#39;)<br>    except Exception as e:<br>        logger.error(str(e))<br>        return buildResponse(500, &#39;Internal Server Error&#39;)<br><br>#<br>def modifyProduct(productid, updatekey, updatevalue):<br>    try:<br>        table.update_item(<br>            Key={&#39;productid&#39;: productid},<br>            UpdateExpression=f&quot;SET {updatekey} = :val&quot;,<br>            ExpressionAttributeValues={&#39;:val&#39;: updatevalue}<br>        )<br>        return buildResponse(200, &#39;Product updated successfully&#39;)<br>    except Exception as e:<br>        logger.error(str(e))<br>        return buildResponse(500, &#39;Internal Server Error&#39;)<br><br><br>def deleteProduct(productid):<br>    try:<br>        table.delete_item(Key={&#39;productid&#39;: productid})<br>        return buildResponse(200, &#39;Product deleted successfully&#39;)<br>    except Exception as e:<br>        logger.error(str(e))<br>        return buildResponse(500, &#39;Internal Server Error&#39;)<br><br><br>def buildResponse(statusCode, body=None):<br>    response = {<br>        &#39;statusCode&#39;: statusCode,<br>        &#39;headers&#39;: {<br>            &#39;Content-Type&#39;: &#39;application/json&#39;,<br>            &#39;Access-Control-Allow-Origin&#39;: &#39;*&#39;<br>        }<br>    }<br>    if body is not None:<br>        response[&#39;body&#39;] = json.dumps(body, cls=CustomEncoder)<br>    return response</pre><h3>Step 3</h3><p><strong>Setting Up API Gateway</strong></p><p>Watch Full Guideness in This Repo</p><p><a href="https://github.com/AbdulSami455/Serverless-APIS-with-Aws-APIGateway-Lambda-DynamoDB-and-Others">https://github.com/AbdulSami455/Serverless-APIS-with-Aws-APIGateway-Lambda-DynamoDB-and-Others</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LQHKwAp6R0VgZG7zbm1PHg.png" /></figure><h3>Step 4</h3><p><strong>Testing API on Postman</strong></p><p><strong>Future Possibilities</strong></p><ol><li>IAM Roles and Permissions</li><li>Aws CloudWatch</li><li>Authorize with Cognito</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f4f0191cdba2" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Going Serverless: Serverless API with API-Gateway and Lambda]]></title>
            <link>https://medium.com/@as1987137/going-serverless-serverless-api-with-api-gateway-and-lambda-2417fc0628ad?source=rss-69e64dade771------2</link>
            <guid isPermaLink="false">https://medium.com/p/2417fc0628ad</guid>
            <category><![CDATA[aws-api-gateway]]></category>
            <category><![CDATA[aws-dynamodb]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[aws-lambda]]></category>
            <category><![CDATA[aws-api]]></category>
            <dc:creator><![CDATA[Abdul Sami]]></dc:creator>
            <pubDate>Mon, 07 Aug 2023 21:53:26 GMT</pubDate>
            <atom:updated>2023-08-07T21:53:26.346Z</atom:updated>
            <content:encoded><![CDATA[<p>Creating a serverless API with API Gateway and Lambda is a common approach for building scalable and cost-effective APIs. Here’s a step-by-step guide on how to set it up:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/870/1*UQcy-EGo97Ts-5OZSIsy_g.png" /></figure><h3><strong>Step 1</strong></h3><ul><li>Click on “Create function.”</li><li>Choose “Author from scratch” and provide a name for your function.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*xE0qg-dYJj3PX2Sj28gXqQ.png" /></figure><h3>Step 2</h3><ul><li>Select a runtime (e.g., Node.js, Python, etc.).</li><li>Add the code for your API logic in the function.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*STfib2HaJUO9LBnAgPTGUg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*Cwo80X8Fvdi5RrnSfBBVIw.png" /></figure><h3>Step 4</h3><ul><li>Go to the AWS API Gateway service.</li><li>Click on “Create API.”</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/996/1*4_4hVZBOHBa395NBbOIShQ.png" /></figure><h3>Step 5</h3><ul><li>Choose “REST API.”</li><li>Select “New API” and provide a name for your API.</li><li>Click “Create API.”</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1018/1*DPQJj2ZG59GfilLhCzadTA.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/860/1*wyksv0pk5knkHKVCgC5Dtg.png" /></figure><h3>Step 6</h3><ul><li>Once the deployment is successful, you’ll see an “Invoke URL” in the “Stages” section of your API.</li><li>Use this URL to test your API by making HTTP requests to the defined resources and methods.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*uMwVu-3t-Om9nSyD_DzTmQ.png" /></figure><p>That’s it! You’ve now set up a serverless API using AWS API Gateway and Lambda. The API Gateway acts as the front-end to your API, and it forwards requests to your Lambda function to handle the business logic. Lambda automatically scales with the number of incoming requests, making it a cost-effective solution for building APIs that can handle varying traffic loads.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2417fc0628ad" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>