<?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: Andre Luiz Rosa</title>
    <description>The latest articles on DEV Community by Andre Luiz Rosa (@andreluizrosa).</description>
    <link>https://dev.to/andreluizrosa</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%2F3249662%2F523b9be3-e216-476f-a69c-81d735efb57f.png</url>
      <title>DEV Community: Andre Luiz Rosa</title>
      <link>https://dev.to/andreluizrosa</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/andreluizrosa"/>
    <language>en</language>
    <item>
      <title>Kiro with MCP for GitHub Integration, Docs, Diagrams and AWS Recommendations</title>
      <dc:creator>Andre Luiz Rosa</dc:creator>
      <pubDate>Sat, 15 Nov 2025 23:14:06 +0000</pubDate>
      <link>https://dev.to/aws-builders/mcp-on-kiro-for-github-integration-docs-diagrams-and-aws-recommendations-3g5m</link>
      <guid>https://dev.to/aws-builders/mcp-on-kiro-for-github-integration-docs-diagrams-and-aws-recommendations-3g5m</guid>
      <description>&lt;h2&gt;
  
  
  How I Used Kiro + MCP to Document, Analyze, Improve and Visualize My AWS Linktree-Style Project
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;As an AWS Community Builder, I love experimenting with new developer workflows that combine automation, cloud architecture and AI tooling. This article describes how I used Kiro equipped with Model Context Protocol (MCP) servers to automatically analyze, document, diagram, audit and improve a real production project I run on AWS.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  My Personal Project: A Fully Serverless "Linktree-Style" Website on AWS
&lt;/h2&gt;

&lt;p&gt;Before diving into MCP, here’s the context.&lt;/p&gt;

&lt;p&gt;I maintain a personal production project:&lt;br&gt;&lt;br&gt;
a &lt;strong&gt;Linktree-style website built entirely by me&lt;/strong&gt;, deployed on AWS with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;S3&lt;/strong&gt; (static hosting, private bucket)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudFront&lt;/strong&gt; (global delivery)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OAC&lt;/strong&gt; (Origin Access Control)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CloudFront Functions&lt;/strong&gt; (routing logic)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Route 53&lt;/strong&gt; (DNS and ALIAS records)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ACM Certificate&lt;/strong&gt; (TLS)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GitHub Actions CI/CD&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform IaC&lt;/strong&gt; (complete infrastructure automation)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This project has grown over time, and I wanted a faster — and smarter — way to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understand and document the system
&lt;/li&gt;
&lt;li&gt;Validate architecture decisions
&lt;/li&gt;
&lt;li&gt;Receive AWS best-practice recommendations
&lt;/li&gt;
&lt;li&gt;Generate diagrams using official AWS icons
&lt;/li&gt;
&lt;li&gt;Improve Terraform (security, cost and performance)
&lt;/li&gt;
&lt;li&gt;Inspect GitHub workflows and suggest enhancements
&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;That’s when Kiro + MCP changed everything.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Kiro + MCP Did for This Project
&lt;/h2&gt;

