<?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: Duc Tran (Sam)</title>
    <description>The latest articles on DEV Community by Duc Tran (Sam) (@ductt).</description>
    <link>https://dev.to/ductt</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%2F1278641%2Ff85e9569-f7c8-46a3-bfed-b67aa2b3af6e.jpg</url>
      <title>DEV Community: Duc Tran (Sam)</title>
      <link>https://dev.to/ductt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ductt"/>
    <language>en</language>
    <item>
      <title>CODE ANYWHERE – NEW CLOUD IDE</title>
      <dc:creator>Duc Tran (Sam)</dc:creator>
      <pubDate>Sun, 01 Jun 2025 08:17:15 +0000</pubDate>
      <link>https://dev.to/ductt/code-anywhere-new-cloud-ide-5hge</link>
      <guid>https://dev.to/ductt/code-anywhere-new-cloud-ide-5hge</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;br&gt;
As you all know, since 2024, AWS Cloud9, formerly a popular web-based IDE, is no longer available to new customers, and new features are not being introduced. Therefore, finding a solution that can quickly deploy an IDE to serve development needs is very important. Today, I want to introduce you to an alternative to Cloud9 called Codeanywhere. This is a cross-platform cloud integrated development environment created by Codeanywhere, Inc. Codeanywhere enables users to write, edit, collaborate, and run web development projects from a web browser or mobile device. Codeanywhere is written in JavaScript. In this blog post, I will provide an example of using Codeanywhere as an IDE for coding Terraform to deploy resources on AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Prerequisite&lt;/strong&gt;&lt;br&gt;
To start using it, you need to visit the &lt;a href="https://app.codeanywhere.com/" rel="noopener noreferrer"&gt;CodeAnywhere &lt;/a&gt; website and log in with an account such as Google, GitHub, GitLab, or Bitbucket.&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%2Frlnx1ab6pv4qhtfmt8i5.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%2Frlnx1ab6pv4qhtfmt8i5.png" alt="Image description" width="776" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After logging into CodeAnywhere, proceed to install the AWS CLI by following these instructions: &lt;a href="https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html" rel="noopener noreferrer"&gt;Installing or updating to the latest version of the AWS CLI - AWS Command Line Interface&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%2Fvuygruqstaa31fzqu2hq.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%2Fvuygruqstaa31fzqu2hq.png" alt="Image description" width="800" height="375"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Here's how to provision AWS resource with Terraform in CodeAnywhere&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.1   Create IAM User for CLI&lt;/strong&gt;&lt;br&gt;
Go to IAM, create an IAM User with Administrator permissions&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%2Fzmfgwfddmerxy1wm1fwg.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%2Fzmfgwfddmerxy1wm1fwg.png" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the user, go to the Security Credentials section, select CLI to create credentials for CLI access&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%2Fd3urnyyi8yojrwy4raj5.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%2Fd3urnyyi8yojrwy4raj5.png" alt="Image description" width="800" height="188"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After creating the credentials, use the Access Key and Secret Key just created to log in on the CLI&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%2Fmgfe6ss85ihb4ym4gmns.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%2Fmgfe6ss85ihb4ym4gmns.png" alt="Image description" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.2   Install Terraform&lt;/strong&gt;&lt;br&gt;
Access the HashiCorp Terraform installation guide page to install &lt;a href="https://developer.hashicorp.com/terraform/tutorials/aws-get-started/install-cli" rel="noopener noreferrer"&gt;Terraform CLI&lt;/a&gt; &lt;br&gt;
After installing Terraform on CodeAnywhere, verify the installation.&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%2Febccdo0k9wei27rkeman.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%2Febccdo0k9wei27rkeman.png" alt="Image description" width="800" height="82"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.3   Provision AWS resource with Terraform&lt;/strong&gt;&lt;br&gt;
In this section, I will use a Terraform template to quickly deploy a VPC based on the following architecture:&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%2Fbogb6ynta9kg1fiepuug.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%2Fbogb6ynta9kg1fiepuug.png" alt="Image description" width="800" height="554"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clone my sample Terraform template from &lt;a href="https://github.com/ductt7/terraform-vpc/tree/main" rel="noopener noreferrer"&gt;Github &lt;/a&gt;repository: &lt;br&gt;
After cloning, execute the cd command to navigate into the directory of the source code and run the ls command to view the files in the directory.&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%2Fro5s7wc0pjyg4y7btmcc.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%2Fro5s7wc0pjyg4y7btmcc.png" alt="Image description" width="800" height="81"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Run &lt;code&gt;terraform init&lt;/code&gt; to initialize Terraform.&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%2Fkr5gng8n7u2l6dqlmrlr.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%2Fkr5gng8n7u2l6dqlmrlr.png" alt="Image description" width="800" height="334"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If the initialization process does not report any errors, proceed to run &lt;code&gt;terraform plan&lt;/code&gt; to check the resources that the Terraform template will provision.&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%2Fw3c2p5hrncp2gn5q7y1y.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%2Fw3c2p5hrncp2gn5q7y1y.png" alt="Image description" width="800" height="93"&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%2Fu29gimsz2oclu4azcv5q.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%2Fu29gimsz2oclu4azcv5q.png" alt="Image description" width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After confirming the resources to be provisioned by Terraform in the &lt;code&gt;terraform plan&lt;/code&gt; step, proceed to officially provision them on AWS using the command &lt;code&gt;terraform apply&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%2Fv0vbmbxbviufqiygpakv.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%2Fv0vbmbxbviufqiygpakv.png" alt="Image description" width="800" height="66"&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%2Fi8cf491ne44xu1wii8um.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%2Fi8cf491ne44xu1wii8um.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After the apply is complete, go to the AWS Console to check the deployed resources.&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%2F8gdgdzw1vftxb4u6uzrw.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%2F8gdgdzw1vftxb4u6uzrw.png" alt="Image description" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Conclusion&lt;/strong&gt;&lt;br&gt;
Finally, through this article, you have seen how to utilize CodeAnywhere as a Cloud IDE to quickly support your development tasks. I hope this article has provided you with useful knowledge and a Cloud IDE solution to replace Cloud9.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>aws</category>
      <category>devops</category>
    </item>
    <item>
      <title>Build an English Learning Game with Pygame and Amazon Q for Developer</title>
      <dc:creator>Duc Tran (Sam)</dc:creator>
      <pubDate>Sat, 24 May 2025 08:22:17 +0000</pubDate>
      <link>https://dev.to/ductt/build-an-english-learning-game-with-pygame-and-amazon-q-for-developer-5faj</link>
      <guid>https://dev.to/ductt/build-an-english-learning-game-with-pygame-and-amazon-q-for-developer-5faj</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;br&gt;
