<?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: Danh Hoang Hieu Nghi</title>
    <description>The latest articles on DEV Community by Danh Hoang Hieu Nghi (@nghidanh2005).</description>
    <link>https://dev.to/nghidanh2005</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%2F2291246%2F1b96d6e5-aacd-491b-979b-fab986bcef97.jpg</url>
      <title>DEV Community: Danh Hoang Hieu Nghi</title>
      <link>https://dev.to/nghidanh2005</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nghidanh2005"/>
    <language>en</language>
    <item>
      <title>I need to learn CNN</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Mon, 23 Mar 2026 13:48:01 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/i-need-to-learn-cnn-6f9</link>
      <guid>https://dev.to/nghidanh2005/i-need-to-learn-cnn-6f9</guid>
      <description>&lt;p&gt;I need to learn CNN for my School Project presentation. &lt;br&gt;
The blogs will split into 3 parts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;High-level overview (non-coder/non-tech background)&lt;/li&gt;
&lt;li&gt;Detail how CNN work? (with visualization website)&lt;/li&gt;
&lt;li&gt;Python coding example with Pytorch / Tensorflow&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. High-level overview
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;One of the most impressive forms of ANN architecture is&lt;br&gt;
that of the Convolutional Neural Network (CNN). CNNs are primarily used to solve difficult image-driven pattern recognition tasks and with their precise yet simple architecture, offers a simplified method of getting started with ANNs.&lt;br&gt;
 &lt;a href="https://arxiv.org/pdf/1511.08458" rel="noopener noreferrer"&gt;Abstraction- An Introduction to Convolutional Neural Networks paper&lt;/a&gt; - For the rest of this blogs, i will try to simplify this paper and summary paragraphs and connect ideas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;em&gt;Simplify this abstraction:&lt;/em&gt; CNN is a "better type" of ANN for &lt;strong&gt;image pattern recognition&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Keywords:&lt;/strong&gt; Pattern recognition, artificial neural networks, machine learning, image analysis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Artificial Neural Networks (ANNs) mimic human brain - nervous systems operate. ANNs comprised of interconnected computational nodes (neurons) - Learn from the input in order to optimise its final output&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%2Ffi07r3w2c85l1subnas9.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%2Ffi07r3w2c85l1subnas9.png" alt="A simple three layered feedforward neural network (FNN), comprised&amp;lt;br&amp;gt;
of a input layer, a hidden layer and an output layer. This structure is the basis&amp;lt;br&amp;gt;
of a number of common ANN architectures" width="568" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Load the input (multidimensional vector) fed the data to -&amp;gt; hidden layers. Then hidden layers &lt;strong&gt;make decisions&lt;/strong&gt; from previous layer and weigh up how a stochastic (randomly) change within itself detriments (decrease) or improve the final output This called &lt;strong&gt;learning&lt;/strong&gt;. &lt;/p&gt;

&lt;p&gt;If many of hidden stacked upon each-order -&amp;gt; &lt;strong&gt;deep learning&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>deeplearning</category>
      <category>tensorflow</category>
      <category>python</category>
    </item>
    <item>
      <title>SimpleMem - Lifelong Memory for Agents</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Sun, 08 Mar 2026 16:38:18 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/simplemem-lifelong-memory-for-agents-151l</link>
      <guid>https://dev.to/nghidanh2005/simplemem-lifelong-memory-for-agents-151l</guid>
      <description>&lt;p&gt;I read and summarize research paper so you don't have to. Use the most simple language ever. (Not some IELTS 8.0+ vocabulary words).&lt;/p&gt;

&lt;p&gt;Overview: This framework can use to Store, compress, retrieve long-term memories with semantic lossless compression. &lt;/p&gt;

&lt;p&gt;Works across all MCP Client for example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Desktop&lt;/li&gt;
&lt;li&gt;Cursor&lt;/li&gt;
&lt;li&gt;LM Studio&lt;/li&gt;
&lt;li&gt;PyPi Package&lt;/li&gt;
&lt;li&gt;Any MCP Client.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;SimpleMem&lt;/strong&gt; is an efficient memory framework based on semantic lossless compression that addresses the fundamental challenge of efficient long-term memory for LLM agents. Unlike existing systems that either passively accumulate redundant context or rely on expensive iterative reasoning loops, &lt;strong&gt;SimpleMem&lt;/strong&gt; maximizes information density and token utilization through a three-stage pipeline:&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%2Fd2g8x4381q6adt0y7l39.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%2Fd2g8x4381q6adt0y7l39.png" alt="SimpleMem achieves superior F1 score (43.24%) with minimal token cost (~550), occupying the ideal top-left position." width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of storing un-necessary context, &lt;strong&gt;SimpleMem&lt;/strong&gt; maximize &lt;strong&gt;&lt;em&gt;information density&lt;/em&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;em&gt;token utilization&lt;/em&gt;&lt;/strong&gt; through a 3-stage pipeline: &lt;/p&gt;

&lt;h2&gt;
  
  
  The SimpleMem Architecture
&lt;/h2&gt;

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

&lt;p&gt;&lt;strong&gt;Stage 1 Semantic Structured Compression&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%2Fviuqdbyuhvmw09529ysl.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%2Fviuqdbyuhvmw09529ysl.png" alt="Step 1 SimpleMem Architecture" width="557" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;&lt;strong&gt;Semantic structured compression&lt;/strong&gt;&lt;/em&gt;: Distills unstructured interactions into compact, multi-view indexed memory units. Filters low-utility dialogue and coverts informative windows into compact, context-independent.&lt;/p&gt;

&lt;p&gt;In simple words that this step will filter out "less valuable information" and only keep "important information", and then converts into short - meaningful memory units that can be re-use later context-independent.&lt;/p&gt;

&lt;p&gt;(1) Sliding windows -&amp;gt; (2) Sematic Density Gating -&amp;gt; (3) Memory Units&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;(1) Sliding windows&lt;/strong&gt;: Instead of processing the wholes conversation at once, SimpleMem splits it into small overlapping windows of dialogue. Each window contains a short local span of interaction.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;(2): Semantic Density Gating *&lt;/em&gt;(Information Filter): the model checks whether a window contains high-value semantic content or not. If the window is mostly noise, it is discarded, if it contains useful information, the system keeps and extracts it.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Noise = "That's cool bro", "keep it going",..&lt;/li&gt;
&lt;li&gt;Information = "I prefer OOP over Functional programming"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;(3): Convert into memory units&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;SimpleMem rewrites useful content into compact memory units.&lt;br&gt;
This transformation includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Coreference resolution&lt;/strong&gt;: Replace value references like "she", "it",.. with explicit entities.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Temporal normalization&lt;/strong&gt;: converting relative time phrases like "yesterday" or "last week" into timestamps.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fact atomization&lt;/strong&gt;: turning messy dialogue into short, self-contained factual statements&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Simple example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Raw dialogue:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Yesterday I took my kids to the museum.”&lt;/li&gt;
&lt;li&gt;“They loved the dinosaur exhibit.”&lt;/li&gt;
&lt;li&gt;“Yeah, that sounds fun.”&lt;/li&gt;
&lt;li&gt;“My daughter turns 8 next month.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;After Step 1, possible memory units:&lt;/em&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[2023-07-12] Sarah took her kids to the Natural History Museum.&lt;/li&gt;
&lt;li&gt;Sarah's kids loved the dinosaur exhibit.&lt;/li&gt;
&lt;li&gt;Sarah's daughter turns 8 in August 2023.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One-line summary: Step 1 breaks dialogue into small windows, filters out low-value parts, and compresses useful content into clean, self-contained memory units.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stage 2 Online Semantic Synthesis&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%2Fdwlq4b0nzb29dgfm2gbe.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%2Fdwlq4b0nzb29dgfm2gbe.png" alt="Stage 2 Online Semantic Synthesis" width="582" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Intra-session process that instantly integrates related context into unified abstract representations to eliminate redundancy&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;After Stage 1 extracts small memory units or facts, Stage 2 looks at related facts within the same session and merges them into unified abstract representations so the system does not store many fragmented pieces that mean nearly the same thing.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“Online” does not mean internet-based.&lt;/em&gt;&lt;br&gt;
It means the synthesis happens during memory writing, in real time. &lt;strong&gt;SimpleMem&lt;/strong&gt; does not wait for a later background cleanup step; it performs synthesis on-the-fly during the write phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does “semantic synthesis” mean?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It means the model combines pieces of information based on meaning, not just surface wording.&lt;br&gt;
If several extracted facts refer to the same preference, event, or topic, the system rewrites them into one denser and more coherent memory entry.&lt;/p&gt;