&lt;p&gt;After installing five MCP servers, Kiro became a &lt;strong&gt;full cloud architecture assistant&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Here is exactly what it did:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;1. Generated a complete Spec File&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Kiro analyzed my GitHub repo, Terraform code, static files and folder structure.  &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%2Fqvkq5hf6hjagib2r1g8c.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%2Fqvkq5hf6hjagib2r1g8c.png" alt=" " width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then it produced a &lt;strong&gt;clear, structured Spec File&lt;/strong&gt; describing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System purpose
&lt;/li&gt;
&lt;li&gt;AWS services used
&lt;/li&gt;
&lt;li&gt;CI/CD workflow
&lt;/li&gt;
&lt;li&gt;Deployment strategy
&lt;/li&gt;
&lt;li&gt;Security posture
&lt;/li&gt;
&lt;li&gt;Future improvements
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This Spec became a “living blueprint” for the project.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;2. Created a full AWS architecture diagram (Draw.io) by itself&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Using the &lt;strong&gt;diagram MCP&lt;/strong&gt;, Kiro generated a &lt;code&gt;.drawio&lt;/code&gt; file with:&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%2Fo3aa554os2tsc39yvj6m.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%2Fo3aa554os2tsc39yvj6m.png" alt=" " width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Official AWS icons (mxgraph.aws4)
&lt;/li&gt;
&lt;li&gt;S3, CloudFront, Route 53, IAM, OAC
&lt;/li&gt;
&lt;li&gt;Data flows with arrow labels
&lt;/li&gt;
&lt;li&gt;Component descriptions
&lt;/li&gt;
&lt;li&gt;Legend and grouping
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The diagram opens perfectly in &lt;strong&gt;app.diagrams.net&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;3. Produced complete documentation using AWS official MCPs&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Using:&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%2Fruihg3vjxerp9j94qk7w.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%2Fruihg3vjxerp9j94qk7w.png" alt=" " width="453" height="179"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;awslabs.aws-documentation-mcp-server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;awslabs.core-mcp-server&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;mcp-server-fetch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;github MCP&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;diagram-ai MCP&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Looked up AWS best practices
&lt;/li&gt;
&lt;li&gt;Compared my architecture to AWS recommendations
&lt;/li&gt;
&lt;li&gt;Generated docs in &lt;strong&gt;clear, well-structured English&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Validated my CloudFront, S3 and Route 53 setup
&lt;/li&gt;
&lt;li&gt;Suggested improvements using AWS Well-Architected
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All with citations and references to AWS documentation pages.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;4. Identified improvements and generated new Spec Files to implement them&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Examples Kiro suggested (and generated code/specs for):&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%2F1oidiyn1i6lk11buh4ya.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%2F1oidiyn1i6lk11buh4ya.png" alt=" " width="800" height="436"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Security
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;AWS WAF&lt;/strong&gt; to CloudFront
&lt;/li&gt;
&lt;li&gt;Enforce TLS 1.3
&lt;/li&gt;
&lt;li&gt;Ensure S3 bucket has encryption + private access
&lt;/li&gt;
&lt;li&gt;IAM improvements for GitHub OIDC&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Logging
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Enable CloudFront logging
&lt;/li&gt;
&lt;li&gt;Optimize TTLs
&lt;/li&gt;
&lt;li&gt;Split long-cache and short-cache assets (I implemented this)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Performance
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Gzip/Brotli checks
&lt;/li&gt;
&lt;li&gt;Image resizing recommendations
&lt;/li&gt;
&lt;li&gt;Use CloudFront Functions instead of Lambda@Edge when possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Kiro even generated Terraform snippets to apply each change.&lt;/p&gt;




&lt;h2&gt;
  
  
  My MCP Config (Workspace)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight hcl"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"mcpServers"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"fetch"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"uvx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"mcp-server-fetch"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="s2"&gt;"env"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"PYTHONIOENCODING"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"UV_PYTHON"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"python3.12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"UV_NO_LAUNCH"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"1"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="s2"&gt;"disabled"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"autoApprove"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"fetch"&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="s2"&gt;"aws-docs"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"uv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"--from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"awslabs.aws-documentation-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"awslabs.aws-documentation-mcp-server.exe"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="s2"&gt;"env"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"FASTMCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"AWS_DOCUMENTATION_PARTITION"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"aws"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"PYTHONIOENCODING"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"UV_PYTHON"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"python3.12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"UV_NO_LAUNCH"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"1"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="s2"&gt;"disabled"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"autoApprove"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"search_documentation"&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="s2"&gt;"awslabs.core-mcp-server"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"uv"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"tool"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"run"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"--from"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"awslabs.core-mcp-server@latest"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"awslabs.core-mcp-server.exe"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="s2"&gt;"env"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"FASTMCP_LOG_LEVEL"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"ERROR"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"PYTHONIOENCODING"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"utf-8"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"UV_PYTHON"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"python3.12"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"UV_NO_LAUNCH"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"1"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="s2"&gt;"disabled"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="s2"&gt;"github"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"C:&lt;/span&gt;&lt;span class="err"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;Program Files&lt;/span&gt;&lt;span class="err"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;nodejs&lt;/span&gt;&lt;span class="err"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;npx.cmd"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"-y"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"@modelcontextprotocol/server-github"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="s2"&gt;"env"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt;
      &lt;span class="s2"&gt;"disabled"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"autoApprove"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"search_repositories"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"list_commits"&lt;/span&gt;
      &lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="s2"&gt;"diagram-ai"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"command"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;!-- replace-here--&amp;gt;