With the advancement of GenAI in recent years, developing a game application is no longer too time-consuming. This week, I tried using the Amazon Q Developer CLI to help me build an english learning game quickly with Python. Honestly, I had no prior experience in game development, but with the power of the Amazon Q Developer CLI, it only took me 5 minutes to complete a game that is both creative and educational. And I have to say, it’s Magic!. Therefore, I really want to share a bit of my experience to spread this magic to everyone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Prerequisite&lt;/strong&gt;&lt;br&gt;
To start, you need to install Amazon Q for CLI.&lt;br&gt;
· If you are using a macOS computer, refer to the Amazon Q CLI installation guide for &lt;a href="https://docs.aws.amazon.com/amazonq/latest/qdeveloper-ug/command-line-installing.html" rel="noopener noreferrer"&gt;macOS&lt;/a&gt;&lt;br&gt;
· If you are using Linux, follow the Amazon Q CLI installation guide for &lt;a href="https://community.aws/content/2ulGwNwLFj5grS8hXJBMCN78Qwl/the-essential-guide-to-installing-amazon-q-developer-cli-on-linux?trk=6f6cb092-f1ba-456b-8644-73ed7ccbd567&amp;amp;sc_channel=el_" rel="noopener noreferrer"&gt;Linux&lt;/a&gt;.&lt;br&gt;
· If you are using Windows, follow this &lt;a href="https://community.aws/content/2v5PptEEYT2y0lRmZbFQtECA66M/the-essential-guide-to-installing-amazon-q-developer-cli-on-windows?trk=e07eca93-fa2f-4351-b567-f293b83eb635&amp;amp;sc_channel=el_" rel="noopener noreferrer"&gt;link&lt;/a&gt;. Note: While there is no native Windows installation yet, you can install and run Amazon Q Developer CLI on your Windows machines using the Windows Subsystem for Linux, or WSL for short. You might already have wsl installed on your machine, in which case you can skip this step. If you do not, then Microsoft have put together a &lt;a href="https://learn.microsoft.com/en-us/windows/wsl/setup/environment" rel="noopener noreferrer"&gt;blog post&lt;/a&gt; that walks you through this process.&lt;br&gt;
In addtion, you should install &lt;a href="https://www.pygame.org/wiki/GettingStarted" rel="noopener noreferrer"&gt;PyGame &lt;/a&gt;or some other gaming library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Here's how the game built&lt;/strong&gt;&lt;br&gt;
After successfully installing the Amazon Q CLI, let's start building our English learning game by following these steps:&lt;br&gt;
&lt;strong&gt;Register for a &lt;a href="https://community.aws/builderid?trk=b085178b-f0cb-447b-b32d-bd0641720467&amp;amp;sc_channel=el" rel="noopener noreferrer"&gt;Builder ID&lt;/a&gt; if you don't already have one.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Logging into Amazon Q Developer using a Builder ID.&lt;/strong&gt;&lt;br&gt;
You will see two login method options, which you can navigate using the up and down arrow keys. Choose the first option, "Use for Free with Builder ID."&lt;br&gt;
After selecting it, you’ll be prompted to open a URL in a web browser. Copy the URL and paste it into your browser. You’ll then need to either create a new Builder ID or log in with an existing one if you already have it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;? Select login method ›
❯ Use for Free with Builder ID
Use with Pro license
Confirm the following code in the browser
Code: PNDN-IKJH
Open this URL: https://view.awsapps.com/start/#/device?user_code=PNDN-IKJH
▰▰▱▱▱▱▱ Logging in...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Congratulations, you are now ready to go ahead!&lt;br&gt;
&lt;strong&gt;Let's start building our game with Amazon Q CLI&lt;/strong&gt;&lt;br&gt;
After completing the process, you’ll be logged into Amazon Q Developer and can access it from WSL by running the command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;q chat
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fz49pbgfwvr40c9mt8qaz.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%2Fz49pbgfwvr40c9mt8qaz.png" alt="Image description" width="513" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Refer to the following prompt to request Amazon Q CLI to build an English learning game:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a Python game using Pygame that is creative, educational, and focused on learning English. The game should not use audio, have simple gameplay rules, and be suitable for beginners. The game must run in a browser using Pyodide, so ensure compatibility by avoiding local file I/O and network calls. Structure the code with an asyncio main loop, checking for platform.system() == "Emscripten" as per Pyodide requirements.
Game Requirements:
• Objective: Players learn English vocabulary or grammar through interactive gameplay.
• Gameplay: Design a visually engaging game (e.g., a word-matching puzzle, spelling challenge, or sentence-building game) where players interact using mouse or keyboard inputs.
• Educational Aspect: Include a small set of English words (e.g., 10-20 common words) or simple grammar rules (e.g., verb conjugation or sentence structure). Provide feedback on correct/incorrect answers to help players learn.
• Rules: The game should have clear, simple rules (e.g., "Match the English word to its meaning in 60 seconds" or "Type the correct word to complete the sentence"). Display the rules on the screen at the start of the game.
• Visuals: Use basic Pygame shapes or text for visuals (e.g., rectangles, circles, or text-based prompts). Keep the design simple but colorful and appealing.
• Scoring: Track the player's score (e.g., +10 points for correct answers, -5 for incorrect ones) and display it on the screen.
• Game Loop: The game should have a start screen with rules, a main gameplay loop, and an end screen showing the final score and an option to restart.
• Code Structure: Include comments explaining the code. Use a single Python file with a clear setup() function for initialization and an update_loop() function for game updates, running at 60 FPS.
Output Format:
• Provide the complete Python code for the game.
• Include a section explaining the gameplay rules clearly.
• Ensure the code is fully functional and ready to run in a Pyodide environment.

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

&lt;/div&gt;



&lt;p&gt;Next, you will see Amazon Q start reasoning and writing code for the game.&lt;br&gt;
After about 3 minutes, Amazon Q finished building the code for the English learning game as requested. I have uploaded this code file to a &lt;a href="https://github.com/ductt7/game-with-amazonq" rel="noopener noreferrer"&gt;GitHub &lt;/a&gt;repository for you all to reference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Let's play the game&lt;/strong&gt;&lt;br&gt;
Start the game by typing the command &lt;code&gt;python3&lt;/code&gt; followed by the name of the built Python file.&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%2Flls93gb3eesp4b8o0hlj.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%2Flls93gb3eesp4b8o0hlj.png" alt="Image description" width="800" height="75"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The game interface has appeared, so let’s start playing and learning&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%2Flrxl16hmp9wy8lfik33o.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%2Flrxl16hmp9wy8lfik33o.png" alt="Image description" width="800" height="577"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Select your favorite topic&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%2Ftqkmbyefxr10fkxzwh6n.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%2Ftqkmbyefxr10fkxzwh6n.png" alt="Image description" width="800" height="569"&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%2Fv25iwd9blhqbr1p5kgrs.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%2Fv25iwd9blhqbr1p5kgrs.png" alt="Image description" width="800" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Upgrade the game&lt;/strong&gt;&lt;br&gt;
Enhance our game further by adding more themes for greater variety using a prompt like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Please add about 50 more topics to make the game more diverse.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After Amazon Q has finished building, try restarting the game and experience it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpx9dh9c4kodmiudn635o.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%2Fpx9dh9c4kodmiudn635o.png" alt="Image description" width="800" height="690"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Conclusion&lt;/strong&gt;&lt;br&gt;
As you can see, building a game is no longer as difficult or time-consuming as before if we know how to leverage the magic of GenAI, specifically the Amazon Q Developer CLI. Now, give it a try and share with me and everyone the game you’ve built using Amazon Q Developer CLI.&lt;/p&gt;

</description>
      <category>amazonqcli</category>
    </item>
    <item>
      <title>SOLUTIONS ARCHITECT VS. PRESALES IN THE CLOUD INDUSTRY: AWS SOLUTIONS ARCHITECT AND PRESALES</title>
      <dc:creator>Duc Tran (Sam)</dc:creator>
      <pubDate>Sat, 17 May 2025 16:09:56 +0000</pubDate>
      <link>https://dev.to/ductt/solutions-architect-vs-presales-in-the-cloud-industry-aws-solutions-architect-and-presales-gke</link>
      <guid>https://dev.to/ductt/solutions-architect-vs-presales-in-the-cloud-industry-aws-solutions-architect-and-presales-gke</guid>
      <description>&lt;p&gt;&lt;strong&gt;1. Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the technology sector, particularly in cloud computing like Amazon Web Services (AWS), two roles often come up: Solutions Architect and Presales. While both are critical in bridging technological solutions with customer needs, their responsibilities, skills, and work objectives differ significantly. This blog post focuses on clarifying the job descriptions and required professional skills for these two roles to provide individuals interested in pursuing a career in Cloud, but lacking clear career direction and undecided between these two positions, with a detailed and clear perspective. This will help them define their career goals. The article is not intended to diminish the value of either role. In addition, through this article, I also want to share my personal perspective on the differences between the Solutions Architect (SA) and Presales roles in my homeland, Vietnam. I would also like to hear more insights from those with experience so that everyone can contribute valuable opinions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. What is a Solutions Architect?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have read through the job postings for this position from companies like AWS or Google Cloud, you will notice that they describe the Solutions Architect role as follows: A Solutions Architect is responsible for designing, building, and implementing technology solutions tailored to a customer’s specific needs. In the AWS context, an AWS Solutions Architect leverages AWS cloud services to create optimized system architectures that ensure performance, security, scalability, and cost-efficiency.&lt;br&gt;