&lt;p&gt;The paper’s example is:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“User wants coffee”&lt;/li&gt;
&lt;li&gt;“User prefers oat milk”&lt;/li&gt;
&lt;li&gt;“User likes it hot”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;which gets consolidated into:&lt;/p&gt;

&lt;p&gt;“User prefers hot coffee with oat milk.”&lt;/p&gt;

&lt;p&gt;Without Stage 2, semantically related facts accumulate as fragmented entries. Then, at retrieval time, the system must gather and assemble scattered evidence&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In one line:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stage 1 = clean and extract&lt;/li&gt;
&lt;li&gt;Stage 2 = consolidate and abstract&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Step 3 Intent-Aware Retrieval Planning&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%2Fq0e000fc6vtf24bfce3j.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%2Fq0e000fc6vtf24bfce3j.png" alt="Step 3 Intent-Aware Retrieval Planning" width="563" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Intent-Aware Retrieval Planning&lt;/strong&gt; decides: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;What to retrieve?&lt;/li&gt;
&lt;li&gt;How much to retrieve? &lt;/li&gt;
&lt;li&gt;From which retrieval views? 
When a new query arrives. Instead of always fetching a fixed number of memories, SimpleMem first infers the latent search intent of the query, then adapts the retrieval scope and retrieval depth accordingly. This helps avoid both under-retrieval for complex questions and token waste for simple ones.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;What does “intent-aware” mean?&lt;/p&gt;

&lt;p&gt;It means the system tries to understand whether the user is asking for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a simple factual lookup,&lt;/li&gt;
&lt;li&gt;a multi-hop reasoning query,&lt;/li&gt;
&lt;li&gt;a temporally constrained question,&lt;/li&gt;
&lt;li&gt;or something involving entities, preferences, or metadata.
Based on that, the planner generates a structured retrieval plan:&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;qsem for &lt;strong&gt;semantic retrieval&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;qlex for &lt;strong&gt;lexical retrieval&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;qsym for &lt;strong&gt;symbolic retrieval&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;d for adaptive retrieval depth&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Once the plan is created, SimpleMem performs parallel multi-view retrieval over three complementary indexes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Semantic layer&lt;/strong&gt; for conceptual similarity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lexical layer&lt;/strong&gt; for exact keywords and rare proper nouns&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Symbolic layer&lt;/strong&gt; for structured metadata constraints such as time or entity type.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then it merges the results with a set union and naturally deduplicates overlapping entries, producing a context that is both compact and comprehensive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does “determine retrieval scope” mean?&lt;/strong&gt;&lt;br&gt;
It means deciding:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;How many memory entries to fetch?&lt;/li&gt;
&lt;li&gt;How broad the search should be?&lt;/li&gt;
&lt;li&gt;Which retrieval paths matter most?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;In the paper, the inferred depth d reflects query complexity, and the system uses a candidate limit n proportional to d. So:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;simple query → shallow retrieval&lt;/li&gt;
&lt;li&gt;complex query → deeper retrieval. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;What does “construct precise context efficiently” mean?&lt;/em&gt;&lt;br&gt;
It means building a small but highly relevant context for answer generation instead of dumping raw history into the prompt. The paper describes this as querying multiple indexes and combining their outputs through ID-based deduplication, which balances semantic relevance and structural constraints while remaining token-efficient. &lt;/p&gt;

&lt;p&gt;Simple example&lt;br&gt;
If the query is:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;“What paintings has Sarah created?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;the system recognizes that it should retrieve memories related to painting/art, then searches across semantic, lexical, and symbolic indexes. In the paper’s example, the final retrieved content includes memories such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;sunset with palm trees&lt;/li&gt;
&lt;li&gt;horse portrait(instead of dragging in irrelevant memories like camping)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How is it different from Stage 2?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stage 2 consolidates related memories during writing&lt;/li&gt;
&lt;li&gt;Stage 3 selects the right memories during retrieval for answering a query. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;One-line summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Stage 3 understands what the user is really looking for, plans the right retrieval strategy, searches across multiple memory views, and builds a compact, accurate context for answering. &lt;/p&gt;

&lt;p&gt;&lt;em&gt;Its main idea is: instead of saving the full conversation history, it saves only the most useful information in a cleaner and shorter form. This helps the model remember important things for a long time without wasting too many tokens.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>researchpaper</category>
    </item>
    <item>
      <title>U-Net - CNN for Image Segmentation</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Sat, 07 Mar 2026 12:43:11 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/u-net-cnn-for-image-segmentation-545m</link>
      <guid>https://dev.to/nghidanh2005/u-net-cnn-for-image-segmentation-545m</guid>
      <description>&lt;p&gt;This support for the this post:&lt;a href="https://dev.to/nghidanh2005/i-read-this-paper-for-my-graduation-project-transunet-1d43"&gt;TransUnet&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;References Link:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag__wikipedia--container"&gt;
  &lt;div class="ltag__wikipedia--header"&gt;
    &lt;img src="https://assets.dev.to/assets/wikipedia-logo-0a3e76624c7b1c3ccdeb9493ea4add6ef5bd82d7e88d102d5ddfd7c981efa2e7.svg" class="ltag__wikipedia--logo" alt="Wikipedia Logo" width="128" height="128"&gt;
    &lt;a href="https://en.wikipedia.org/wiki/U-Net" rel="noopener noreferrer"&gt;U-Net&lt;/a&gt;
  &lt;/div&gt;
  &lt;div class="ltag__wikipedia--extract"&gt;&lt;p&gt;&lt;b&gt;U-Net&lt;/b&gt; is a convolutional neural network that was developed for image segmentation. The network is based on a fully convolutional neural network whose architecture was modified and extended to work with fewer training images and to yield more precise segmentation. Segmentation of a 512 × 512 image takes less than a second on a modern (2015) GPU using the U-Net architecture.&lt;/p&gt;&lt;/div&gt;
  &lt;div class="ltag__wikipedia--btn--container"&gt;
      &lt;a class="ltag__wikipedia--btn" href="https://en.wikipedia.org/wiki/U-Net" rel="noopener noreferrer"&gt;View on Wikipedia&lt;/a&gt;&amp;gt;
  &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="https://aivietnam.edu.vn/blog/intro-to-unet#image-segmentation" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;aivietnam.edu.vn&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
        &lt;div class="c-embed__cover"&gt;
          &lt;a href="https://viblo.asia/p/u-net-kien-truc-manh-me-cho-segmentation-1Je5Em905nL" class="c-link align-middle" rel="noopener noreferrer"&gt;
            &lt;img alt="" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fviblo.asia%2Fog-facebook-3.png" height="418" class="m-0" width="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="c-embed__body"&gt;
        &lt;h2 class="fs-xl lh-tight"&gt;
          &lt;a href="https://viblo.asia/p/u-net-kien-truc-manh-me-cho-segmentation-1Je5Em905nL" rel="noopener noreferrer" class="c-link"&gt;
            U-net : Kiến trúc mạnh mẽ cho Segmentation
          &lt;/a&gt;
        &lt;/h2&gt;
          &lt;p class="truncate-at-3"&gt;
            1. Segmentation! Segmentation! Đôi chút về Image Processing trong Deep Learning Với Deep Learning (hay Neural Network), máy tính ngày càng có khả năng quan sát và xử lí những hình ảnh phức tạp ở nhiều...
          &lt;/p&gt;
        &lt;div class="color-secondary fs-s flex items-center"&gt;
            &lt;img alt="favicon" class="c-embed__favicon m-0 mr-2 radius-0" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fviblo.asia%2Ffavicon.ico" width="64" height="64"&gt;
          viblo.asia
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;