![ ](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/7nko510nmh5rk0xyn3b3.png)&lt;/span&gt;&lt;span class="err"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;python.exe"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"args"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="s2"&gt;"-m"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"src.application.mcp.server_modular"&lt;/span&gt;
      &lt;span class="p"&gt;],&lt;/span&gt;
      &lt;span class="s2"&gt;"env"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"DIAGRAM_OUTPUT_DIR"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&amp;lt;!-- replace-here--&amp;gt;&lt;/span&gt;&lt;span class="err"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;diagrams"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="s2"&gt;"PYTHONIOENCODING"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"utf-8"&lt;/span&gt;
      &lt;span class="p"&gt;},&lt;/span&gt;
      &lt;span class="s2"&gt;"disabled"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
      &lt;span class="s2"&gt;"autoApprove"&lt;/span&gt;&lt;span class="err"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"*"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  AWS WAF Example (from the recommendations)
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
hcl
resource "aws_wafv2_web_acl" "site" {
  provider = aws.us_east_1
  name     = "site-waf"
  scope    = "CLOUDFRONT"

  rule {
    name     = "AWS-AWSManagedRulesCommonRuleSet"
    priority = 1
    override_action { none {} }

    statement {
      managed_rule_group_statement {
        vendor_name = "AWS"
        name        = "AWSManagedRulesCommonRuleSet"
      }
    }
    visibility_config {
      cloudwatch_metrics_enabled = true
      metric_name                = "common-rules"
      sampled_requests_enabled   = true
    }
  }
}


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

&lt;/div&gt;

</description>
      <category>aws</category>
      <category>terraform</category>
      <category>kiro</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Kiro – Comparison with Other Competitors for Better Understanding (Part 3)</title>
      <dc:creator>Andre Luiz Rosa</dc:creator>
      <pubDate>Sat, 09 Aug 2025 19:51:05 +0000</pubDate>
      <link>https://dev.to/aws-builders/kiro-comparisson-with-other-similar-competitor-for-better-understaing-3dg5</link>
      <guid>https://dev.to/aws-builders/kiro-comparisson-with-other-similar-competitor-for-better-understaing-3dg5</guid>
      <description>&lt;p&gt;For many, comparing a new technology with an existing one helps bring more clarity.&lt;br&gt;&lt;br&gt;