Key Responsibilities of a Solutions Architect:&lt;br&gt;
• Analyze customer requirements: Understand the customer’s business, technical needs, and challenges.&lt;br&gt;
• Design solution architectures: Develop cloud-native or hybrid architectures using AWS services like EC2, S3, Lambda, RDS, etc.&lt;br&gt;
• Optimize systems: Ensure solutions meet performance, security, reliability, and cost criteria.&lt;br&gt;
• Support implementation: Collaborate with technical teams to deploy solutions, sometimes assisting in initial operations.&lt;br&gt;
• Provide technical consulting: Offer technology recommendations based on deep AWS expertise.&lt;br&gt;
• Detailed and Technical Estimation: Solutions Architects handle detailed resource estimation during the solution design and implementation planning phases, ensuring the architecture meets technical and performance requirements.&lt;br&gt;
Required Skills:&lt;br&gt;
• In-depth knowledge of AWS services and cloud architecture.&lt;br&gt;
• Proficiency in designing distributed systems, microservices, and DevOps practices.&lt;br&gt;
• Basic programming skills (Python, JavaScript, or CloudFormation) for automation or customization.&lt;br&gt;
• Software Development&lt;br&gt;
• Communication skills to explain complex technical concepts to non-technical stakeholders.&lt;br&gt;
• Certifications like AWS Certified Solutions Architect – Associate or Professional are often required.&lt;br&gt;
A Solutions Architect (SA) is someone with a deep understanding of the customer’s systems, including infrastructure, network, database, applications, user behavior, and even the specific characteristics of the business, to propose migration or application deployment solutions on the Cloud. This is done in a way that addresses the customer’s challenges and delivers value to them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What is Presales?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Presales (Pre-sales) focuses on supporting the sales team in convincing customers to choose a company’s products or services. In the AWS ecosystem, a Presales professional works with cloud solutions to demonstrate the value, benefits, and capabilities of AWS, driving contract closures.&lt;br&gt;
Key Responsibilities of Presales:&lt;br&gt;
• Support sales efforts: Partner with the sales team to prepare presentations, product demos, or answer technical customer queries.&lt;br&gt;
• Solution consulting: Explain how AWS services can address customer challenges, typically at a high level compared to Solutions Architects.&lt;br&gt;
• Prepare technical materials: Create documents like technical proposals (RFP/RFQ), pitch decks, or Proof of Concepts (PoCs).&lt;br&gt;
• Build customer trust: Ensure customers understand the value of AWS solutions and feel confident in their choice.&lt;br&gt;
• Internal coordination: Work with Solutions Architects or technical teams to ensure proposed solutions are feasible.&lt;br&gt;
• High-Level Estimation for Proposals: Presales professionals are primarily responsible for creating initial resource estimates during the pre-sales phase to support proposals or RFP responses. These estimates are high-level, focusing on aligning with the customer’s business goals and budget&lt;br&gt;
Required Skills:&lt;br&gt;
• Excellent communication and presentation skills to convey information to non-technical audiences.&lt;br&gt;
• Broad understanding of AWS services and their application to business scenarios.&lt;br&gt;
• Negotiation and relationship-building skills with customers.&lt;br&gt;
• Ability to work under time pressure and handle complex customer requirements.&lt;br&gt;
• Certifications like AWS Certified Cloud Practitioner or AWS Certified Solutions Architect – Associate are advantageous but not always mandatory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Comparing Solutions Architect and Presales in the Cloud Industry&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In summary, here’s a detailed comparison of the two roles in the AWS context:&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%2Fpwyy5m2eum1zxroidslm.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%2Fpwyy5m2eum1zxroidslm.png" alt="Image description" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Real-World Example in AWS&lt;/strong&gt;&lt;br&gt;
Scenario 1: A mid-sized bank wants to deploy its core banking application on AWS&lt;br&gt;
A regional bank aims to modernize its legacy core banking system by migrating and deploying it on AWS. The bank requires a highly secure, scalable, and compliant solution to handle critical transactions, customer data, and regulatory requirements, such as data residency and financial industry standards (e.g., PCI DSS). The bank is evaluating AWS against other cloud providers and needs a solution that minimizes downtime and ensures cost-efficiency.&lt;br&gt;
• Presales Role:&lt;br&gt;
o   Engage with bank executives: Meet with the bank’s CIO, CFO, and compliance officers to present the strategic benefits of AWS, emphasizing its global infrastructure, security certifications (e.g., PCI DSS, ISO 27001), and cost savings compared to on-premises systems.&lt;br&gt;
o   Demonstrate capabilities: Prepare and deliver a tailored demo showcasing AWS services like Amazon RDS for managing transactional databases and AWS Key Management Service (KMS) for encryption, highlighting how these ensure data security and compliance.&lt;br&gt;
o   Address business concerns: Respond to questions about total cost of ownership (TCO), service-level agreements (SLAs), and AWS’s ability to support 24/7 banking operations with high availability.&lt;br&gt;
o   Estimate resources for proposals: Use the AWS Pricing Calculator to generate a high-level cost estimate based on assumptions (e.g., 100 EC2 instances, 1TB RDS storage, 10TB S3 for archives), presenting a $50,000/month cost compared to $80,000/month on-premises to secure buy-in.&lt;br&gt;
o   Develop a business case: Create a pitch deck and a high-level proposal (RFP response) that outlines how AWS can reduce infrastructure costs by up to 30% and accelerate time-to-market for new banking features, supported by case studies of other financial institutions on AWS.&lt;br&gt;
o   Facilitate trust-building: Arrange a workshop with AWS account managers to introduce the bank to AWS’s financial services team, reinforcing confidence in AWS’s expertise in banking.&lt;br&gt;
• Solutions Architect Role:&lt;br&gt;
o   Analyze the bank’s requirements: Conduct discovery sessions with the bank’s IT team to understand the core banking application’s architecture, including its database (e.g., Oracle), middleware, integration with payment gateways, and regulatory compliance needs.&lt;br&gt;
o   Design a secure architecture: Propose a detailed AWS architecture, such as: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compute: Use Amazon EC2 with Auto Scaling to handle transaction spikes during peak banking hours.&lt;/li&gt;
&lt;li&gt;Database: Deploy Amazon RDS for Oracle or Amazon Aurora for transactional data, configured with Multi-AZ for high availability.&lt;/li&gt;
&lt;li&gt;Security: Implement AWS WAF, AWS Shield, and IAM policies to protect against DDoS attacks and ensure least-privilege access. Use AWS KMS for data encryption at rest and in transit.&lt;/li&gt;
&lt;li&gt;Compliance: Set up a Landing Zone with AWS Control Tower to enforce data residency and compliance with local regulations.&lt;/li&gt;
&lt;li&gt;Networking: Configure a VPC with private subnets for sensitive workloads and AWS Transit Gateway for secure integration with third-party payment systems.&lt;/li&gt;
&lt;li&gt;Estimate resources precisely: Analyze the workload (e.g., 10,000 transactions/second, 500GB active database) to size resources, specifying 50 m5.large EC2 instances, a Multi-AZ RDS Oracle instance with 1TB storage, and 5TB S3 Standard storage. Use AWS Cost Explorer to estimate a precise cost of $48,500/month, recommending Reserved Instances for 15% savings.&lt;/li&gt;
&lt;li&gt;Plan migration: Develop a phased migration strategy to minimize downtime, using AWS Database Migration Service (DMS) to transfer data from the on-premises Oracle database to RDS, and AWS Application Migration Service for application workloads.&lt;/li&gt;
&lt;li&gt;Build a Proof of Concept (PoC): Set up a PoC environment on AWS to simulate core banking transactions, demonstrating performance and failover capabilities during a stress test.&lt;/li&gt;
&lt;li&gt;Optimize costs and performance: Use AWS Trusted Advisor and AWS Cost Explorer to recommend cost-saving measures, such as Reserved Instances for EC2 and right-sizing RDS instances, while ensuring the system meets the bank’s 99.99% uptime requirement.&lt;/li&gt;
&lt;li&gt;Support implementation: Work with the bank’s DevOps team to deploy the application, configure monitoring with Amazon CloudWatch, and provide documentation for ongoing operations.
Scenario 2: A retail company wants to deploy a Generative AI application on AWS
A mid-sized retail company aims to deploy a Generative AI (GenAI) application on AWS to create personalized marketing content, such as product descriptions, social media posts, and customer email campaigns. The application must process large datasets (e.g., customer purchase history, product catalogs), leverage GenAI models for content generation, and integrate with existing e-commerce platforms. The company requires a scalable, cost-effective solution with low latency and compliance with data privacy regulations (e.g., GDPR for European customers). They are comparing AWS with other cloud providers and need a compelling case to proceed.
• Presales Role:
o   Engage with business stakeholders: Meet with the company’s CMO, CTO, and data privacy officer to highlight AWS’s GenAI capabilities, emphasizing services like Amazon Bedrock for managed AI models and AWS SageMaker for custom model training, along with AWS’s compliance with GDPR.
o   Demonstrate business value: Deliver a demo using Amazon Bedrock to generate sample product descriptions based on the company’s catalog, showcasing how GenAI can reduce content creation time by 50% and improve customer engagement.
o   Address business concerns: Answer questions about costs, scalability, and integration with existing systems (e.g., Shopify or Salesforce), emphasizing AWS’s pay-as-you-go pricing and global infrastructure for low-latency content delivery.
o   Estimate resources for proposals: Use the AWS Pricing Calculator to create a high-level cost estimate based on assumptions (e.g., 10,000 API calls/day to Bedrock, 500GB S3 storage for datasets, and SageMaker for model training), presenting a monthly cost of $15,000 compared to $25,000 for on-premises GPU servers.
o   Develop a business case: Prepare a pitch deck and RFP response outlining how AWS’s GenAI solutions can increase marketing ROI by 20% through personalized content, supported by case studies of retail companies using AWS for AI.
o   Build trust: Organize a virtual workshop with AWS’s AI/ML specialists to discuss GDPR compliance and demonstrate AWS’s security features, reassuring the company about data privacy.
• Solutions Architect Role:
o   Analyze technical requirements: Conduct workshops with the company’s data science and IT teams to understand the GenAI application’s needs, including dataset size (e.g., 500GB customer data), model inference requirements (e.g., 10,000 API calls/day), and integration with e-commerce APIs.
o   Design a scalable architecture: Propose a detailed AWS architecture, such as:
 GenAI Core: Use Amazon Bedrock to access pre-trained foundation models (e.g., Anthropic Claude or Meta AI Llama) for content generation, minimizing custom development.
 Data Storage: Store datasets in Amazon S3 with lifecycle policies to transition older data to S3 Glacier for cost savings.
 Data Processing: Use AWS Glue for ETL (Extract, Transform, Load) to prepare customer and product data for AI model input.
 Model Training (if needed): Deploy Amazon SageMaker for fine-tuning models with company-specific data (e.g., brand tone for content).
 Compute: Use Amazon ECS with Fargate for serverless containerized APIs to serve GenAI outputs to the e-commerce platform.
 Security and Compliance: Implement AWS IAM for access control, AWS KMS for data encryption, and AWS Config to enforce GDPR-compliant data residency.
 Networking: Set up a VPC with private subnets for data processing and Amazon API Gateway for secure API access by the e-commerce platform.