</description>
      <category>research</category>
      <category>paper</category>
    </item>
    <item>
      <title>I read this paper for my graduation project (TransUnet)</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Sat, 07 Mar 2026 12:42:23 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/i-read-this-paper-for-my-graduation-project-transunet-1d43</link>
      <guid>https://dev.to/nghidanh2005/i-read-this-paper-for-my-graduation-project-transunet-1d43</guid>
      <description>&lt;p&gt;Link paper: [TransUNet]: Transformers Make Strong&lt;br&gt;
Encoders for Medical Image Segmentation(&lt;a href="https://arxiv.org/pdf/2102.04306" rel="noopener noreferrer"&gt;https://arxiv.org/pdf/2102.04306&lt;/a&gt;)&lt;/p&gt;

</description>
      <category>research</category>
      <category>paper</category>
    </item>
    <item>
      <title>Field-Level Encryption in Amazon CloudFront</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Fri, 13 Feb 2026 07:50:23 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/field-level-encryption-in-amazon-cloudfront-2ejj</link>
      <guid>https://dev.to/nghidanh2005/field-level-encryption-in-amazon-cloudfront-2ejj</guid>
      <description>&lt;h1&gt;
  
  
  Field-Level Encryption in Amazon CloudFront
&lt;/h1&gt;

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

&lt;h2&gt;
  
  
  1. Introduction
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Field-Level Encryption (FLE)&lt;/strong&gt; is a security feature provided by&lt;br&gt;&lt;br&gt;
Amazon Web Services (AWS)&lt;br&gt;&lt;br&gt;
and implemented in&lt;br&gt;&lt;br&gt;
Amazon CloudFront.&lt;/p&gt;

&lt;p&gt;It allows you to encrypt &lt;strong&gt;specific sensitive fields&lt;/strong&gt; in an HTTP request instead of encrypting only the entire connection via HTTPS.&lt;/p&gt;

&lt;p&gt;This ensures that sensitive data remains encrypted even when it travels through multiple backend components.&lt;/p&gt;




&lt;h2&gt;
  
  
  2. The Security Problem
&lt;/h2&gt;

&lt;p&gt;HTTPS provides:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encryption in transit&lt;/li&gt;
&lt;li&gt;Protection against man-in-the-middle attacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;However:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Once the request reaches the backend, data is decrypted.&lt;/li&gt;
&lt;li&gt;In multi-tier architectures (ALB, EC2, Lambda, microservices), sensitive data may be exposed internally.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Field-Level Encryption solves this by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encrypting only selected fields (e.g., credit card numbers).&lt;/li&gt;
&lt;li&gt;Keeping those fields encrypted until they reach the trusted backend system with the private key.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  3. How It Works
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Step 1 – Client Sends Request
&lt;/h3&gt;

&lt;p&gt;A user submits an HTTPS POST request containing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name
&lt;/li&gt;
&lt;li&gt;email
&lt;/li&gt;
&lt;li&gt;credit_card_number (sensitive field)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 2 – Encryption at CloudFront Edge
&lt;/h3&gt;

&lt;p&gt;At the CloudFront Edge Location:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CloudFront uses an &lt;strong&gt;RSA public key&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Only the configured sensitive field (e.g., credit_card_number) is encrypted.&lt;/li&gt;
&lt;li&gt;Other fields remain unchanged.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 3 – Request Sent to Origin
&lt;/h3&gt;

&lt;p&gt;The origin server receives:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;name → readable
&lt;/li&gt;
&lt;li&gt;email → readable
&lt;/li&gt;
&lt;li&gt;credit_card_number → encrypted (ciphertext)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Step 4 – Decryption at Backend
&lt;/h3&gt;

&lt;p&gt;The backend application:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uses the corresponding &lt;strong&gt;private key&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Decrypts the encrypted field&lt;/li&gt;
&lt;li&gt;Processes the data securely&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  4. Key Components
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Public Key&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Uploaded to CloudFront&lt;/li&gt;
&lt;li&gt;Used to encrypt sensitive fields&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Private Key&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stored securely at the backend&lt;/li&gt;
&lt;li&gt;Used to decrypt encrypted fields&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Field-Level Encryption Profile&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defines which fields must be encrypted&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Field-Level Encryption Configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Attached to a CloudFront distribution behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;




&lt;h2&gt;
  
  
  5. HTTPS vs Field-Level Encryption
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;HTTPS&lt;/th&gt;
&lt;th&gt;Field-Level Encryption&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Encrypts data in transit&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Encrypts specific fields&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Protects sensitive data across backend layers&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uses asymmetric encryption (RSA)&lt;/td&gt;
&lt;td&gt;No&lt;/td&gt;
&lt;td&gt;Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  6. When to Use It
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Online payment systems (PCI DSS compliance)&lt;/li&gt;
&lt;li&gt;Applications collecting personal identifiable information (PII)&lt;/li&gt;
&lt;li&gt;Multi-tier or microservices architectures&lt;/li&gt;
&lt;li&gt;Systems requiring strict decryption access control&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  7. Summary
&lt;/h2&gt;

&lt;p&gt;Field-Level Encryption in Amazon CloudFront:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Encrypts specific fields in HTTP requests.&lt;/li&gt;
&lt;li&gt;Performs encryption at the Edge Location.&lt;/li&gt;
&lt;li&gt;Ensures only trusted systems with the private key can decrypt data.&lt;/li&gt;
&lt;li&gt;Provides stronger protection for sensitive data compared to HTTPS alone.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is especially useful for financial systems and applications handling highly sensitive user data.&lt;/p&gt;

</description>
      <category>aws</category>
      <category>cloud</category>
      <category>cybersecurity</category>
      <category>security</category>
    </item>
    <item>
      <title>Designing Serverless Applications at Massive Scale with AWS Lambda and RDS Proxy</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Thu, 12 Feb 2026 06:29:03 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/designing-serverless-applications-at-massive-scale-with-aws-lambda-and-rds-proxy-4k28</link>
      <guid>https://dev.to/nghidanh2005/designing-serverless-applications-at-massive-scale-with-aws-lambda-and-rds-proxy-4k28</guid>
      <description>&lt;p&gt;I love serverless architecture because i can build scalable systems without managing any infra or server, however for scaling some "provisioning" services like RDS is quite difficult.&lt;/p&gt;

&lt;p&gt;This blogs will have you take a look at how to design and scale an serverless architecture with AWS RDS Proxy and AWS Lambda&lt;/p&gt;

&lt;h1&gt;
  
  
  1. Problem: The Hidden Scaling Problem
&lt;/h1&gt;

&lt;p&gt;AWS Lambda can scale horizontally to thousands of concurrent executions within seconds.&lt;/p&gt;

&lt;p&gt;But relational databases (MySQL/PostgreSQL on Amazon RDS or Aurora) have hard limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Limited number of concurrent connections
&lt;/li&gt;
&lt;li&gt;Each connection consumes memory and CPU
&lt;/li&gt;
&lt;li&gt;Opening/closing connections is expensive &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If every Lambda invocation creates a new database connection, high concurrency can quickly exhaust the database’s &lt;code&gt;max_connections&lt;/code&gt; limit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The result:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connection errors
&lt;/li&gt;
&lt;li&gt;Increased latency
&lt;/li&gt;
&lt;li&gt;Database instability
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the core scaling &lt;u&gt;bottleneck&lt;/u&gt; in serverless architecture&lt;/p&gt;

&lt;h1&gt;
  
  
  2. Solution: Amazon RDS Proxy
&lt;/h1&gt;

&lt;h2&gt;
  
  
  What Is RDS Proxy?
&lt;/h2&gt;

&lt;p&gt;Amazon RDS Proxy is a managed database proxy that sits between your Lambda functions and your RDS database.&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%2F8phfkimi4o5t4n2bizbm.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%2F8phfkimi4o5t4n2bizbm.png" alt="RDS Proxy" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Instead of:&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%2F4ru9xhysh300qb4tf1oc.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%2F4ru9xhysh300qb4tf1oc.png" alt="Lambda to RDS" width="685" height="310"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We should use:&lt;/p&gt;

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

&lt;h2&gt;
  
  
  Why RDS Proxy?
&lt;/h2&gt;

&lt;p&gt;The main purpose is &lt;strong&gt;connection pooling and connection reuse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Without proxy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Each Lambda instance opens its own DB connection.&lt;/li&gt;
&lt;li&gt;Thousands of Lambdas = thousands of connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With RDS Proxy:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Proxy maintains a pool of persistent connections to the database.&lt;/li&gt;
&lt;li&gt;Lambda connects to the proxy endpoint.&lt;/li&gt;
&lt;li&gt;Proxy reuses existing DB connections.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This dramatically reduces:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database memory usage&lt;/li&gt;
&lt;li&gt;CPU overhead&lt;/li&gt;
&lt;li&gt;Connection storms during traffic spikes&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How RDS Proxy Works Internally
&lt;/h2&gt;

&lt;p&gt;There are two authentication layers:&lt;/p&gt;

&lt;h3&gt;
  
  
  Lambda → RDS Proxy
&lt;/h3&gt;

&lt;p&gt;Lambda authenticates using either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Username/password
&lt;/li&gt;
&lt;li&gt;IAM database authentication (recommended)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With IAM authentication:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda generates a temporary auth token.&lt;/li&gt;
&lt;li&gt;Token is valid for ~15 minutes.&lt;/li&gt;
&lt;li&gt;No password is stored in code.&lt;/li&gt;
&lt;li&gt;IAM policies control access.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  RDS Proxy → Database
&lt;/h3&gt;

&lt;p&gt;RDS Proxy retrieves database credentials from AWS Secrets Manager.&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%2Frhl8lhwzuo3ln725ltj1.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%2Frhl8lhwzuo3ln725ltj1.png" alt="RDS retrieves DB credentials from AWS Secrets Manager" width="384" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Flow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;You store DB credentials in Secrets Manager.&lt;/li&gt;
&lt;li&gt;RDS Proxy is configured to use that secret.&lt;/li&gt;
&lt;li&gt;Proxy establishes and maintains pooled connections to the database.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Lambda never needs the real database password when using IAM auth.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Full Authentication Flow
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Removes hardcoded credentials&lt;/li&gt;
&lt;li&gt;Enables password rotation&lt;/li&gt;
&lt;li&gt;Improves security posture&lt;/li&gt;
&lt;li&gt;Supports massive concurrency&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  3. Designing Serverless Apps for Massive Scale
&lt;/h1&gt;

&lt;p&gt;Scaling Lambda is automatic.&lt;/p&gt;

&lt;p&gt;Scaling everything else is your responsibility.&lt;/p&gt;

&lt;p&gt;The most common architectural mistake is:&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%2Fgs303qic3b0wj2c6qeeg.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%2Fgs303qic3b0wj2c6qeeg.png" alt="asynchronus" width="726" height="275"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Under heavy load:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Lambda scales&lt;/li&gt;
&lt;li&gt;Database becomes overwhelmed&lt;/li&gt;
&lt;li&gt;System fails&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Right Pattern: Decoupled and Asynchronous
&lt;/h2&gt;

&lt;p&gt;Instead of tight synchronous chains, use &lt;strong&gt;buffering&lt;/strong&gt; and **event-driven **design:&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%2Fhstx8dftjztrio82k9x6.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%2Fhstx8dftjztrio82k9x6.png" alt="event-driven" width="535" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQS absorbs traffic spikes&lt;/li&gt;
&lt;li&gt;Lambda processes messages in controlled batches&lt;/li&gt;
&lt;li&gt;Database load becomes predictable&lt;/li&gt;
&lt;li&gt;System becomes resilient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Key design principles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Decouple services&lt;/li&gt;
&lt;li&gt;Use asynchronous processing&lt;/li&gt;
&lt;li&gt;Avoid direct scaling pressure on databases&lt;/li&gt;
&lt;li&gt;Design for backpressure handling&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  4. Understanding Lambda Invocation Models
&lt;/h1&gt;

&lt;p&gt;Choosing how Lambda is invoked affects performance and reliability.&lt;/p&gt;

&lt;p&gt;AWS Lambda supports three invocation types.&lt;/p&gt;




&lt;h2&gt;
  
  
  Synchronous Invocation
&lt;/h2&gt;

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

&lt;p&gt;Caller waits for response.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;API Gateway&lt;/li&gt;
&lt;li&gt;Application Load Balancer&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Immediate execution&lt;/li&gt;
&lt;li&gt;Caller handles retry&lt;/li&gt;
&lt;li&gt;Suitable for request/response APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Low latency response is required&lt;/li&gt;
&lt;li&gt;User-facing APIs&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Asynchronous Invocation
&lt;/h2&gt;

&lt;p&gt;Caller sends event and does not wait.&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%2F23dted8mqgbs86g7y2wv.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%2F23dted8mqgbs86g7y2wv.png" alt="Asynchronous Invocation" width="542" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;S3&lt;/li&gt;
&lt;li&gt;SNS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event is queued internally&lt;/li&gt;
&lt;li&gt;Lambda retries automatically&lt;/li&gt;
&lt;li&gt;Better for background tasks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Event-driven processing&lt;/li&gt;
&lt;li&gt;Non-blocking workflows&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Poll-Based Invocation (Event Source Mapping)
&lt;/h2&gt;

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

&lt;p&gt;Lambda polls a data source.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQS&lt;/li&gt;
&lt;li&gt;Kinesis&lt;/li&gt;
&lt;li&gt;DynamoDB Streams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Characteristics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Batch processing&lt;/li&gt;
&lt;li&gt;Controlled concurrency&lt;/li&gt;
&lt;li&gt;Ideal for high-throughput workloads&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This model is critical when designing for massive scale.&lt;/p&gt;

&lt;h1&gt;
  
  
  5. Putting Everything Together: A Production-Grade Architecture
&lt;/h1&gt;

&lt;p&gt;Here is a scalable, secure serverless design:&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%2Fl5fp6bix0gxzm0iempsy.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%2Fl5fp6bix0gxzm0iempsy.png" alt="AWS Async full architecture" width="523" height="329"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Security:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Database credentials stored in Secrets Manager&lt;/li&gt;
&lt;li&gt;Lambda authenticates via IAM&lt;/li&gt;
&lt;li&gt;RDS Proxy manages pooled connections&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scalability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SQS absorbs spikes&lt;/li&gt;
&lt;li&gt;Lambda scales safely&lt;/li&gt;
&lt;li&gt;RDS Proxy protects database&lt;/li&gt;
&lt;li&gt;Aurora handles transactional workload&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reliability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Automatic retries&lt;/li&gt;
&lt;li&gt;Dead-letter queues&lt;/li&gt;
&lt;li&gt;Backpressure handling&lt;/li&gt;
&lt;/ul&gt;




&lt;h1&gt;
  
  
  6. When Should You Use RDS Proxy?
&lt;/h1&gt;

&lt;p&gt;Use RDS Proxy when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You use Lambda with RDS/Aurora&lt;/li&gt;
&lt;li&gt;You expect unpredictable traffic spikes&lt;/li&gt;
&lt;li&gt;You need secure IAM-based DB authentication&lt;/li&gt;
&lt;li&gt;You want connection pooling without managing it manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Do not rely on direct Lambda-to-RDS connections in high-scale production systems.&lt;/p&gt;

&lt;h1&gt;
  
  
  7. Final Takeaways
&lt;/h1&gt;

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

&lt;p&gt;Serverless scaling is easy for compute.&lt;/p&gt;

&lt;p&gt;It is difficult for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Databases&lt;/li&gt;
&lt;li&gt;Stateful systems&lt;/li&gt;
&lt;li&gt;Downstream dependencies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To design correctly:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Use asynchronous patterns where possible.&lt;/li&gt;
&lt;li&gt;Protect relational databases with RDS Proxy.&lt;/li&gt;
&lt;li&gt;Use IAM authentication instead of hardcoded credentials.&lt;/li&gt;
&lt;li&gt;Understand Lambda invocation types before designing workflows.&lt;/li&gt;
&lt;li&gt;Always design for backpressure and burst traffic.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Serverless is powerful — but only when architecture decisions support massive scale.&lt;/p&gt;

&lt;h2&gt;
  
  
  References:
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/compute/using-amazon-rds-proxy-with-aws-lambda/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/architecture/how-to-design-your-serverless-apps-for-massive-scale/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/architecture/how-to-design-your-serverless-apps-for-massive-scale/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/blogs/architecture/understanding-the-different-ways-to-invoke-lambda-functions/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/architecture/understanding-the-different-ways-to-invoke-lambda-functions/&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>serverless</category>
      <category>aws</category>
      <category>lambda</category>
      <category>rds</category>
    </item>
    <item>
      <title>Securing Sensitive S3 Data: The Problem &amp; The Solution</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Wed, 04 Feb 2026 07:56:20 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/securing-sensitive-s3-data-the-problem-the-solution-1ief</link>
      <guid>https://dev.to/nghidanh2005/securing-sensitive-s3-data-the-problem-the-solution-1ief</guid>
      <description>&lt;p&gt;Securing Sensitive S3 Data: The Problem &amp;amp; The Solution&lt;br&gt;
In the world of cloud security, "encryption" is often the default answer. But when dealing with highly sensitive data—like customer call logs—simply scrambling the data isn't enough. You need to control who holds the keys to unscramble it.&lt;/p&gt;

&lt;p&gt;Here is a common real-world scenario and the most efficient AWS architecture to solve it.&lt;/p&gt;

&lt;p&gt;The Problem: Sensitive Data &amp;amp; Granular Access&lt;br&gt;
Imagine your company stores customer call logs in an Amazon S3 bucket. This data contains PII (Personally Identifiable Information), so it must be encrypted at rest.&lt;/p&gt;

&lt;p&gt;However, standard encryption isn't enough. You have a requirement that only specific employees (e.g., the Compliance Team) can decrypt and read these logs. Even if a system administrator has access to the S3 bucket itself, they should not be able to read this specific sensitive data.&lt;/p&gt;

&lt;p&gt;The Challenge: How do you enforce encryption while strictly limiting who can use the decryption keys, with the least amount of operational effort?&lt;/p&gt;

&lt;p&gt;The Solution: SSE-KMS with IAM Policies&lt;br&gt;
The most effective solution is to use Server-Side Encryption with AWS KMS keys (SSE-KMS) combined with restrictive IAM policies.&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%2Fethknjkjhitvw928shez.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fethknjkjhitvw928shez.jpg" alt=" " width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;How it works:&lt;/p&gt;

&lt;p&gt;SSE-KMS: Instead of letting S3 manage the keys transparently (SSE-S3), you use AWS Key Management Service (KMS). This allows you to create a specific Customer Managed Key (CMK) for these call logs.&lt;/p&gt;

&lt;p&gt;Key Policies: You configure the Key Policy (or an IAM policy attached to users) to explicitly allow only the specific employees (e.g., the Compliance Team) to use kms:Decrypt for that key.&lt;/p&gt;

&lt;p&gt;The Result: If a general admin tries to download the object, S3 might let them download the file, but because they lack permission to use the KMS key, the data remains a garbled, encrypted mess.&lt;/p&gt;

&lt;p&gt;Why this wins: It separates "storage access" from "data access." It satisfies the requirement for "Least Privilege" without requiring you to manage your own hardware (CloudHSM) or manage keys manually on your own servers (SSE-C).&lt;/p&gt;

</description>
      <category>aws</category>
    </item>
    <item>
      <title>How to make your 1st Open-source contribution to AWS Repo</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Sun, 14 Dec 2025 15:37:24 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/how-to-make-your-1st-open-source-contribution-to-aws-repo-2lkk</link>
      <guid>https://dev.to/nghidanh2005/how-to-make-your-1st-open-source-contribution-to-aws-repo-2lkk</guid>
      <description>&lt;p&gt;I think you’ve probably heard about becoming an AWS Community Builder by writing articles, posts, or social media content. Another way is by contributing to AWS open-source projects.&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%2F7mbn191xrk8fbv4ny3sj.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%2F7mbn191xrk8fbv4ny3sj.png" alt="Bedrock Agentcore Sample" width="800" height="576"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At first, I wondered, “How can I help with anything when I’m just a junior university student?”&lt;/p&gt;

&lt;p&gt;While learning about AWS Bedrock AgentCore, I read the documentation and did some hands-on labs using the AWS AgentCore sample. That’s when I noticed something was wrong. When I clicked on the Memory section, it redirected me to the Identity section instead.&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%2F1ruua4dxiayjpxogao6v.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%2F1ruua4dxiayjpxogao6v.png" alt="The Issue" width="800" height="581"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I thought to myself, “What happened? Am I doing something wrong?”&lt;/p&gt;

&lt;p&gt;Later, I realized that while the AWS team was writing the README file, they had simply mistyped these two sections. After that, I searched online for “How to contribute to an open-source project.”&lt;/p&gt;

&lt;p&gt;I then forked the repository to my computer, changed two lines in the README.md file, pushed the changes to my branch, and followed their contribution guidelines. I created an issue using their template and submitted a pull request.&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%2Frzoczvg2expu1wzou7h2.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%2Frzoczvg2expu1wzou7h2.png" alt="Commit" width="800" height="199"&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%2F7nb2ubjvr81n3vhrtuqs.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%2F7nb2ubjvr81n3vhrtuqs.png" alt="Email" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few days later, I received an email saying that my pull request had been accepted. This made me incredibly happy. Such a small change to a large project can benefit the community in a meaningful way.&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%2Ffu6sb9y9sfgatbop4yty.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%2Ffu6sb9y9sfgatbop4yty.png" alt="Approved PR" width="800" height="94"&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%2Ffzyecb6snw6y1ubguo3z.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%2Ffzyecb6snw6y1ubguo3z.png" alt="Email Accepted" width="800" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkout the Bedrock AgentCore Sample here, help me and everyone by contributing anything to it : &lt;a href="https://github.com/awslabs/amazon-bedrock-agentcore-samples/" rel="noopener noreferrer"&gt;https://github.com/awslabs/amazon-bedrock-agentcore-samples/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>aws</category>
      <category>communitybuilder</category>
    </item>
    <item>
      <title>Amazon Bedrock AgentCore Policy - Secure your "MCP Server/Tools" of your Agents using NLP</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Fri, 05 Dec 2025 07:17:01 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/amazon-bedrock-agentcore-policy-secure-your-mcp-servertools-of-your-agents-using-nlp-19ce</link>
      <guid>https://dev.to/nghidanh2005/amazon-bedrock-agentcore-policy-secure-your-mcp-servertools-of-your-agents-using-nlp-19ce</guid>
      <description>&lt;p&gt;Amazon Bedrock AgentCore is AWS Developer-Oriented Platform for Building, Deploying, Scaling and Managing your AI Agent Production-Scale.&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%2Faxxhofm6xekcf7g04tw0.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%2Faxxhofm6xekcf7g04tw0.png" alt="Amazon Bedrock AgentCore" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In this year re:Invent at Las Vegas, AWS announced a number of updates to Bedrock AgentCore included AgentCore Policy - secure what your Agent can do or call and AgentCore Evaluation to provide Assessment to your Agent system on tools perform specific tasks on different inputs and context. In this article, we will talk about AgentCore Policy - adding a top layer of secure your AI System (addition layer of Bedrock Guardrail (Build responsible AI applications with Amazon Bedrock Guardrails | Artificial Intelligence ). &lt;/p&gt;

&lt;p&gt;Just imaging the Bedrock Guardrail is for security if your input and output of your agent, but agent not only "talk" but it can "do" things, so you need to put the barrier or rule that limit what your agent "can do"  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“The way I think about it … is it controls what the agent is allowed to ask the tool to do. At the low level, you’ve got [identity access management], which says these are the tools that can be used. With Policy, you’ve got what you can ask the tool to do — and then with our existing Bedrock Guardrails, you can control what the LLM will say back to the end user,” Richardson explained.&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;Your AI Agent can call tools, execute code, automating workflows,.. to solve business problems with flexibility. But this occur a security challenge that agent may misinterpret business rules, or act outside their given permission.&lt;/p&gt;

&lt;p&gt;For instance: You connect your customer AI Agent to their Google Drive Account with full permission to write, read and delete file, but you don't the agent "accidentally" delete some of you customer's file so you need some to limit your capabilities of your Agent&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%2Fqe6g5863muzcyl9lnmw2.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%2Fqe6g5863muzcyl9lnmw2.png" alt="Trust, but verify" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Amazon Bedrock AgentCore Policy, developers can create policy engines, create and store deterministic policies in them and associate policy engines with gateways. AgentCore Policy intercepts all agent traffic through Amazon Bedrock AgentCore Gateways and evaluates each request against defined policies in the policy engine before allowing tool 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%2Fclg6bq4obewleqq7fhuc.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%2Fclg6bq4obewleqq7fhuc.png" alt="Bedrock AgentCore Policy Console" width="800" height="635"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Policies are constructed using Cedar language, an open source language for writing and enforcing authorization policies. This allows developers to precisely specify what agents can access and what actions they can perform. &lt;/p&gt;

&lt;p&gt;Amazon Bedrock AgentCore Policy provides the capability to author policies using natural language by allowing developers to describe rules in plain English instead of writing formal policy code in Cedar. Natural language-based policy authoring interprets what the user intends, generates candidate policies, validates them against the tool schema, and uses automated reasoning to check safety conditions such as identifying policies that are overly permissive, overly restrictive, or contain conditions that can never be satisfied - ensuring customers catch these issues before enforcing policies.&lt;/p&gt;

&lt;p&gt;To create a policy, you can start with a natural language description (that should include information of the authentication claims to use) or directly edit Cedar code.&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%2Fhfwdlmeo8dm6flqhqa7x.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%2Fhfwdlmeo8dm6flqhqa7x.png" alt="AgentCore Policy Add" width="800" height="644"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Natural language-based policy authoring provides a more accessible way for you to create fine-grained policies. Instead of writing formal policy code, you can describe rules in plain English. The system interprets your intent, generates candidate policies, validates them against the tool schema, and uses automated reasoning to check safety conditions—identifying prompts that are overly permissive, overly restrictive, or contain conditions that can never be satisfied.&lt;/p&gt;

&lt;p&gt;Unlike generic large language model (LLM) translations, this feature understands the structure of your tools and generates policies that are both syntactically correct and semantically aligned with your intent, while flagging rules that cannot be enforced. It is also available as a Model Context Protocol (MCP) server, so you can author and validate policies directly in your preferred AI-assisted coding environment as part of your normal development workflow. This approach reduces onboarding time and helps you write high-quality authorization rules without needing Cedar expertise. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;permit(&lt;br&gt;
  principal is AgentCore::OAuthUser,&lt;br&gt;
  action == AgentCore::Action::"RefundTool__process_refund",&lt;br&gt;
  resource == AgentCore::Gateway::"&amp;lt;GATEWAY_ARN&amp;gt;"&lt;br&gt;
)&lt;br&gt;
when {&lt;br&gt;
  principal.hasTag("role") &amp;amp;&amp;amp;&lt;br&gt;
  principal.getTag("role") == "refund-agent" &amp;amp;&amp;amp;&lt;br&gt;
  context.input.amount &amp;lt; 200&lt;br&gt;
};&lt;/code&gt;&lt;br&gt;
The following sample policy uses information from the OAuth claims in the JWT token used to authenticate to an AgentCore gateway (for the role) and the arguments passed to the tool call (context.input) to validate access to the tool processing a refund. Only an authenticated user with the refund-agent role can access the tool but for amounts (context.input.amount) lower than $200 USD.&lt;/p&gt;

&lt;p&gt;For more examples please read AWS Bedrock Agentcore Documentation here : &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/example-policies.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/example-policies.html&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is the end of my article about AgentCore Policy, i will make a simple demo video on my youtube video later about this services on &lt;a href="https://www.youtube.com/@hieunghiai" rel="noopener noreferrer"&gt;&lt;/a&gt; : Thank you for your reading!!!&lt;/p&gt;

&lt;p&gt;References :&lt;br&gt;
&lt;a href="https://aws.amazon.com/blogs/aws/amazon-bedrock-agentcore-adds-quality-evaluations-and-policy-controls-for-deploying-trusted-ai-agents/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore adds quality evaluations and policy controls for deploying trusted AI agents | AWS News Blog&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/policy.html#policy-features" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore Policy: Evaluate your agent - Amazon Bedrock AgentCore&lt;br&gt;
&lt;/a&gt;&lt;br&gt;
&lt;a href="https://aws.amazon.com/blogs/machine-learning/build-responsible-ai-applications-with-amazon-bedrock-guardrails/" rel="noopener noreferrer"&gt;Build responsible AI applications with Amazon Bedrock Guardrails | Artificial Intelligence&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;AWS' New Policy Layer in Bedrock AgentCore Makes Sure AI Agents Can't Give Away the Store - The New Stack&lt;/p&gt;

</description>
      <category>bedrock</category>
      <category>agentcore</category>
      <category>aws</category>
      <category>aiops</category>
    </item>
    <item>
      <title>Firecracker – The Virtualization Technology Behind AWS Lambda and Bedrock AgentCore Runtime</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Sun, 30 Nov 2025 14:40:18 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/firecracker-the-virtualization-technology-behind-aws-lambda-and-bedrock-agentcore-runtime-3k9j</link>
      <guid>https://dev.to/nghidanh2005/firecracker-the-virtualization-technology-behind-aws-lambda-and-bedrock-agentcore-runtime-3k9j</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;Many of you may already be familiar with AWS Lambda — a key name whenever we talk about serverless architecture. Behind this powerful service lies a virtualization technology called Firecracker.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;What is Firecracker?&lt;/strong&gt;&lt;br&gt;
In November 2018, Amazon Web Services (AWS) introduced Firecracker &lt;a href="https://aws.amazon.com/about-aws/whats-new/2018/11/firecracker-lightweight-virtualization-for-serverless-computing/" rel="noopener noreferrer"&gt;AWS Firecracker 2018&lt;/a&gt; , an open-source virtualization technology that enables service owners to operate multi-tenant, container-based services by combining the speed and resource efficiency of containers with the security and isolation of virtual machines. The result is Micro-Virtual Machines (MVMs) based on Linux’s Kernel-based Virtual Machine (KVM) technology. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which Service Using Firecracker?&lt;/strong&gt;&lt;br&gt;
AWS Fargate tasks are also executed using Firecracker microVMs.&lt;/p&gt;

&lt;p&gt;AWS Lambda uses Firecracker-provisioned sandboxes to run customer functions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Bedrock AgentCore Runtime&lt;/strong&gt;&lt;br&gt;
AgentCore Runtime is the execution environment for agents within the Bedrock AgentCore ecosystem, where developers can deploy agent code, LLMs, etc., without having to worry about infrastructure management or scaling.&lt;/p&gt;

&lt;p&gt;A fully isolated execution environment: Each user session (8 hours) in AgentCore Runtime has its own dedicated microVM with isolated compute resources, memory, and its own filesystem, preventing any agent from accessing another user’s data.&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%2Fl2g7nhrzc7umefoxyjni.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%2Fl2g7nhrzc7umefoxyjni.png" alt="AgentCore Runtime Firecracker" width="800" height="475"&gt;&lt;/a&gt;&lt;br&gt;
After a session ends, the entire microVM is destroyed and all session data is deleted. During the session, a user may have multiple interactions — multiple tool calls, multiple LLM invocations. (If persistent memory is needed, one can use a related ecosystem service: Bedrock AgentCore Memory Add memory to your Amazon Bedrock AgentCore agent - Amazon Bedrock AgentCore &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AgentCore Runtime Session Lifecycle&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%2Ftrylj9rdy4w1qco9ojdp.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%2Ftrylj9rdy4w1qco9ojdp.png" alt="AgentCore Runtime Session " width="800" height="457"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Active: The runtime is either processing a synchronous invocation or performing background tasks (tracked automatically).&lt;/li&gt;
&lt;li&gt;Idle: The runtime is not handling requests or background tasks, but remains available for future invocations.&lt;/li&gt;
&lt;li&gt;Terminated: The execution environment provisioned for the session is destroyed — which may occur due to inactivity (15 minutes), reaching max session duration (8 hours), or failing health checks. Subsequent invocations to a terminated runtimeSessionId will result in provisioning of a new execution environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;CPU charges: Only when actively consumed in ACTIVE or IDLE states - True idle: No CPU consumption (I/O wait, genuinely idle) = No CPU charges - Memory charges: Based on peak memory allocated&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;References:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/about-aws/whats-new/2018/11/firecracker-lightweight-virtualization-for-serverless-computing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/about-aws/whats-new/2018/11/firecracker-lightweight-virtualization-for-serverless-computing/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://brooker.co.za/blog/2025/09/18/firecracker.html" rel="noopener noreferrer"&gt;https://brooker.co.za/blog/2025/09/18/firecracker.html&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-sessions.html" rel="noopener noreferrer"&gt;https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/runtime-sessions.html&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;
&lt;a href="https://aws.amazon.com/blogs/aws/firecracker-lightweight-virtualization-for-serverless-computing/" rel="noopener noreferrer"&gt;https://aws.amazon.com/blogs/aws/firecracker-lightweight-virtualization-for-serverless-computing/&lt;/a&gt;
-&lt;a href="https://www.linkedin.com/feed/update/urn:li:activity:7395200780947038208/" rel="noopener noreferrer"&gt;https://www.linkedin.com/feed/update/urn:li:activity:7395200780947038208/&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>aws</category>
      <category>bedrock</category>
      <category>agentcore</category>
      <category>communitybuilder</category>
    </item>
    <item>
      <title>New Layer of AI Engineer - on AWS Bedrock</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Sat, 13 Sep 2025 03:29:37 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/new-layer-of-ai-engineer-on-aws-bedrock-ppp</link>
      <guid>https://dev.to/nghidanh2005/new-layer-of-ai-engineer-on-aws-bedrock-ppp</guid>
      <description>&lt;p&gt;This is my comprehensive blog presenting my perspective on building AI applications on top of Amazon Bedrock.&lt;br&gt;
There are rumors that AI engineers just call some APIs and that there’s nothing much more to it.&lt;br&gt;
I don’t think this is a positive view, because there’s much more to the job than just coding and making API calls.&lt;br&gt;
There are countless research papers and publications that have laid the foundations we rely on today, many of them published decades ago.&lt;br&gt;
Yes, most of an AI engineer’s work is building software; we use abstractions from third‑party vendors such as AWS, LangChain, and OpenAI instead of building everything from scratch.&lt;br&gt;
We plan, code, experiment, and also conduct research to provide evidence to base our work on.&lt;br&gt;
So, an AI engineer is roughly 5% AI (built on the contributions of AI researchers) and 95% software engineering&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%2Farhw1sn89kgw0tzoji5u.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%2Farhw1sn89kgw0tzoji5u.png" alt="Post Thumbnail" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>aws</category>
      <category>awscommunity</category>
    </item>
    <item>
      <title>ClickOps and IaC Deploy Simple EC2 Wordpress on AWS</title>
      <dc:creator>Danh Hoang Hieu Nghi</dc:creator>
      <pubDate>Tue, 02 Sep 2025 14:02:08 +0000</pubDate>
      <link>https://dev.to/nghidanh2005/clickops-and-iac-deploy-simple-ec2-wordpress-on-aws-18pc</link>
      <guid>https://dev.to/nghidanh2005/clickops-and-iac-deploy-simple-ec2-wordpress-on-aws-18pc</guid>
      <description>&lt;h2&gt;
  
  
  Lời nói đầu
&lt;/h2&gt;

&lt;p&gt;Xin chào mọi người, bài viết hôm nay sẽ là một chia sẽ ngắn gọn về triển khai một website Wordpress trên Amazon EC2 đơn giản và nhanh nhất có thể.&lt;/p&gt;

&lt;p&gt;Bài viết này hands-on from zero, hướng dẫn chi tiết từng khái niệm theo một cách đơn giản nhất. Phù hợp dành cho các developer mới bắt đầu hoặc tìm hiểu thêm về AWS Cloud - Muốn triển khai wordpress web application một cách nhanh chóng nhất trên nền tảng AWS để tận dụng được khả năng năng mở rộng hạ tầng server, cũng như chính sách xài nhiêu trả bấy nhiêu của AWS.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Các yêu cầu tiên quyết để follow-up thực hiện bài lab này :&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Phải có account AWS để thực hành&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Nếu các bạn chưa có tài khoản AWS hoặc không truy cập được thì có thể xem post sau của First Cloud Journey để hướng dẫn tạo account &lt;a href="https://000001.awsstudygroup.com/vi/" rel="noopener noreferrer"&gt;Hướng dẫn tạo tài khoản AWS&lt;/a&gt;&lt;br&gt;
Không cần gì hơn, và chúng ta bắt đầu vô thôi!!!!&lt;/p&gt;

&lt;h2&gt;
  
  
  Một số khái niệm tiên quyết để thực hành lab
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;AWS EC2:&lt;/li&gt;
&lt;li&gt;Infrastrucure as Code (IaC):&lt;/li&gt;
&lt;li&gt;AWS Cloudformation:&lt;/li&gt;
&lt;li&gt;Amazon Machine Images in Amazon EC2 (AMI)&lt;/li&gt;
&lt;li&gt;Keypair:&lt;/li&gt;
&lt;li&gt;VPC:&lt;/li&gt;
&lt;li&gt;Internet Gateway:&lt;/li&gt;
&lt;li&gt;Subnet:&lt;/li&gt;
&lt;li&gt;Route Table:&lt;/li&gt;
&lt;li&gt;Elastic IP:&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;Bài labs này sẽ được chia làm 2 phần, một phần là ClickOps (Thực hiện thao tác trực tiếp trên AWS Console) và phần còn lại là thực hiện triển khai bằng Cloudformation (IaC)&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Triển khai website wordpress bằng AWS Console (ClickOps)
&lt;/h2&gt;

&lt;p&gt;Bước 1: Tìm kiếm và truy cập vào dịch vụ AWS EC2 ở màn hình AWS 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%2Fz0fii639cqr3o6l1o9yz.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%2Fz0fii639cqr3o6l1o9yz.png" alt="EC2_1" width="800" height="303"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bước 2: Bấm vào nút Launch Instance ở trang chủ hoặc bấm vào mục Instance bên thanh bên phải màn hình và chọn Launch Instance&lt;br&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%2Fmojupj26wn2jqccf28q0.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%2Fmojupj26wn2jqccf28q0.png" alt="EC2_2" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Bước 3: Sau khi vào màn hình giao diện của tùy chỉnh để launch EC2 Instance. Ở mục Name and tags thì ta thực hiện việc đặt tên cho Instance (Máy ảo) của chúng ta. Ở mình đặt là HieuNghiWordpressServer&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%2Fprw4hrww2bmxdg5116yh.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%2Fprw4hrww2bmxdg5116yh.png" alt="EC3_3" width="800" height="270"&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%2Fpf5f7ugc77fp29tchcpy.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%2Fpf5f7ugc77fp29tchcpy.png" alt=" " width="800" height="524"&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%2Fv0s9anvj1z4cvwbm9o3x.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%2Fv0s9anvj1z4cvwbm9o3x.png" alt=" " width="800" height="293"&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%2Fl0mm995pi8pm8ci16dmc.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%2Fl0mm995pi8pm8ci16dmc.png" alt=" " width="800" height="424"&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%2Ffve9c84378b41uf2oz31.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%2Ffve9c84378b41uf2oz31.png" alt=" " width="800" height="269"&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%2Fdl4shopvzp12crp4qtni.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%2Fdl4shopvzp12crp4qtni.png" alt=" " width="800" height="360"&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%2Fkefquhwtl4dt1htoxvtq.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%2Fkefquhwtl4dt1htoxvtq.png" alt=" " width="800" height="150"&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%2Fkkyivv0jgenga629bf2n.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%2Fkkyivv0jgenga629bf2n.png" alt=" " width="552" height="522"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkpoint 1 &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%2F6vz8qfason0bznkr3b4a.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%2F6vz8qfason0bznkr3b4a.png" alt=" " width="451" height="163"&gt;&lt;/a&gt;&lt;br&gt;
Checkpoint 2&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%2Fl6om0oc9ummnxk47ny5e.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%2Fl6om0oc9ummnxk47ny5e.png" alt=" " width="800" height="446"&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%2Fqmzxln4orvmsat49qcwz.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%2Fqmzxln4orvmsat49qcwz.png" alt=" " width="800" height="343"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkpoint 3 &lt;br&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%2Ff5cuadeqhnc25b1piht4.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%2Ff5cuadeqhnc25b1piht4.png" alt=" " width="756" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Checkpoint 4 &lt;br&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%2F3zswpu29j4805jzzthy4.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%2F3zswpu29j4805jzzthy4.png" alt=" " width="800" height="354"&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%2Fi0iiqjmczoshn3yeyw6z.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%2Fi0iiqjmczoshn3yeyw6z.png" alt=" " width="800" height="229"&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%2Fiys5zrl2fms21wfx18l5.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%2Fiys5zrl2fms21wfx18l5.png" alt=" " width="800" height="297"&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%2Fb7l76uluut1f5ftc2saz.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%2Fb7l76uluut1f5ftc2saz.png" alt=" " width="292" height="360"&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%2Fhi8avmu9r4w6lcqtqqjv.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%2Fhi8avmu9r4w6lcqtqqjv.png" alt=" " width="800" height="168"&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%2F7y4rgpv3wj2jj9gyjy8x.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%2F7y4rgpv3wj2jj9gyjy8x.png" alt=" " width="800" height="189"&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%2F16fefuxeixmn1586kwrz.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%2F16fefuxeixmn1586kwrz.png" alt=" " width="800" height="333"&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%2Fm4rovm06iyo6869yra0g.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%2Fm4rovm06iyo6869yra0g.png" alt=" " width="800" height="414"&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%2Funv6yh13p39d80qsa7iz.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%2Funv6yh13p39d80qsa7iz.png" alt=" " width="800" height="399"&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%2Fw8rk85rm5w3bnu5temn4.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%2Fw8rk85rm5w3bnu5temn4.png" alt=" " width="800" height="357"&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%2F8ujr6ho3s7ax2latpo8b.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%2F8ujr6ho3s7ax2latpo8b.png" alt=" " width="800" height="533"&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%2Fj8nmc5wjn2rwgvh9p8sw.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%2Fj8nmc5wjn2rwgvh9p8sw.png" alt=" " width="800" height="483"&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%2Fhrkcls63eg2y3os3hi3l.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%2Fhrkcls63eg2y3os3hi3l.png" alt=" " width="800" height="295"&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%2Fab0xhepl6eefnq5bmksi.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%2Fab0xhepl6eefnq5bmksi.png" alt=" " width="800" height="478"&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%2Fq661cvhy0fy67mczifbt.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%2Fq661cvhy0fy67mczifbt.png" alt=" " width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Triển khai website wordpress bằng IaC (Cloudformation)
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Các đường link tham khảo:
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://000021.awsstudygroup.com/" rel="noopener noreferrer"&gt;Wordpress on AWS - FCJ&lt;/a&gt; - Triển khai Wordpress trên AWS Cloud của Firstcloud journey&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/aws-samples/aws-refarch-wordpress?tab=readme-ov-file" rel="noopener noreferrer"&gt;Github Best Practice Wordpress on AWS Cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.aws.amazon.com/whitepapers/latest/best-practices-wordpress/reference-architecture.html" rel="noopener noreferrer"&gt;Reference Architecture Wordpress on AWS Cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ngày thực hiện bài viết : 02/09/2025 &lt;br&gt;
Tác Giả : Danh Hoàng Hiếu Nghị&lt;/p&gt;

</description>
      <category>aws</category>
      <category>ec2</category>
      <category>wordpress</category>
      <category>iac</category>
    </item>
  </channel>
</rss>