Below is a comparison between Kiro and Cursor to highlight their differences and similarities.&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%2Fj0i2ym7yawxk0k6xn2tv.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%2Fj0i2ym7yawxk0k6xn2tv.png" alt="Kiro vs cursor" width="800" height="627"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiro vs Cursor
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Context&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.1. Growing interest in AI developer tools&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.2. Kiro recently launched with buzz around its performance&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.3. Cursor has gained popularity as a VS Code alternative with AI capabilities&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Kiro&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.1. Description&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.1.1. AI coding assistant aimed at entire codebase understanding&lt;br&gt;&lt;br&gt;
  2.1.2. Developed by former DeepMind engineers&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.2. Features&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.2.1. Entire-repo understanding&lt;br&gt;&lt;br&gt;
  2.2.2. Fast semantic search&lt;br&gt;&lt;br&gt;
  2.2.3. Conversational UI with history awareness&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.3. Technology&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.3.1. Runs in the cloud&lt;br&gt;&lt;br&gt;
  2.3.2. Deep codebase indexing and retrieval&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.4. Strengths&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.4.1. Higher context memory&lt;br&gt;&lt;br&gt;
  2.4.2. Better at navigating large projects&lt;br&gt;&lt;br&gt;
  2.4.3. Context-aware AI conversations&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.5. Limitations&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.5.1. Not open-source&lt;br&gt;&lt;br&gt;
  2.5.2. Potential lock-in to Kiro's ecosystem  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cursor&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.1. Description&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.1.1. AI-powered coding environment&lt;br&gt;&lt;br&gt;
  3.1.2. Built on VS Code with built-in AI assistant&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.2. Features&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.2.1. Inline AI suggestions&lt;br&gt;&lt;br&gt;
  3.2.2. Commands via natural language&lt;br&gt;&lt;br&gt;
  3.2.3. Full IDE functionality&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.3. Strengths&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.3.1. Strong developer community&lt;br&gt;&lt;br&gt;
  3.3.2. Integration with GitHub&lt;br&gt;&lt;br&gt;
  3.3.3. Familiar VS Code UI&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.4. Limitations&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.4.1. Local compute dependent&lt;br&gt;&lt;br&gt;
  3.4.2. Limited context-awareness compared to full-codebase tools  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Industry Implications&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.1. Shift towards semantic-aware dev tools&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.2. AI agents becoming part of dev workflows&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.3. Market fragmentation: IDEs vs AI-native tools&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Comparison&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.1. User Experience&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.1.1. Cursor = lightweight, editor-based&lt;br&gt;&lt;br&gt;
  5.1.2. Kiro = heavy-duty, cloud-powered experience&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.2. Performance&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.2.1. Kiro excels in larger codebases&lt;br&gt;&lt;br&gt;
  5.2.2. Cursor suitable for quick AI assistance in code&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.3. Customization&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.3.1. Cursor allows more plugin/extensions (VS Code)&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.4. Deployment&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.4.1. Cursor = local&lt;br&gt;&lt;br&gt;
  5.4.2. Kiro = cloud-hosted  &lt;/p&gt;




&lt;h2&gt;
  
  
  Who Wins?
&lt;/h2&gt;