o   Estimate resources precisely: Analyze the workload (e.g., 10,000 Bedrock API calls/day, 500GB S3 storage, 100 hours/month SageMaker training) to size resources, specifying Bedrock’s on-demand pricing, S3 Standard storage, and SageMaker ml.g5.xlarge instances. Use AWS Cost Explorer to estimate a precise cost of $14,200/month, recommending S3 Intelligent-Tiering to save 10% on storage costs.
o   Plan deployment: Design a deployment pipeline using AWS CodePipeline and CodeBuild to automate application updates, ensuring seamless integration with the e-commerce platform.
o   Build a Proof of Concept (PoC): Set up a PoC environment on AWS to generate 1,000 sample marketing emails using Bedrock, testing latency (e.g., &amp;lt;1 second per API call) and integration with the company’s Shopify API.
o   Optimize costs and performance: Use AWS Trusted Advisor to recommend cost optimizations (e.g., Reserved Capacity for Bedrock) and Amazon CloudWatch to monitor API latency, ensuring the application meets the company’s 99.9% availability SLA.
o   Support implementation: Collaborate with the company’s developers to deploy the application, configure monitoring dashboards, and provide training on using Bedrock and SageMaker for ongoing content generation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;6. The Reality in Vietnam: A Hybrid Role for Solutions Architect and Presales&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In Vietnam, the line between Solutions Architect and Presales roles in the cloud industry, particularly with AWS, is often indistinct. Many organizations, especially the Cloud Partners, merge these roles into a single position or expect one individual to juggle both sets of responsibilities. This blending reflects Vietnam’s unique market dynamics and creates a distinctive career landscape for cloud professionals.&lt;br&gt;
Why Do These Roles Converge in Vietnam?&lt;br&gt;
• Compact Teams: Many Vietnamese tech firms operate with lean technical and sales teams, making it inefficient to maintain separate roles. A single professional often handles both customer consultations (Presales) and technical solution design (Solutions Architect).&lt;br&gt;
• Customer Preferences: Vietnamese clients, particularly smaller businesses, favor a single point of contact who can address business goals, technical details, and cost concerns. This demands a hybrid role that bridges sales and engineering.&lt;br&gt;
• Cost Optimization: Combining roles reduces hiring and operational expenses, a priority for companies in a competitive, cost-sensitive market.&lt;br&gt;
• Emerging Cloud Market: While Vietnam’s cloud adoption is accelerating, the market is still maturing. Many customers lack in-house cloud expertise, relying on a versatile professional to guide them through both strategic and technical aspects of AWS adoption.&lt;br&gt;
• One reason is that some Solutions Architects in Vietnam often fail to distinguish between the concepts of SA and Presales, leading to the overuse of the SA title. They tend to assume that they only need presentation skills and the ability to meet customers to understand their requirements, without requiring deep technical knowledge. They also believe that tasks like Proof of Concept (PoC) or implementation will be handled by Cloud Engineers. &lt;br&gt;
• Another reason is that the companies themselves lack clarity in defining job requirements and descriptions during the recruitment process. When posting job listings, they often outline a Presales role, such as meeting customers and preparing estimates, combined with some Solutions Architect (SA) responsibilities, like conducting Proofs of Concept (PoCs), designing architectures, and possessing software development skills. However, in reality, the personnel they recruit typically only have Presales skills.&lt;br&gt;
If you have worked with Cloud Partners in Vietnam, such as AWS partners, you’ll notice that many engineers at these partners hold the title of Solutions Architect (SA). However, the work they perform often resembles that of a Presales role or includes only a small portion of SA responsibilities, meaning they are not true SAs in the full sense. Most of their tasks involve accompanying Account Managers to meet customers and understand their requirements. Afterward, they return to create a high-level proposal, which includes a high-level cloud architecture and cost estimate, and then present it back to the customer. If they successfully convince the customer to proceed to the Proof of Concept (PoC) phase, these SAs often lack the capability to execute it because they only possess skills in tools like PowerPoint, Excel, and Word, without hands-on experience or, more critically, a deep understanding of the customer’s application. Even more concerning, they believe that an SA’s job is to meet customers, propose a high-level solution, and hand it over to Cloud Engineers for implementation. This mindset leads to serious consequences, as I’ve witnessed. For example, a Presales professional with the title of AWS Solutions Architect at a cloud partner in Vietnam, lacking an understanding of the customer’s application workflow and specialized knowledge of Kubernetes and databases, created a very high-level solution. During meetings with the customer, they focused solely on server sizing for cost estimation without clarifying the workflow of services within the Kubernetes cluster, resulting in the omission of an internal API Gateway in the design. When the Cloud Engineer took over for implementation, this issue was discovered, forcing them to inform the customer about necessary adjustments to the architecture and cost estimate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Conclusion&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Solutions Architect and Presales roles are pivotal in driving cloud adoption, each bringing unique strengths to the table. Presales professionals excel at building trust and articulating AWS’s business value, as seen in their ability to pitch cost-effective GenAI solutions or secure buy-in for core banking migrations. Solutions Architects, meanwhile, transform these visions into reality through detailed architectures and hands-on implementation, ensuring technical precision and compliance. In Vietnam, however, these roles often merge into a hybrid position, blending customer engagement with technical design. While this offers opportunities for versatile skill development, it also presents challenges, such as the overuse of the Solutions Architect title and unclear job descriptions. Many professionals labeled as SAs primarily perform Presales tasks—meeting clients, preparing high-level proposals, and estimating costs—while lacking the deep technical expertise needed for PoCs or deployments, often leaving critical tasks to Cloud Engineers. This stems from both a misconception among professionals, who may prioritize presentation over technical depth, and companies’ vague recruitment practices, which mix Presales and SA responsibilities without ensuring candidates have the necessary skills.&lt;br&gt;
This article focuses on clarifying the job descriptions and professional skills required for these roles to provide clarity for those pursuing cloud careers but unsure about their path. Whether you’re drawn to the strategic persuasion of Presales or the technical craftsmanship of a Solutions Architect, understanding their distinctions—and Vietnam’s unique context—empowers you to set clear career goals. Through this article, I aim to share my personal perspective on the differences between these roles in my homeland, Vietnam, and I’d love to hear insights from experienced professionals to enrich this discussion with diverse viewpoints. This exploration is not about elevating one role over the other but about equipping you with the knowledge to navigate Vietnam’s dynamic cloud landscape. To thrive, pursue relevant AWS certifications, balance technical and soft skills, and engage with local cloud communities to learn from real-world challenges, like those in our core banking and GenAI scenarios. &lt;br&gt;
I also want to help you understand the roles of these two titles clearly so that you can accurately identify your own title and have the right career direction. At the same time, I hope companies will clarify job roles so that candidates can understand them better..&lt;br&gt;
What’s your experience with these roles? Share your thoughts to help others chart their cloud journey!&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>Build the Order Processing System using serverless architecture on AWS</title>
      <dc:creator>Duc Tran (Sam)</dc:creator>
      <pubDate>Sun, 04 May 2025 16:18:20 +0000</pubDate>
      <link>https://dev.to/ductt/build-the-order-processing-system-using-serverless-architecture-on-aws-3pai</link>
      <guid>https://dev.to/ductt/build-the-order-processing-system-using-serverless-architecture-on-aws-3pai</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;1. Introduction&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The order processing system is an indispensable component of e-commerce platforms. It is responsible for receiving order information, recording order details in the database, and sending order confirmation notifications to users. In this article, I will walk you through how to design and deploy a serverless order processing system on AWS.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;2. Architecture&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The architecture of the order processing system is built completely using AWS serverless services, which means customers don't need to worry about managing servers as in traditional models. This architecture operates as follows:&lt;br&gt;
• When the client sends data via API to the API Gateway, the data is processed by the code within the Lambda function.&lt;br&gt;
• The Lambda function then sends a message to the SQS queue, where it awaits processing by another backend logic component in the system.&lt;br&gt;
• Additionally, the Lambda function can send order status notification emails via SNS.&lt;br&gt;
• To store order data, the Lambda function also writes the information to a NoSQL database (DynamoDB).&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%2F9337skmw4s31wvoupfqi.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%2F9337skmw4s31wvoupfqi.png" alt="Order Processing System Architecture Based on Serverless" width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;3. Implementation Steps&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.1   Create SQS Queue&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The SQS FIFO (First-In-First-Out) queue ensures that order messages are processed in the exact order they are received. This is crucial for maintaining the sequence of operations and ensuring that orders are handled correctly and efficiently, providing fault tolerance and decoupling the processing steps.&lt;br&gt;
This step will guide you through creating an SQS FIFO queue to serve as the message queue&lt;br&gt;
• Login to AWS Console and search SQS&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%2Fv4v2owq67ddnoavcjx0f.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%2Fv4v2owq67ddnoavcjx0f.png" alt="Image description" width="800" height="168"&gt;&lt;/a&gt;&lt;br&gt;
• In SQS, click &lt;strong&gt;Create queue&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7626vp7n6mvo1akpmuxl.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%2F7626vp7n6mvo1akpmuxl.png" alt="Image description" width="800" height="231"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Select a FIFO queue and name the queue&lt;br&gt;
• In the FIFO queue settings:&lt;/p&gt;