&lt;p&gt;Depends on use case:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Solo devs/small projects → Cursor
&lt;/li&gt;
&lt;li&gt;Teams/large repos → Kiro
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tradeoffs:  &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Cursor = flexibility + familiarity
&lt;/li&gt;
&lt;li&gt;Kiro = power + scalability
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>ide</category>
      <category>aws</category>
      <category>kiro</category>
    </item>
    <item>
      <title>Kiro – Coding Experience Broken Down into Topics (Part 2)</title>
      <dc:creator>Andre Luiz Rosa</dc:creator>
      <pubDate>Sat, 09 Aug 2025 19:48:14 +0000</pubDate>
      <link>https://dev.to/aws-builders/kiro-coding-experience-described-in-topics-3a99</link>
      <guid>https://dev.to/aws-builders/kiro-coding-experience-described-in-topics-3a99</guid>
      <description>&lt;p&gt;For developers, nothing beats hands-on experience. So here’s a mind map showing what an author did when specifying requirements — and what they found as a result.&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%2Fy04qm2kc0hymsiqtndsx.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%2Fy04qm2kc0hymsiqtndsx.png" alt="Kiro hands on experience" width="800" height="861"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiro's Hands-On Experience
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Scenario 1: Return Type Clarification&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.1. Author's Prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  1.1.1. "What's the return type of this function?"&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.2. Expected&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  1.2.1. Just the return type&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.3. What Kiro Did&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  1.3.1. Gave return type&lt;br&gt;&lt;br&gt;
  1.3.2. Explained type origin&lt;br&gt;&lt;br&gt;
  1.3.3. Traced it to a type in another file&lt;br&gt;&lt;br&gt;
  1.3.4. Linked explanation to the imported symbol&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.4. Value Add&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  1.4.1. Saved developer from digging across files&lt;br&gt;&lt;br&gt;
  1.4.2. Demonstrated codebase awareness  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Scenario 2: Error in Type Usage&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.1. Author's Prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.1.1. Asked Kiro to explain a type mismatch&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.2. Expected&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.2.1. Just an explanation of the error&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.3. What Kiro Did&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.3.1. Identified root cause&lt;br&gt;&lt;br&gt;
  2.3.2. Suggested code correction&lt;br&gt;&lt;br&gt;
  2.3.3. Provided reasoning for suggestion&lt;br&gt;&lt;br&gt;
  2.3.4. Highlighted implication on other modules&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.4. Value Add&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.4.1. Demonstrated static analysis-like capabilities&lt;br&gt;&lt;br&gt;
  2.4.2. Reduced debugging time  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Scenario 3: Custom Hook Navigation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.1. Author's Prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.1.1. "What does this hook do?"&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.2. Expected&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.2.1. Surface-level summary&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.3. What Kiro Did&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.3.1. Explained the hook's purpose&lt;br&gt;&lt;br&gt;
  3.3.2. Followed dependencies used in the hook&lt;br&gt;&lt;br&gt;
  3.3.3. Described each of the sub-functions involved&lt;br&gt;&lt;br&gt;
  3.3.4. Provided insight into context providers&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.4. Value Add&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.4.1. Deep dive into React architecture&lt;br&gt;&lt;br&gt;
  3.4.2. Reconstructed mental model for the developer  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Scenario 4: Infrastructure Question&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.1. Author's Prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  4.1.1. "How does this app get deployed?"&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.2. Expected&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  4.2.1. High-level steps or CI/CD info&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.3. What Kiro Did&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  4.3.1. Located deployment scripts&lt;br&gt;&lt;br&gt;
  4.3.2. Parsed GitHub Actions YAML&lt;br&gt;&lt;br&gt;
  4.3.3. Explained Docker setup&lt;br&gt;&lt;br&gt;
  4.3.4. Described interaction with AWS&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.4. Value Add&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  4.4.1. Unified frontend, infra, and DevOps understanding&lt;br&gt;&lt;br&gt;
  4.4.2. Helped map full deployment path  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Scenario 5: Module Refactor Help&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.1. Author's Prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.1.1. Requested help renaming and refactoring a module&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.2. Expected&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.2.1. Just rename functions or variables&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.3. What Kiro Did&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.3.1. Suggested file restructuring&lt;br&gt;&lt;br&gt;
  5.3.2. Identified tight coupling&lt;br&gt;&lt;br&gt;
  5.3.3. Proposed more modular architecture&lt;br&gt;&lt;br&gt;
  5.3.4. Explained pros/cons of the new structure&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.4. Value Add&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  5.4.1. Functioned like a junior architect&lt;br&gt;&lt;br&gt;
  5.4.2. Encouraged long-term maintainability  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Scenario 6: Missing Tests&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.1. Author's Prompt&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  6.1.1. "Are there any tests for this component?"&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.2. Expected&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  6.2.1. Yes/No answer or test file location&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.3. What Kiro Did&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  6.3.1. Analyzed nearby test files&lt;br&gt;&lt;br&gt;
  6.3.2. Pointed out lack of direct coverage&lt;br&gt;&lt;br&gt;
  6.3.3. Suggested what should be tested&lt;br&gt;&lt;br&gt;
  6.3.4. Offered Jest code snippet examples&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.4. Value Add&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  6.4.1. Boosted test coverage awareness&lt;br&gt;&lt;br&gt;
  6.4.2. Jumpstarted test writing  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Summary&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;7.1. Pattern&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  7.1.1. Kiro exceeds intent of prompt&lt;br&gt;&lt;br&gt;
  7.1.2. Anticipates developer needs&lt;br&gt;&lt;br&gt;
  7.1.3. Connects dots across files and domains&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;7.2. Implication&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  7.2.1. More than a tool — feels like a thinking collaborator&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;7.3. Strength&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  7.3.1. Context-rich AI understanding&lt;br&gt;&lt;br&gt;
  7.3.2. Full-project scope awareness  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Overview&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;8.1. Lets see Kiro with a real-world codebase&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;8.2. Main observation: Kiro often exceeds what is asked&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;8.3. Highlights potential as a proactive AI coding assistant&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-builders/kiro-comparisson-with-other-similar-competitor-for-better-understaing-3dg5"&gt;Read the continuation in Part 3&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kiro</category>
      <category>aws</category>
      <category>ide</category>
    </item>
    <item>
      <title>Kiro – The New Agentic IDE That Thinks with You, Featuring Great Mind Maps (Part 1)</title>
      <dc:creator>Andre Luiz Rosa</dc:creator>
      <pubDate>Mon, 04 Aug 2025 12:29:38 +0000</pubDate>
      <link>https://dev.to/aws-builders/getting-started-with-kiro-the-agentic-ide-that-thinks-with-you-with-some-great-mind-maps-4734</link>
      <guid>https://dev.to/aws-builders/getting-started-with-kiro-the-agentic-ide-that-thinks-with-you-with-some-great-mind-maps-4734</guid>
      <description>&lt;p&gt;A lot of people grasp new concepts more easily when they’re presented visually—through diagrams or infographics like mind maps. That’s why I’ve decided to share my impressions of Kiro using a few of them.&lt;/p&gt;