&lt;p&gt;o   Enable Content-based deduplication so that SQS can detect and eliminate duplicate messages&lt;br&gt;
o   Enable High throughput FIFO queue to maintain the order of messages in the queue and ensure deduplication&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%2F6z0kuihrh3jgxhfuwz27.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%2F6z0kuihrh3jgxhfuwz27.png" alt="Image description" width="800" height="513"&gt;&lt;/a&gt;&lt;br&gt;
• Click Create queue&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%2Fsgw4vvpzjt42dwk0xyoo.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%2Fsgw4vvpzjt42dwk0xyoo.png" alt="Image description" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.2.  Create Lambda function for processing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Lambda function serves as the central component of the processing logic. It receives incoming requests from the API Gateway, processes the order information, sends the order details to the SQS FIFO queue, and initiates notifications through SNS. Leveraging Lambda allows the system to scale efficiently and remain reliable—without the overhead of managing server infrastructure&lt;br&gt;
This step will create a Lambda function to handle messages from the client&lt;br&gt;
• In Lambda console, click &lt;strong&gt;Create a function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F66c5d176mpr5un5q4p08.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%2F66c5d176mpr5un5q4p08.png" alt="Image description" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Select &lt;strong&gt;Author from scratch&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjztadq3c21xbx91sc5nm.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%2Fjztadq3c21xbx91sc5nm.png" alt="Image description" width="800" height="234"&gt;&lt;/a&gt;&lt;br&gt;
• Enter function name&lt;br&gt;
• Select Runtime: Python 3.1x&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%2F1bdmoualfwvbsrequavr.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%2F1bdmoualfwvbsrequavr.png" alt="Image description" width="800" height="514"&gt;&lt;/a&gt;&lt;br&gt;
• Click &lt;strong&gt;Create function&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fablymlwypb7exbqwf35t.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%2Fablymlwypb7exbqwf35t.png" alt="Image description" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.3.  Create SNS Topic&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The Simple Notification Service (SNS) delivers notifications to the admin. Whenever an order is received, SNS ensures that a real-time alert is sent to the administrator, keeping them updated with the order details.&lt;br&gt;
This section will create an SNS Topic to send order notifications to the recipient's email.&lt;br&gt;
• In AWS console, search SNS&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%2Foxu2jwwdq8fieyz2458j.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%2Foxu2jwwdq8fieyz2458j.png" alt="Image description" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Topics **then click **Create topic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm70x0p9n987dffwnw93w.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%2Fm70x0p9n987dffwnw93w.png" alt="Image description" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In SNS, select &lt;strong&gt;Standard&lt;/strong&gt; and enter queue name&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%2Fxlu9ag2zivez5gwq9s40.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%2Fxlu9ag2zivez5gwq9s40.png" alt="Image description" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Create topic&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhijpw08962m660w14htb.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%2Fhijpw08962m660w14htb.png" alt="Image description" width="800" height="127"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Create subscription&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F58ge1jhejxwzv5jyx89e.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%2F58ge1jhejxwzv5jyx89e.png" alt="Image description" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Select Protocol: Email&lt;br&gt;
• Endpoint: enter your email&lt;br&gt;
• Click Create subscription&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%2Fj84w6f60fwsl8694p1hi.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%2Fj84w6f60fwsl8694p1hi.png" alt="Image description" width="800" height="262"&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%2Fg2jlllsrx0x85ei5idm9.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%2Fg2jlllsrx0x85ei5idm9.png" alt="Image description" width="800" height="262"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Login your email&lt;br&gt;
• Check email from AWS from Inbox or Spam&lt;br&gt;
• Click Confirm subscription to subscribe.&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%2Fna7p2wzg8f47egy7mk9a.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%2Fna7p2wzg8f47egy7mk9a.png" alt="Image description" width="800" height="353"&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%2Foc5ntdoghe3uggul2gj4.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%2Foc5ntdoghe3uggul2gj4.png" alt="Image description" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.4.  Create DynamoDB to store order information&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;DynamoDB is used to store order details, with each order being saved in this highly scalable, low-latency NoSQL database. It provides quick and reliable access to order data, ensuring that the information is always available for further processing or querying as needed&lt;br&gt;
This section will create a DynamoDB table to store order information&lt;br&gt;
• In AWS console, search DynamoDB&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%2Fj9glspzie2rmtrghud8n.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%2Fj9glspzie2rmtrghud8n.png" alt="Image description" width="800" height="219"&gt;&lt;/a&gt;&lt;br&gt;
• In DynamoDB, click &lt;strong&gt;Create table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5ppjrbrgwl7qcnl77hj9.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%2F5ppjrbrgwl7qcnl77hj9.png" alt="Image description" width="800" height="305"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Enter Table name, Partition key and Sort key&lt;br&gt;
• Click &lt;strong&gt;Create table&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu2ycom6kwu38lbzy2mn9.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%2Fu2ycom6kwu38lbzy2mn9.png" alt="Image description" width="800" height="404"&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%2Fuq8thfssdrogz1julk2j.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%2Fuq8thfssdrogz1julk2j.png" alt="Image description" width="800" height="292"&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%2Fglwsvfzf1hidgc3wuhr6.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%2Fglwsvfzf1hidgc3wuhr6.png" alt="Image description" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Wait for 5 minutes and click the created table&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%2Fo8mc9of1sx7bi8q4hqve.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%2Fo8mc9of1sx7bi8q4hqve.png" alt="Image description" width="800" height="223"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click *&lt;em&gt;Actions *&lt;/em&gt;-&amp;gt; *&lt;em&gt;Create item *&lt;/em&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%2Fq18zt0dwxt9f9mkyubls.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%2Fq18zt0dwxt9f9mkyubls.png" alt="Image description" width="800" height="353"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Add new attribute&lt;/strong&gt; -&amp;gt; &lt;strong&gt;String&lt;/strong&gt;&lt;br&gt;
• Add 2 attributes “items” and “shippingAddress”&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%2F1oxojwde7gnyl359lfxq.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%2F1oxojwde7gnyl359lfxq.png" alt="Image description" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Enter Partition key and Sort key&lt;br&gt;
o   Partition key: orderID – Value: 1234&lt;br&gt;
o   Sort key: customerName – Value: Selina&lt;br&gt;
• Click &lt;strong&gt;Create item&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftdnonkn57e5ex2n4exkh.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%2Ftdnonkn57e5ex2n4exkh.png" alt="Image description" width="800" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.5.  Create IAM policy for Lambda function&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This step will create an IAM policy to allow Lambda to call APIs for SQS, SNS, and DynamoDB.&lt;br&gt;
• Access IAM – click &lt;strong&gt;Policies **– click **Create policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkh2uh9qcv7k39do52nc8.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%2Fkh2uh9qcv7k39do52nc8.png" alt="Image description" width="800" height="254"&gt;&lt;/a&gt;&lt;br&gt;
• Select &lt;strong&gt;JSON&lt;/strong&gt;&lt;br&gt;
• Download IAM Policy from Github:&lt;a href="https://dev.tourl"&gt;https://github.com/ductt7/serverless/blob/main/CustomLambdaPolicy.json&lt;/a&gt;&lt;br&gt;
• Copy the contents of the &lt;strong&gt;CustomLambdaPolicy.json&lt;/strong&gt; file and paste it into the Policy editor in the IAM policy.&lt;br&gt;
o   Go back to SQS, copy the ARN of the created SQS queue, and replace the ARN in the policy (line 7 in the Policy editor) with the one you just copied.&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%2Fg83a89ki0y71v2i4lf3m.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%2Fg83a89ki0y71v2i4lf3m.png" alt="Image description" width="800" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o   Go back to SNS, copy the ARN of the created SNS topic, and replace the ARN in the policy (line 12 in the Policy editor) with the one you just copied&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%2F4r13hnc8umnilyg8r1f8.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%2F4r13hnc8umnilyg8r1f8.png" alt="Image description" width="711" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o   Go to DynamoDB, under the Tables section, click on the Order table you created.&lt;br&gt;
o   Click Additional info, copy the ARN of the DynamoDB table, and replace the ARN in the policy (line 17 in the Policy editor) with the copied value.&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%2F9lxvlcp8met6ycto3rts.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%2F9lxvlcp8met6ycto3rts.png" alt="Image description" width="800" height="363"&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%2Fskovmhjdvpjzqp3c7g4c.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%2Fskovmhjdvpjzqp3c7g4c.png" alt="Image description" width="800" height="507"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o   After updating the ARNs of SQS, SNS, and DynamoDB in the IAM Policy editor, click &lt;strong&gt;Next&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcbhbnqpnzzugfggyvn2h.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%2Fcbhbnqpnzzugfggyvn2h.png" alt="Image description" width="800" height="528"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Enter IAM policy name and click &lt;strong&gt;Create policy&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu43ulwwe5rmlzcgpqy9b.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%2Fu43ulwwe5rmlzcgpqy9b.png" alt="Image description" width="800" height="409"&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%2Fi23ea48njw8pb8lcg4js.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%2Fi23ea48njw8pb8lcg4js.png" alt="Image description" width="800" height="271"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Go back to Lambda, navigate to the Configuration tab, click Permissions, and then click on the Role name of the Lambda to assign the IAM policy you just created to the Lambda's IAM role.&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%2Fm19uxt0zm5z9pp85sl8f.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%2Fm19uxt0zm5z9pp85sl8f.png" alt="Image description" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In IAM Role of Lambda, click &lt;strong&gt;Add permissions&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Attach policies&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feqtk37rrhn450v1uvl1s.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%2Feqtk37rrhn450v1uvl1s.png" alt="Image description" width="800" height="288"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Type the name of the IAM policy you created earlier, check the box next to the IAM policy, and click &lt;strong&gt;Add permissions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlwkwkt4aih98mvpbnih.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%2Fzlwkwkt4aih98mvpbnih.png" alt="Image description" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.6.  Test Lambda function&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This step will create a Python script on the Lambda function to process order messages from the SQS queue, send an email to the user, and store order information in DynamoDB.&lt;br&gt;
• Download the Python script:&lt;a href="https://dev.tourl"&gt;https://github.com/ductt7/serverless&lt;/a&gt;&lt;br&gt;
• Go back to Lambda, under the Code section, click on the lambda_function.py file.&lt;br&gt;
• Delete all the existing code.&lt;br&gt;
• Copy the code from the downloaded Python file and paste it into lambda_function.py in the console.&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%2F2tnuyfu5eh5mpwplsfg8.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%2F2tnuyfu5eh5mpwplsfg8.png" alt="Image description" width="800" height="387"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Test **-&amp;gt; **Configure test event&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpannc9nrigfr3k0kpdvo.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%2Fpannc9nrigfr3k0kpdvo.png" alt="Image description" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Enter Event name&lt;br&gt;
• Template: select apigateway-aws-proxy&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%2F31dpzg8lribg29ykzpzy.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%2F31dpzg8lribg29ykzpzy.png" alt="Image description" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Download file: &lt;a href="https://dev.tourl"&gt;https://github.com/ductt7/serverless/blob/main/JsonForTestEvent.json&lt;/a&gt;&lt;br&gt;
• Copy the contents of the JsonForTestEvent.json file and paste it into the Event JSON. Then click Save.&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%2F2gto9or57g4q014p1ien.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%2F2gto9or57g4q014p1ien.png" alt="Image description" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Test&lt;/strong&gt;&lt;br&gt;
• If the result returns a status code of 200, it means the code is correct. If not, check the code or the IAM role of the Lambda&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%2Fn5d331c4f7fmaqysemnv.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%2Fn5d331c4f7fmaqysemnv.png" alt="Image description" width="800" height="359"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.7. Create API Gateway&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;API Gateway acts as the entry point for the order processing system. It receives order data through a POST request, ensuring secure and reliable transmission to the backend for further processing. This service functions as a bridge between external client applications and internal services, enabling seamless and efficient communication.&lt;br&gt;
This step will create an API Gateway to receive HTTP API requests from the client.&lt;br&gt;
• In Lambda, click &lt;strong&gt;Add trigger&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvqyfhmm025px2irjf5yj.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%2Fvqyfhmm025px2irjf5yj.png" alt="Image description" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In &lt;strong&gt;Select a source&lt;/strong&gt;, select API Gateway&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%2F3qdo573as3f6599htp33.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%2F3qdo573as3f6599htp33.png" alt="Image description" width="800" height="385"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In Intent, select &lt;strong&gt;Create a new API&lt;/strong&gt;.&lt;br&gt;
• Security: select &lt;strong&gt;Open&lt;/strong&gt;&lt;br&gt;
• Click &lt;strong&gt;Add&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8oancmsxyovgdvf1zh8a.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%2F8oancmsxyovgdvf1zh8a.png" alt="Image description" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Return to Lambda, click API Gateway&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%2Flu9v072bm8v0013gpzn8.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%2Flu9v072bm8v0013gpzn8.png" alt="Image description" width="800" height="377"&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%2Fivtwmn8bnp2q5tz1ur93.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%2Fivtwmn8bnp2q5tz1ur93.png" alt="Image description" width="800" height="234"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In API Gateway, click APIs and click the created API &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%2F8wrqp6qjnsgc3h9jm0rq.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%2F8wrqp6qjnsgc3h9jm0rq.png" alt="Image description" width="800" height="222"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In Routes, click &lt;strong&gt;ANY **-&amp;gt; **Edit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0uac5cxfyevd1ftibilo.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%2F0uac5cxfyevd1ftibilo.png" alt="Image description" width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Change the API method to POST, as the API Gateway in this case only accepts POST requests from the client.&lt;br&gt;
• Click &lt;strong&gt;Save&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7zs3i736g6hn9fwinmsm.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%2F7zs3i736g6hn9fwinmsm.png" alt="Image description" width="800" height="323"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3.8.  Verify&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This step will test sending an API from the client to the API Gateway to check if the Lambda function operates correctly as configured.&lt;br&gt;
• In the Lambda function code, update the following sections:&lt;br&gt;
Update the name of the DynamoDB table on line 6 to match the name of the DynamoDB table you created.&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%2Fgklbtzk0tvp5k1taboyx.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%2Fgklbtzk0tvp5k1taboyx.png" alt="Image description" width="800" height="132"&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%2F6fmzo1kvqjl3iflgw879.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%2F6fmzo1kvqjl3iflgw879.png" alt="Image description" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o   Update the QueueUrl in line 39 with the URL of SQS queue&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%2F1vv1svr8mk7ihmr28511.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%2F1vv1svr8mk7ihmr28511.png" alt="Image description" width="800" height="452"&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%2Ftq9hn1p2zuz64j3sn8an.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%2Ftq9hn1p2zuz64j3sn8an.png" alt="Image description" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;o   Update the TopicArn in line 49 with arn of SNS Topic&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%2Ftfqb0vm41smhmppi69w2.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%2Ftfqb0vm41smhmppi69w2.png" alt="Image description" width="800" height="296"&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%2Fehiuq8f5sa6pyley924g.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%2Fehiuq8f5sa6pyley924g.png" alt="Image description" width="800" height="251"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click *&lt;em&gt;Deploy *&lt;/em&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%2Fe4frb4tnj8oiznxq73d6.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%2Fe4frb4tnj8oiznxq73d6.png" alt="Image description" width="800" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Download test script: &lt;a href="https://dev.tourl"&gt;https://github.com/ductt7/serverless/blob/main/test-api-command.txt&lt;/a&gt;&lt;br&gt;
• In API Gateway, copy URL of API Gateway&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%2Fv0cj6xml3xglrh753kf8.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%2Fv0cj6xml3xglrh753kf8.png" alt="Image description" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Update URL of API Gateway.&lt;br&gt;
• Add Lambda function name in the end of the URL&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%2Ff3ogpsu3hanhejsc5qbc.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%2Ff3ogpsu3hanhejsc5qbc.png" alt="Image description" width="800" height="429"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In AWS console, open **CloudShell **to simulate the client sends API request to API Gateway&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%2F973p1zbezupc4fa4gtjl.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%2F973p1zbezupc4fa4gtjl.png" alt="Image description" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Copy script, paste into CloudShell&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%2F7zfp4f7d3ji2gx1fhxmd.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%2F7zfp4f7d3ji2gx1fhxmd.png" alt="Image description" width="800" height="472"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• In SQS, click &lt;strong&gt;Send and receive messages&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhfz2nr673eu7t1ng6xwk.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%2Fhfz2nr673eu7t1ng6xwk.png" alt="Image description" width="800" height="85"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click &lt;strong&gt;Poll for messages&lt;/strong&gt; to check if the message has been processed by the Lambda function and added to the queue&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%2Fnknhvwmcnomqm4u2ta8r.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%2Fnknhvwmcnomqm4u2ta8r.png" alt="Image description" width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Click on the message to inspect its content. These messages can be stored in the queue, waiting to be processed by another backend logic component in the system.&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%2Fdj8xztkp2bvtyy2i7ii7.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%2Fdj8xztkp2bvtyy2i7ii7.png" alt="Image description" width="800" height="259"&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%2Fc58201pscyofm1ut9554.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%2Fc58201pscyofm1ut9554.png" alt="Image description" width="800" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Check email from SNS&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%2F8f4ef9x3x6xkksnytd7t.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%2F8f4ef9x3x6xkksnytd7t.png" alt="Image description" width="800" height="317"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Go to DynamoDB, click Explore items, and check the data that was processed by the Lambda function and written as an item in DynamoDB&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%2Fb4ubuknbwikum6c29wtc.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%2Fb4ubuknbwikum6c29wtc.png" alt="Image description" width="800" height="189"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;4. Clean up&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;After completing the lab, you can delete the following resources:&lt;br&gt;
• Delete the API Gateway&lt;br&gt;
• Delete the Lambda Function&lt;br&gt;
• Delete the SNS Topic&lt;br&gt;
• Delete the SQS Queue&lt;br&gt;
• Delete the DynamoDB Table&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;5. Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Through this article, I have introduced how to design and deploy an order processing system entirely based on AWS serverless architecture. With this architecture, we no longer have to worry about managing servers or scaling the components within the system. I really hope to receive positive feedback from you all so I can improve and be motivated to continue releasing more articles in the future.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>serverless</category>
      <category>dynamodb</category>
      <category>apigateway</category>
    </item>
    <item>
      <title>BUILD OMNICHANNEL CONTACT CENTER WITH AMAZON CONNECT</title>
      <dc:creator>Duc Tran (Sam)</dc:creator>
      <pubDate>Thu, 01 May 2025 13:26:06 +0000</pubDate>
      <link>https://dev.to/ductt/build-omnichannel-contact-center-with-amazon-connect-4fgn</link>
      <guid>https://dev.to/ductt/build-omnichannel-contact-center-with-amazon-connect-4fgn</guid>
      <description>&lt;p&gt;&lt;strong&gt;1 Introduction&lt;/strong&gt;&lt;br&gt;
An Omnichannel Contact Center is a customer service solution that leverages cloud-based software to manage interactions across various communication channels. By integrating phone, chat, email, SMS, and social media into a single platform, it ensures a seamless and consistent customer journey. This unified approach enables businesses to respond quickly and efficiently, enhancing the overall customer experience.&lt;br&gt;
If you're looking for a solution to build an Omnichannel Contact Center for your business, Amazon Connect is the answer. Amazon Connect is a cloud-based contact center service from AWS that makes it easy for businesses to deliver better customer service at lower cost. Designed to be simple, scalable, and flexible, Amazon Connect enables organizations to set up and operate omnichannel contact centers with support for voice, chat, and automated interactions. With built-in AI and machine learning capabilities, it helps improve agent productivity and ensures a seamless customer experience across channels.&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%2F6e58zeofj7rfwgwd3l5u.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%2F6e58zeofj7rfwgwd3l5u.png" alt="Amazon Connect Core features" width="800" height="379"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this post, I will introduce you to the powerful features of Amazon Connect I experienced that can help businesses build a next-generation Omnichannel Contact Center, enhanced with Generative AI to elevate the customer experience. The key features of Amazon Connect that I will cover in this post include:&lt;br&gt;
• Increase agent productivity with generative AI&lt;br&gt;
• Quality and performance management&lt;br&gt;
• Self-service Omnichannel Contact Center&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2 Key Features of Amazon Connect&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;2.1   Architecture&lt;/strong&gt;&lt;br&gt;
To better understand how Amazon Connect works, let’s explore the architecture of this service. As a fully managed omnichannel contact center, Amazon Connect eliminates the need for customers to build and maintain infrastructure, significantly reducing upfront investment costs. It supports both inbound and outbound calls through the PSTN channel.&lt;br&gt;
Additionally, Amazon Q in Connect is a powerful feature that integrates a Generative AI-powered chatbot with data sources like CRM systems or SharePoint, enabling the creation of a virtual assistant for agents. This helps reduce customer support time. The service also includes call analytics and evaluation features for supervisors, which are configured through Contact Lens.&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%2Fnhcyqtkfnv4zawzktlxw.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%2Fnhcyqtkfnv4zawzktlxw.png" alt="Amazon Connect architecture" width="800" height="319"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.2   Increase agent productivity with generative AI&lt;/strong&gt;&lt;br&gt;
Amazon Q in Connect is a generative AI-powered assistant designed to help customer service agents work more efficiently and effectively. Integrated directly into Amazon Connect, this feature provides real-time support by surfacing relevant information from connected data sources such as CRM systems, knowledge bases, or internal documentation like Salesforce, Zendesk, ServiceNow, Microsoft SharePoint online, and Amazon S3.&lt;br&gt;
With natural language understanding, Amazon Q can suggest next best actions, summarize customer conversations, and even generate responses—reducing average handling time and improving the overall customer experience. By combining automation with personalized insights, Amazon Q in Connect empowers agents while ensuring consistency and accuracy in customer support.&lt;br&gt;
Here are some examples of how Amazon Q in Connect enhances the customer experience.&lt;br&gt;
One of its most powerful features is the ability to assist agents in real time when a customer calls in with a complex question that would typically require time-consuming research. Amazon Q can listen to and understand the customer’s query, automatically retrieve relevant information from integrated data sources, and generate a suggested response. The agent can then simply use Amazon Q’s response to advise the customer.&lt;br&gt;
This significantly reduces the time customers spend on hold while the agent searches for information, leading to faster and more efficient support.&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%2Fsw5msq3a7i7sx60j5dxa.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%2Fsw5msq3a7i7sx60j5dxa.png" alt="Amazon Q in Connect understands the question and generates a response" width="800" height="411"&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%2Fld7ec6src70v6i3kf4sv.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%2Fld7ec6src70v6i3kf4sv.png" alt="The agent retrieves information through Amazon Q" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.3   Quality and performance management&lt;/strong&gt;&lt;br&gt;
Another feature designed for supervisors is real-time call analysis and summarization. With powerful speech-to-text capabilities, Amazon Connect can transcribe spoken conversations into text and use Generative AI features within Contact Lens to generate call summaries, analyze customer sentiment, and assess agent compliance.&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%2F25mjup34auw8nuc9wxvc.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%2F25mjup34auw8nuc9wxvc.png" alt="Amazon Connect summarizes call content for evaluation and analysis" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Supervisors can also listen to call recordings and evaluate conversations between users and agents using predefined assessment questions.&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%2Fhgx4yautq2cdwofhvhut.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%2Fhgx4yautq2cdwofhvhut.png" alt="Supervisor Evaluation Interface in Amazon Connect" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The screenshot shows the supervisor interface in Amazon Connect, where a recorded customer-agent conversation is transcribed and analyzed. Supervisors can review key highlights, categorized transcript segments, and answer evaluation questions. AI-assisted answers help assess agent performance, such as whether the agent properly greeted the customer. This streamlines quality assurance and ensures consistent evaluation standards.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.4   Self-service Omnichannel Contact Center&lt;/strong&gt;&lt;br&gt;
One of the standout features of Amazon Connect is its ability to power a self-service omnichannel contact center. This functionality enables customers to interact with your business anytime, across channels like voice, chat, and SMS, without needing to speak with a live agent. Using AI-driven virtual assistants and natural language processing, Amazon Connect can understand customer intent, provide relevant responses, and guide users through common tasks such as checking account information, resetting passwords, or tracking orders.&lt;br&gt;
By automating routine interactions, businesses can reduce operational costs, improve response times, and offer a more consistent customer experience. At the same time, human agents are freed up to focus on more complex and high-value interactions, improving overall efficiency and customer satisfaction.&lt;br&gt;
A real-world example is that users can leverage the Amazon Lex chatbot integrated into website chat applications to ask questions and have the chatbot handle their requests.&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%2Ff4kldw6s75r54i5mpf8u.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%2Ff4kldw6s75r54i5mpf8u.png" alt="Users can make requests through the chatbot on Amazon Connect" width="427" height="831"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.5   Limitation&lt;/strong&gt;&lt;br&gt;
Amazon Connect is a great service for building an Omnichannel Contact Center that enhances customer experience. However, there are a few considerations to keep in mind when using the service — for example, order numbers and number portability are limited in certain countries. Additionally, when I previously implemented the Amazon Q in Connect feature, it did not yet support some languages such as Vietnamese.&lt;br&gt;
You can find more important notes about Amazon Connect at the link &lt;a href="https://dev.tourl"&gt;https://docs.aws.amazon.com/connect/latest/adminguide/phone-number-requirements.html&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.6   Pricing&lt;/strong&gt;&lt;br&gt;
Amazon Connect is a pay-as-you-go customer experience solution that makes it simple to leverage native AI across all touchpoints, turning every customer interaction into a deeper relationship and better outcome. There are no required minimum monthly fees, long-term commitments, or upfront license charges, and pricing is not based on peak capacity, agent seats, or maintenance; you only pay for what you use. This flexible pricing model enables you to scale up and down depending on seasonality and the needs of your business, without worrying about capacity constraints or licensing costs.&lt;br&gt;
Amazon Connect provides unlimited use of Amazon Connect AI capabilities that power end-customer self-service, agent assistance, and supervisor experiences. It allows you to optimize every step of your customer journey without cost-driven compromises&lt;br&gt;
You can find more information about Amazon Connect pricing at this link &lt;a href="https://dev.tourl"&gt;https://aws.amazon.com/connect/pricing/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3 Conclusion&lt;/strong&gt;&lt;br&gt;
Amazon Connect is a service that enables you to build a modern Omnichannel Contact Center quickly and easily. With the integration of GenAI-powered features like Amazon Q in Connect and AI-based call analysis and evaluation through Contact Lens, businesses can significantly enhance the customer experience and continuously improve the quality of their customer service operations.&lt;br&gt;
In addition to these, Amazon Connect offers many other capabilities that I couldn’t cover in this post—I’ve focused only on the most prominent features. To learn more, feel free to explore the resources listed in the Reference section.&lt;br&gt;
If you're interested in setting up and deploying Amazon Connect, leave a comment and let me know.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4 References&lt;/strong&gt;&lt;br&gt;
[1] Amazon Connect: &lt;a href="https://aws.amazon.com/connect/self-service/" rel="noopener noreferrer"&gt;https://aws.amazon.com/connect/self-service/&lt;/a&gt;&lt;br&gt;
[2] Evaluate agent performance in Amazon Connect using generative AI: &lt;a href="https://docs.aws.amazon.com/connect/latest/adminguide/generative-ai-performance-evaluations.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/connect/latest/adminguide/generative-ai-performance-evaluations.html&lt;/a&gt;&lt;br&gt;
[3] Metrics, dashboards, and reports in Amazon Connect: &lt;a href="https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-metrics.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/connect/latest/adminguide/amazon-connect-metrics.html&lt;/a&gt;&lt;br&gt;
[4] Evaluate contact center agent performance in Amazon Connect: &lt;a href="https://docs.aws.amazon.com/connect/latest/adminguide/evaluations.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/connect/latest/adminguide/evaluations.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>contactcenter</category>
      <category>genai</category>
      <category>aws</category>
    </item>
  </channel>
</rss>