&lt;p&gt;Let’s start with this mind map, which gives a high-level overview of Kiro’s purpose, core features and comparisons:&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%2F2je8j4prd1pcev3ryei3.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%2F2je8j4prd1pcev3ryei3.png" alt="Kiros overview" width="800" height="537"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Kiro the New Agentic IDE
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Context&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.1. Kiro is a cloud-based AI IDE&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.2. Focus on boosting developer productivity&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;1.3. Targets large codebases&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Features Tested&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.1. Semantic Code Search&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.1.1. Finds functions/types based on meaning&lt;br&gt;&lt;br&gt;
  2.1.2. More effective than traditional search&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.2. Natural Language Q&amp;amp;A&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.2.1. Kiro gave an accurate answer with file reference&lt;br&gt;&lt;br&gt;
  2.2.2. How is this API used in the frontend?&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.3. Conversational Memory&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.3.1. Keeps session history&lt;br&gt;&lt;br&gt;
  2.3.2. Useful for following reasoning over time&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;2.4. Code Navigation&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  2.4.1. Auto follows references&lt;br&gt;&lt;br&gt;
  2.4.2. Works like a guided walkthrough of the codebase  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Limitations&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;3.1. Limited Debugging Support&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  3.1.1. No breakpoints or live debugging tools&lt;br&gt;&lt;br&gt;
  3.1.2. Cannot fully replace VS Code or JetBrains yet  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. First Impressions&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.1. Clean, intuitive UI&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.2. GitHub login integration&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;4.3. Quick onboarding experience&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Final Thoughts&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.1. Highly promising for developers&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.2. Complements existing IDEs well&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;5.3. Represents future direction of AI-assisted development&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Ideal Use Cases&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.1. Onboarding to large codebases&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.2. Understanding legacy systems&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.3. Code reviews of complex logic&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;6.4. Exploring unfamiliar repositories&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Strengths&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;7.1. Semantic Understanding&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  7.1.1. Answers based on deeper code behavior&lt;br&gt;&lt;br&gt;
  7.1.2. Goes beyond string matching&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;7.2. Handles Large Projects Well&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  7.2.1. Efficient indexing&lt;br&gt;&lt;br&gt;
  7.2.2. Fast performance even in monorepos&lt;br&gt;&lt;br&gt;
 &lt;strong&gt;7.3. Low Friction&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
  7.3.1. No installation needed&lt;br&gt;&lt;br&gt;
  7.3.2. Ready to use immediately  &lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/aws-builders/kiro-coding-experience-described-in-topics-3a99"&gt;Read the continuation in Part 2&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kiro</category>
      <category>ide</category>
      <category>aws</category>
    </item>
    <item>
      <title>Video Generation using BedRock [Part 1] Amazon Nova Canvas, Lambda and S3</title>
      <dc:creator>Andre Luiz Rosa</dc:creator>
      <pubDate>Sat, 14 Jun 2025 19:47:25 +0000</pubDate>
      <link>https://dev.to/aws-builders/video-generation-using-bedrock-part-1-amazon-nova-canvas-lambda-and-s3-i3g</link>
      <guid>https://dev.to/aws-builders/video-generation-using-bedrock-part-1-amazon-nova-canvas-lambda-and-s3-i3g</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;🌟 Hello! I’m André, a Staff Software Engineer and proud member of the AWS Community Builders program. With 9 AWS certifications earned along my journey, I’m constantly pushing the boundaries of what’s possible in the cloud. I’m passionate about designing scalable architectures, experimenting with emerging technologies like Generative AI, and giving back to the tech community by sharing what I learn. Excited to connect with fellow builders and innovators as we shape the future of cloud computing! 🚀&lt;/p&gt;
&lt;/blockquote&gt;

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

&lt;p&gt;In this article, we’ll explore how you can build your own AI-powered video generation workflow using Amazon Bedrock, AWS Lambda, AWS Cloudwatch and Amazon S3. We'll leverage Amazon Nova Reels as the foundation model to generate custom videos based on text prompts provided by users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Initial Approach adopted
&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%2Fjnd1uwn3km8kxt8nysmy.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%2Fjnd1uwn3km8kxt8nysmy.png" alt="The diagram shows a user submitting a text prompt to an AWS Lambda function labeled " width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This solution follows an asynchronous architecture: the first Lambda function receives the prompt and triggers the video generation process in Amazon Bedrock. Once the video is created and saved automatically in an S3 bucket, an S3 Event Notification triggers a second Lambda function that generates a pre-signed URL on AWS Cloudwatch for enabling access to the video.&lt;/p&gt;

&lt;h2&gt;
  
  
  Target Audience
&lt;/h2&gt;

&lt;p&gt;This guide is ideal for AWS Community Builders, IT professionals, and Generative AI enthusiasts who want to integrate AI-driven video generation into real-world serverless applications. &lt;/p&gt;

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

&lt;p&gt;Accessing Amazon Nova Foundation Model via Amazon Bedrock&lt;br&gt;
&lt;em&gt;Before starting your project, make sure you complete the following steps:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;u&gt;AWS Account Setup:&lt;/u&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Have an active AWS Account with billing enabled.&lt;/li&gt;
&lt;li&gt;Ensure your IAM user or role has the necessary Bedrock service permissions, such as:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;bedrock:InvokeModel&lt;br&gt;
bedrock:ListFoundationModels&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Step 1: Enable Amazon Bedrock in Your AWS Account:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log in to the AWS Management Console.&lt;/li&gt;
&lt;li&gt;Navigate to the Amazon Bedrock service.&lt;/li&gt;
&lt;li&gt;Make sure you are in a supported AWS region, like us-east-1.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 2: Request Access to Amazon Nova Foundation Model:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;In the Bedrock Console, go to “Model access”.&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Under “Manage model access”, locate Amazon Nova Foundation Model.&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%2Fsevg41zz848hsi8i8erv.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%2Fsevg41zz848hsi8i8erv.png" alt="Presentation page Bed Rock" width="800" height="135"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click “Request access” for the Nova model if you don’t already have it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Wait for AWS approval. This process can take from a few minutes to several hours, depending on your AWS account and region.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;&lt;strong&gt;Step 3: Gather Model API Details:&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;Go to the “Foundation models” section in the Bedrock Console (left-hand menu).&lt;/em&gt;&lt;/p&gt;

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


&lt;h2&gt;
  
  
  First lambda - Start video creation process
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Code explaned below&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Importing Required Libraries and Initializing Parameters&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;          &lt;span class="c1"&gt;# For returning API responses in JSON format
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;          &lt;span class="c1"&gt;# AWS SDK for Python (to call Bedrock)
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;         &lt;span class="c1"&gt;# To generate a random seed for output variability
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="c1"&gt;# Initialize Bedrock client in the desired AWS region
&lt;/span&gt;    &lt;span class="n"&gt;bedrock&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;bedrock-runtime&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;region_name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;us-east-1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Get the input prompt from the event (or use default)
&lt;/span&gt;    &lt;span class="n"&gt;prompt&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;prompt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Sample video&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

    &lt;span class="c1"&gt;# Generate a random seed to ensure unique output per request
&lt;/span&gt;    &lt;span class="n"&gt;seed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;random&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;randint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2_147_483_646&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Triggering &lt;strong&gt;Asynchronous Video Generation&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;bedrock&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;start_async_invoke&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;modelId&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;amazon.nova-reel-v1:0&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;modelInput&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;taskType&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;TEXT_VIDEO&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;textToVideoParams&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;prompt&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;videoGenerationConfig&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;fps&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;24&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;durationSeconds&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;dimension&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1280x720&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;seed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;seed&lt;/span&gt;
        &lt;span class="p"&gt;}&lt;/span&gt;
    &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="n"&gt;outputDataConfig&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;s3OutputDataConfig&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;BUCKETNAME/outputs/&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}}&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the heart of the Lambda function. We are calling the Bedrock API's &lt;strong&gt;start_async_invoke&lt;/strong&gt; method, which is used for models that run *&lt;em&gt;asynchronously *&lt;/em&gt;(like video generation with Nova Reels).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;202&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invocationArn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;invocationArn&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]}),&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally, the Lambda returns a 202 Accepted HTTP status code, along with the invocationArn, which acts as the Job ID for tracking the status of the asynchronous generation process.&lt;/p&gt;




&lt;h2&gt;
  
  
  Second lambda - Post processing event
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Code explaned below&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;

&lt;span class="n"&gt;s3&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;boto3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;client&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# S3 client for generating pre-signed URLs
&lt;/span&gt;
&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;lambda_handler&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;context&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;  &lt;span class="c1"&gt;# Log the incoming S3 event payload
&lt;/span&gt;
    &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;event&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Records&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]:&lt;/span&gt;
        &lt;span class="n"&gt;bucket&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;name&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;  &lt;span class="c1"&gt;# Bucket name where the video was saved
&lt;/span&gt;        &lt;span class="n"&gt;key&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;record&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;s3&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;      &lt;span class="c1"&gt;# Object key (file path) of the uploaded video
&lt;/span&gt;
        &lt;span class="c1"&gt;# Generate a pre-signed URL valid for 1 hour
&lt;/span&gt;        &lt;span class="n"&gt;presigned_url&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;s3&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate_presigned_url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
            &lt;span class="n"&gt;ClientMethod&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;get_object&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="n"&gt;Params&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Bucket&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;bucket&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Key&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;key&lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;
            &lt;span class="n"&gt;ExpiresIn&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3600&lt;/span&gt;
        &lt;span class="p"&gt;)&lt;/span&gt;

        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Video URL: &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;presigned_url&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;  &lt;span class="c1"&gt;# Log the generated link (you can replace this with SNS, DynamoDB, etc.)
&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;statusCode&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;body&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;message&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Processed&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;})&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  Calling the first lambda
&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%2Fw78m0s4m9nxdqqrahqhv.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%2Fw78m0s4m9nxdqqrahqhv.png" alt="Input text to test" width="383" height="149"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F84js31ouynd27c3fo7a7.png" alt="Successful message" width="463" height="163"&gt;
&lt;/h2&gt;

&lt;h2&gt;
  
  
  Getting the video pre-signedUrl after de S3 event calls the second lambda
&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%2F6rpis0ud1up0glbhn760.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%2F6rpis0ud1up0glbhn760.png" alt="Seeing the URL" width="411" height="341"&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%2Fdxqk39yx2xwvagxbyxrm.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%2Fdxqk39yx2xwvagxbyxrm.png" alt="Seeing the video" width="568" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Generated video from your application
&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%2Frrmaia01fhtj6a5lcaxp.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%2Frrmaia01fhtj6a5lcaxp.png" alt="Seeing the video" width="495" height="294"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  And that’s a wrap!
&lt;/h2&gt;

&lt;p&gt;Thank you for taking the time to read through this guide. I hope it brought you clarity and practical knowledge to help you on your cloud and AI journey. I’m passionate about making technical topics more accessible, and there’s plenty more content coming soon. Stay curious, keep experimenting, and let’s continue building great things together!&lt;/p&gt;

</description>
      <category>genai</category>
      <category>aws</category>
      <category>python</category>
      <category>bedrock</category>
    </item>
  </channel>
</rss>
