<?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>Forem: Budiono Santoso</title>
    <description>The latest articles on Forem by Budiono Santoso (@budionosan).</description>
    <link>https://forem.com/budionosan</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%2F372111%2F8d2290cf-aa7f-4915-b330-0e57baef977b.png</url>
      <title>Forem: Budiono Santoso</title>
      <link>https://forem.com/budionosan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/budionosan"/>
    <language>en</language>
    <item>
      <title>Deploy and Invoke AI Agent to AgentCore Runtime with Github Actions</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Wed, 28 Jan 2026 15:02:04 +0000</pubDate>
      <link>https://forem.com/budionosan/deploy-and-invoke-ai-agent-to-agentcore-runtime-with-github-actions-j6f</link>
      <guid>https://forem.com/budionosan/deploy-and-invoke-ai-agent-to-agentcore-runtime-with-github-actions-j6f</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is Github Actions?&lt;/strong&gt; &lt;a href="https://github.com/features/actions" rel="noopener noreferrer"&gt;Github Actions&lt;/a&gt; is a Github CI/CD (continuous integration/continous deployment or continous delivery) feature that automate end-to-end (build, test and deploy) workflow.&lt;/p&gt;

&lt;p&gt;This tutorial blog explained how to deploy AI agent to AgentCore Runtime and test invoke AI agent using Github Actions.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;AWS account (or AWS credentials), you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Google Gemini account, you can sign up/sign in &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Langgraph&lt;/li&gt;
&lt;li&gt;Github account, you can sign up/sign in &lt;a href="https://github.com" rel="noopener noreferrer"&gt;here.&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;To get an IAM role for &lt;strong&gt;AgentCore Runtime&lt;/strong&gt;, you can see &lt;a href="https://github.com/budionosanai/amazon-bedrock-agentcore-one-to-one/blob/main/runtime/langgraph/LanggraphWithAgentcore.ipynb" rel="noopener noreferrer"&gt;this notebook&lt;/a&gt; then open and run the notebook.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;FLASHBACK :&lt;/strong&gt; I have already deploy production AI candidate screening agent to AgentCore Runtime in &lt;a href="https://dev.to/budionosan/amazon-bedrock-agentcore-runtime-with-langgraph-crewai-and-google-gemini-57l5"&gt;this tutorial blog.&lt;/a&gt; I think it is time to automate end-to-end workflow from deployment to testing invocation using CI/CD by Github Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; Follow &lt;a href="https://dev.to/budionosan/amazon-bedrock-agentcore-runtime-with-langgraph-crewai-and-google-gemini-57l5"&gt;this tutorial blog.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B.&lt;/strong&gt; Follow this steps in Github repository:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create new repository, click Settings, click Secrets and variables in Security section, click Actions.&lt;/li&gt;
&lt;li&gt;Click Repository secrets then click "New repository secret".&lt;/li&gt;
&lt;li&gt;Input secret name and secret key : AWSACCESSKEY and your AWS access key &amp;amp; AWSSECRETKEY and your AWS secret key.
&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmoac6xsbkiv0p4qbqcvm.PNG" alt="Secret in Actions" width="800" height="197"&gt;
&lt;/li&gt;
&lt;li&gt;Click "Add secret". Now go to Github Codespaces to create IDE online.&lt;/li&gt;
&lt;li&gt;Choose repository, click "Create codespace".&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;C.&lt;/strong&gt; Create workflow file to execute CI/CD automation workflow. In this tutorial, file name is &lt;code&gt;workflow.yaml&lt;/code&gt; in &lt;code&gt;.github/workflows&lt;/code&gt; folder. Write workflow code like &lt;a href="https://github.com/budionosanai/agentcore-runtime-github-actions/blob/main/.github/workflows/workflow.yaml" rel="noopener noreferrer"&gt;this workflow code.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explanation this workflow file :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;on: push:&lt;/code&gt; mean when developer ready to deploy to AgentCore Runtime and invoke AI agent with &lt;code&gt;git push&lt;/code&gt; automatically running.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;on: push: paths:&lt;/code&gt; mean when developer update code from several files then push to repository and automatically running.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jobs: deploy:&lt;/code&gt; mean job running deploy to AgentCore Runtime.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;steps&lt;/code&gt; mean running several steps with name of explanation.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;outputs:&lt;/code&gt; mean workflow have output (agent runtime ID).&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;jobs: test:&lt;/code&gt; mean job running test invoke AI agent on AgentCore Runtime.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;needs:&lt;/code&gt; mean need &lt;code&gt;deploy&lt;/code&gt; job must running before running &lt;code&gt;test&lt;/code&gt; job. If &lt;code&gt;deploy&lt;/code&gt; job is failed, &lt;code&gt;test&lt;/code&gt; job is not running.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;D.&lt;/strong&gt; Copy &lt;code&gt;langgraph_agentcore.py&lt;/code&gt; and &lt;code&gt;requirements.txt&lt;/code&gt; in &lt;strong&gt;requirements&lt;/strong&gt; notebook then paste to &lt;code&gt;runtime&lt;/code&gt; folder (in Github Codespaces).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E.&lt;/strong&gt; Create deployment file to deploy AI agent to AgentCore Runtime. In this tutorial, file name is &lt;code&gt;deploy-runtime.py&lt;/code&gt;. Write deployment code like &lt;a href="https://github.com/budionosanai/agentcore-runtime-github-actions/blob/main/deploy-runtime.py" rel="noopener noreferrer"&gt;this code.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Explanation this deployment code file :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;# Retrieve AWS Account ID&lt;/code&gt; comment mean get AWS account ID that used in IAM execution role for AgentCore Runtime. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What different?&lt;/strong&gt; &lt;strong&gt;Requirements&lt;/strong&gt; notebook writing &lt;code&gt;auto_create_execution_role=True&lt;/code&gt; mean automatically create IAM execution role while this deployment code writing &lt;code&gt;auto_create_execution_role=False&lt;/code&gt; mean not need new IAM execution role and need input IAM execution role to &lt;code&gt;execution_role&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;agent_id = launch_result.agent_id&lt;/code&gt; mean agent runtime ID for &lt;code&gt;invoke-agent.py&lt;/code&gt; file.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;F.&lt;/strong&gt; Create invocation file to invoke AI agent on AgentCore Runtime. In this tutorial, file name is &lt;code&gt;invoke-agent.py&lt;/code&gt;. Write invocation code like &lt;a href="https://github.com/budionosanai/agentcore-runtime-github-actions/blob/main/invoke-agent.py" rel="noopener noreferrer"&gt;this code.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;Explanation this invocation code file :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;# Get Agent Runtime ID&lt;/code&gt; mean get agent runtime ID from result in &lt;code&gt;deploy-runtime.py&lt;/code&gt; file then get agent runtime ARN from agent runtime ID.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;G.&lt;/strong&gt; Add, commit and push all code to Github repository and automatically deploy AI agent to AgentCore Runtime and invoke AI agent.&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%2Fjvaf1uy1bn87gajeroz4.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%2Fjvaf1uy1bn87gajeroz4.PNG" alt="Git command" width="800" height="371"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NOTE :&lt;/strong&gt; After push to Github repository then when deploy AI agent to AgentCore Runtime get error like this screenshot below.&lt;/p&gt;

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

&lt;p&gt;Go to Amazon Bedrock AgentCore -&amp;gt; Agent runtime then click your agent name that already created.&lt;/p&gt;

&lt;p&gt;Click "Version 1" then click IAM service role of Permissions like this screenshot.&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%2Fn9psnr9cr1ijvak4n8ot.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%2Fn9psnr9cr1ijvak4n8ot.PNG" alt="IAM" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This error is happened because &lt;code&gt;ECRImageAccess&lt;/code&gt; action is allow &lt;code&gt;bedrock-agentcore-gemini_langgraph&lt;/code&gt; repository only. How to fix? Click permission name, edit/modify permissions from &lt;code&gt;bedrock-agentcore-gemini_langgraph&lt;/code&gt; to &lt;code&gt;/*&lt;/code&gt; in policy editor then click Next and click Save.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fojwbnn6s3i6dj8rvibgl.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%2Fojwbnn6s3i6dj8rvibgl.PNG" alt="Edit or modify IAM" width="800" height="310"&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%2Fcmwwn03r3muxaqg8iitx.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%2Fcmwwn03r3muxaqg8iitx.PNG" alt="After edit or modify IAM" width="741" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then add, commit and push all code again to Github repository. Go to Actions in this repository to see first push action.&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%2F2kemlw837t2yphssn4au.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%2F2kemlw837t2yphssn4au.PNG" alt="First push" width="800" height="271"&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%2Fbpy2e0frri7ihhtcn1ys.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%2Fbpy2e0frri7ihhtcn1ys.PNG" alt="First push" width="800" height="315"&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%2F204n63oc8trp1d8dcacl.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%2F204n63oc8trp1d8dcacl.PNG" alt="First push" width="800" height="339"&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%2F4y67cpvkj6kmuxpyfxde.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%2F4y67cpvkj6kmuxpyfxde.PNG" alt="First push" width="800" height="355"&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%2Fkhr3z3drwj3nq9npde2p.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%2Fkhr3z3drwj3nq9npde2p.PNG" alt="First push" width="800" height="368"&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%2Fnlkvx7qip82xlmlpvq5f.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%2Fnlkvx7qip82xlmlpvq5f.PNG" alt="First push" width="800" height="375"&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%2F95f0xogeqaszx6669rar.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%2F95f0xogeqaszx6669rar.PNG" alt="First push" width="800" height="237"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to AgentCore Runtime console like this screenshot.&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%2Fah2xh04btis6bkoxhy62.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%2Fah2xh04btis6bkoxhy62.PNG" alt="Runtime" width="800" height="235"&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%2Fgrw7q4eyd7mepazyrv2e.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%2Fgrw7q4eyd7mepazyrv2e.PNG" alt="Runtime" width="554" height="680"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click "Dashboard" of Observability in Endpoints section to open AgentCore Observability.&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%2Fieryic9igakglvwl5dv5.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%2Fieryic9igakglvwl5dv5.PNG" alt="Runtime" width="800" height="258"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Agent metrics of AI agent runtime.&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%2Fclsfuudroio54zre0zf8.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%2Fclsfuudroio54zre0zf8.PNG" alt="Agent metrics" width="800" height="297"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;System error, client error and throttle.&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%2Fhqlvr135e8v3tg7verdr.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%2Fhqlvr135e8v3tg7verdr.PNG" alt="System error, client error and throttle" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Runtime metrics of AI agent runtime.&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%2F6dy4mrktfk2mu3ptcyl6.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%2F6dy4mrktfk2mu3ptcyl6.PNG" alt="Runtime metrics" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; With CI/CD automation workflow provided by Github Actions, deploy and invoke AI agent is easy, need IAM execution role only.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langgraph/" rel="noopener noreferrer"&gt;Langgraph documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/" rel="noopener noreferrer"&gt;Google Gemini documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.github.com/en/actions/" rel="noopener noreferrer"&gt;Github Actions documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GITHUB REPOSITORY :&lt;/strong&gt; &lt;a href="https://github.com/budionosanai/agentcore-runtime-github-actions" rel="noopener noreferrer"&gt;https://github.com/budionosanai/agentcore-runtime-github-actions&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
      <category>githubactions</category>
      <category>agentcore</category>
      <category>ai</category>
      <category>aws</category>
    </item>
    <item>
      <title>Amazon Bedrock AgentCore : MCP Server on AgentCore Runtime and AgentCore Gateway</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Mon, 12 Jan 2026 00:41:56 +0000</pubDate>
      <link>https://forem.com/budionosan/amazon-bedrock-agentcore-mcp-server-on-agentcore-runtime-and-agentcore-gateway-el9</link>
      <guid>https://forem.com/budionosan/amazon-bedrock-agentcore-mcp-server-on-agentcore-runtime-and-agentcore-gateway-el9</guid>
      <description>&lt;p&gt;&lt;strong&gt;What is MCP?&lt;/strong&gt; &lt;a href="https://modelcontextprotocol.io/docs/getting-started/intro" rel="noopener noreferrer"&gt;MCP (Model Context Protocol)&lt;/a&gt; is a open-source standard for connecting AI application to external systems such as APIs, databases, software and etc.&lt;/p&gt;

&lt;p&gt;But how to create and deploy MCP server so that we can access MCP server using MCP client? Here it is using AgentCore Runtime and AgentCore Gateway. This tutorial blog explained how to create and deploy receipt extraction MCP server on AgentCore Runtime then integrate with AgentCore Gateway. &lt;/p&gt;

&lt;p&gt;This MCP server help you extract receipt photo information such as store name, purchase date and total/amount then write output of extract information to Amazon DynamoDB table and send email of output of extract information using Amazon SNS. Then test this MCP server with Langchain.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;AWS account (or AWS credentials), you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Google Gemini account, you can sign up/sign in &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Langchain.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The AWS services used by this MCP server such as :&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AWS service&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Amazon S3&lt;/td&gt;
&lt;td&gt;upload file from local to S3 and download file from S3 to receipt extraction MCP server processes.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AWS Secret Manager&lt;/td&gt;
&lt;td&gt;store Gemini API Key and LLM inference in receipt extraction MCP server.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Runtime, AgentCore Gateway and AgentCore Identity.&lt;/td&gt;
&lt;td&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Starter Toolkit&lt;/td&gt;
&lt;td&gt;quickly configure and deploy MCP server with several AWS services such as Amazon ECR, AWS CodeBuild, and AWS IAM.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon Cognito&lt;/td&gt;
&lt;td&gt;Authentication and authorization for AgentCore Identity.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon DynamoDB&lt;/td&gt;
&lt;td&gt;Write result of receipt extraction to NoSQL database.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Amazon SNS&lt;/td&gt;
&lt;td&gt;Send email notification about result of receipt extraction.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Creating Amazon S3 bucket, store Gemini API key in AWS Secret Manager, creating Amazon DynamoDB table and creating Amazon SNS topic/subs.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;!pip install python-dotenv boto3

from google.colab import userdata
from dotenv import load_dotenv
import boto3
import json
import os

os.environ["AWS_ACCESS_KEY_ID"] = userdata.get('AWSACCESSKEY')
os.environ["AWS_SECRET_ACCESS_KEY"] = userdata.get('AWSSECRETKEY')

# Get Gemini API Key and email address
load_dotenv("geminiapikey.txt")
gemini = os.getenv("GEMINI_API_KEY")
gmail = os.getenv("EMAIL")
secret_name = "geminiapikey"
table_name = "receiptsExtraction"
topic_name = "receiptsExtractionEmail"
region = "us-west-2"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Use this code to create a Amazon S3 bucket.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3 = boto3.client('s3', region)
s3.create_bucket(
    Bucket="receipts-extraction",
    CreateBucketConfiguration={
        'LocationConstraint': region
    }
)
print("This bucket is now available.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Use this code to create Gemini API Key in AWS Secret Manager.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apikey = boto3.client('secretsmanager', region)
secret_dict = {"GEMINI_API_KEY": gemini}
response = apikey.create_secret(
    Name=secret_name,
    Description="Gemini API Key",
    SecretString=json.dumps(secret_dict)
)
print("Gemini API Key is now stored.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;p&gt;&lt;strong&gt;Use this code to create result of receipt extraction table in Amazon DynamoDB.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dynamodb = boto3.client('dynamodb', region)
table = dynamodb.create_table(
    TableName=table_name,
    KeySchema=[{'AttributeName': 'storeName', 'KeyType': 'HASH'}],
    AttributeDefinitions=[{'AttributeName': 'storeName', 'AttributeType': 'S'}],
    BillingMode='PAY_PER_REQUEST',
    OnDemandThroughput={'MaxReadRequestUnits': 200,'MaxWriteRequestUnits': 200}
)
print("Receipt extraction table is now available and save output from MCP server.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;&lt;strong&gt;Use this code to create email notification about result of receipt extraction using Amazon SNS.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sns = boto3.client('sns', region)
topic = sns.create_topic(Name=topic_name)
topic_arn = topic['TopicArn']
# Subscribe email to topic but must open your inbox email and click 'Confirm Subscription'
sns.subscribe(
    TopicArn=topic_arn,
    Protocol="email",
    Endpoint=gmail
)
print("Open your inbox with subject AWS Notification - Subscription Confirmation and click Confirm Subscription.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;p&gt;&lt;strong&gt;B. MCP Server Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This structure is very important for creating MCP server. Write Python code for MCP server receipt extraction with detailed explanation :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;receiptExtraction : Extract store name, purchase date and total/amount based this receipt photo with structure output using Google Gemini 2.5 Flash based ReceiptExtractionResult class format like this
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class ReceiptExtractionResult(BaseModel):
        """Extracted receipt information."""
        storeName: str = Field(description="Name of store or store name. Must uppercase.")
        purchaseDate: str = Field(description="Purchase date with \"DD-MM-YYYY\" format date.")
        total: float = Field(description="Total or amount. Number and (.) only without any such as $ or other currency.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;&lt;p&gt;writeOutput : Write receipt extraction results to Amazon DynamoDB table.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;sendEmail : Send email notification with receipt extraction results using Amazon SNS.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create Amazon Cognito User Pool, Domain, Resource Server and User Pool Client for AgentCore Gateway and AgentCore Runtime Inbound Authentication. This step is so that user/application can access agent/tool in AgentCore Runtime or AgentCore Gateway.&lt;/p&gt;

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

&lt;p&gt;Use this code to configure the AgentCore Runtime.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from bedrock_agentcore_starter_toolkit import Runtime
agentcore_runtime = Runtime()
region = "us-west-2"
agent_name = "gemini-mcp-server"

runtime = agentcore_runtime.configure(
    entrypoint="mcp_server.py",
    auto_create_execution_role=True,
    auto_create_ecr=True,
    requirements_file="requirements.txt",
    region=region,
    agent_name=agent_name,
    protocol="MCP",
    authorizer_configuration={
        "customJWTAuthorizer": {
            "allowedClients": [runtime_cognito_client_id],
            "discoveryUrl": f"https://cognito-idp.{region}.amazonaws.com/{runtime_cognito_pool_id}/.well-known/openid-configuration",
        }
    }
)
runtime
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explaining the above code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;from first row until second row means import and initialize AgentCore Runtime. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;agentcore_runtime.configure&lt;/code&gt; means configure the AgentCore Runtime with entry point (MCP server Python code), create IAM role for Runtime, create ECR image, requirements (install libraries), region and agent name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use this code to launch AI agent to AgentCore Runtime. Wait up to one minute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;launch_result = agentcore_runtime.launch()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq2h6xkpc00op89t0pp6.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%2Fjq2h6xkpc00op89t0pp6.PNG" alt="MCP Server" width="639" 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%2Fog51q5km4oedrhyqjayl.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%2Fog51q5km4oedrhyqjayl.PNG" alt="MCP Server" width="758" height="506"&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%2Fqiq1uujbsj61r0md7by3.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%2Fqiq1uujbsj61r0md7by3.PNG" alt="IAM Role" width="800" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. TROUBLESHOOTING / VERY IMPORTANT INFORMATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After AgentCore Runtime is available then invoke MCP server and get error like this screenshot below.&lt;/p&gt;

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

&lt;p&gt;Open CloudWatch Logs or AgentCore Observability to see what happened with this error.&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%2F1fy7p525ijmabbj7zqwl.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%2F1fy7p525ijmabbj7zqwl.PNG" alt="DynamoDB error" width="800" height="308"&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%2Ft61tt12olzurh5b1sab0.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%2Ft61tt12olzurh5b1sab0.PNG" alt="SNS error" width="800" height="282"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to Amazon Bedrock AgentCore -&amp;gt; Agent runtime then click your agent name that already created. Click "Observability dashboard" or "Cloudwatch logs" to see this error.&lt;/p&gt;

&lt;p&gt;This error is happened because DynamoDB and SNS action is not allowed in IAM role for Runtime.&lt;/p&gt;

&lt;p&gt;Go to Amazon Bedrock AgentCore -&amp;gt; Agent runtime then click your agent name that already created.&lt;/p&gt;

&lt;p&gt;Click "Version 1" then click IAM service role of Permissions (e.g. AmazonBedrockAgentCoreSDKRuntime-{region-name}-{random-number-letter}) like above screenshot.&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%2Fufwj4b998s4ja03g9e27.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%2Fufwj4b998s4ja03g9e27.PNG" alt="IAM policy" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click IAM policy name that related (e.g. BedrockAgentCoreRuntimeExecutionPolicy-{your-agent-name}) like above screenshot.&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%2F55oceequyw8svyvkn51w.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%2F55oceequyw8svyvkn51w.PNG" alt="AWS Secret Manager" width="718" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to AWS Secret Manager, click secret name then copy Secret ARN of Gemini API Key.&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%2F6n43edtdr34hahtfpkac.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%2F6n43edtdr34hahtfpkac.PNG" alt="Edit IAM policy" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add your Secret ARN of Gemini API Key in resource of "secretsManager:GetSecretValue" action with this code :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;arn:aws:secretsmanager:us-west-2:{aws_account_id}:secret:geminiapikey-{random-number-letter}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Then click Add new statement -&amp;gt; Write AWS services (S3, DynamoDB and SNS) -&amp;gt; Checklist All actions -&amp;gt; Add resource -&amp;gt; Click Next, click Save and and view the IAM policy after changing it.&lt;/p&gt;

&lt;p&gt;OR Edit permission in this IAM policy and write this permission after &lt;code&gt;Sid": "AwsJwtFederation&lt;/code&gt; row -&amp;gt; Click Next, click Save and view the IAM policy after changing it.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
    "Sid": "DynamoDB",
    "Effect": "Allow",
        "Action": [
        "dynamodb:*"
    ],
    "Resource": [
        "arn:aws:dynamodb:us-west-2:{aws_account_id}:table/*"
    ]
},
{
    "Sid": "AmazonSNS",
    "Effect": "Allow",
    "Action": [
        "sns:*"
    ],
    "Resource": [
        "*"
    ]
},
{
    "Sid": "S3",
    "Effect": "Allow",
    "Action": [
        "s3:*"
    ],
    "Resource": [
        "*"
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;D. AgentCore Gateway&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Based &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/gateway-outbound-auth.html" rel="noopener noreferrer"&gt;AgentCore Gateway documentation&lt;/a&gt;, MCP server target type only support OAuth (client credentials) or M2M (machine-to-machine) auth. Based &lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/latest/devguide/identity-idp-cognito.html" rel="noopener noreferrer"&gt;AgentCore Identity documentation&lt;/a&gt;, to using M2M auth need create a user pool, resource server, client credentials, and discovery URL configuration.&lt;/p&gt;

&lt;p&gt;Create AgentCore Identity for Runtime Outbound Auth. This step is so that agent/tool can access Gateway target such as MCP server, OpenAPI/REST API, API Gateway, Lambda function.&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%2F5zd7n3iqup7js2golrw0.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%2F5zd7n3iqup7js2golrw0.PNG" alt="Identity" width="800" height="277"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Create AgentCore Gateway using Gateway User Pool. This step is to integrate MCP server on AgentCore Runtime to AgentCore Gateway.&lt;/p&gt;

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

&lt;p&gt;Create MCP Server on AgentCore Runtime as a AgentCore Gateway target. This step is to invoke MCP server via Gateway target to Runtime.&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%2F84wqclj1ihpctdznqjqm.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%2F84wqclj1ihpctdznqjqm.PNG" alt="MCP Server target" width="718" height="601"&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%2Fa4ss3h0zkyq3gd7lfklu.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%2Fa4ss3h0zkyq3gd7lfklu.PNG" alt="Target detail" width="800" height="558"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Try invoke MCP Server using Langchain MCP Client.&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%2Fwrjq0qvwpyxj26gt5jxp.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%2Fwrjq0qvwpyxj26gt5jxp.PNG" alt="Invoke" width="800" height="324"&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%2Fdwyxxh15bna5m6uf1gay.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%2Fdwyxxh15bna5m6uf1gay.PNG" alt="DynamoDB table" width="612" height="322"&gt;&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqvx8fuqxvcs0qzp72b99.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%2Fqvx8fuqxvcs0qzp72b99.PNG" alt="2" width="598" height="310"&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%2Fphfgctr2ips3gow7rbis.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%2Fphfgctr2ips3gow7rbis.PNG" alt="3" width="655" height="300"&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%2Fhetu32mvx7jjq02wtjxh.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%2Fhetu32mvx7jjq02wtjxh.PNG" alt="DynamoDB table" width="800" height="489"&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%2F3iqn42bhfp8tocdiy2gm.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%2F3iqn42bhfp8tocdiy2gm.PNG" alt="4" width="704" height="309"&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%2Fmch8z9tpg9xoal0zy05g.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%2Fmch8z9tpg9xoal0zy05g.PNG" alt="5" width="733" height="306"&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%2Fi65oi84czqch8zzgc3ji.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%2Fi65oi84czqch8zzgc3ji.PNG" alt="6" width="603" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; Amazon Bedrock AgentCore Runtime can create MCP server and AgentCore Gateway can integrate between MCP server to gateway.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langchain/overview" rel="noopener noreferrer"&gt;Langchain documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/" rel="noopener noreferrer"&gt;Google Gemini documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GITHUB REPOSITORY :&lt;/strong&gt; &lt;a href="https://github.com/budionosanai/amazon-bedrock-agentcore-one-to-one/tree/main/mcp-server" rel="noopener noreferrer"&gt;https://github.com/budionosanai/amazon-bedrock-agentcore-one-to-one/tree/main/mcp-server&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
      <category>mcp</category>
      <category>aws</category>
    </item>
    <item>
      <title>Amazon Bedrock AgentCore : Runtime with Langgraph, CrewAI and Google Gemini</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Tue, 06 Jan 2026 04:55:28 +0000</pubDate>
      <link>https://forem.com/budionosan/amazon-bedrock-agentcore-runtime-with-langgraph-crewai-and-google-gemini-57l5</link>
      <guid>https://forem.com/budionosan/amazon-bedrock-agentcore-runtime-with-langgraph-crewai-and-google-gemini-57l5</guid>
      <description>&lt;p&gt;&lt;a href="https://aws.amazon.com/bedrock/agentcore" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore&lt;/a&gt; is a agentic platform for building, deploying, and operating agents using any framework and any foundation model.&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%2Fx5r2ashy88h3zv0a0mxd.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%2Fx5r2ashy88h3zv0a0mxd.PNG" alt="AgentCore" width="800" height="618"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;AgentCore Service&lt;/th&gt;
&lt;th&gt;Description&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Runtime&lt;/td&gt;
&lt;td&gt;Serverless agent and tools such as MCP and A2A deployment.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Gateway&lt;/td&gt;
&lt;td&gt;Connect agent to services such as Lambda function and API that converted to MCP compatible.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Identity&lt;/td&gt;
&lt;td&gt;Identity and access management for agent and tool.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Memory&lt;/td&gt;
&lt;td&gt;Store context across interaction both short-term and long-term.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Browser&lt;/td&gt;
&lt;td&gt;Browser runtime that interact with web app.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Code Interpreter&lt;/td&gt;
&lt;td&gt;Execute code across multiple languages such as Python.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Observability&lt;/td&gt;
&lt;td&gt;Monitoring agent and tools in Amazon CloudWatch.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Evaluation&lt;/td&gt;
&lt;td&gt;Improve agent quality and performance.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;AgentCore Policy&lt;/td&gt;
&lt;td&gt;Control agent and tool interaction.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;However, I create 3 blog only for explain how to AgentCore works.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AgentCore Runtime using Langgraph, CrewAI, Google Gemini and AgentCore Observability (this blog).&lt;/li&gt;
&lt;li&gt;MCP Server on AgentCore Runtime and AgentCore Gateway &lt;a href="https://dev.to/budionosan/amazon-bedrock-agentcore-mcp-server-on-agentcore-runtime-and-agentcore-gateway-el9"&gt;this blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;AgentCore Identity and AgentCore Memory.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;FLASHBACK :&lt;/strong&gt; I have already created AI candidate screening agent using Langgraph, CrewAI and Amazon Nova on Amazon Bedrock in &lt;a href="https://github.com/budionosanai/amazon-bedrock-ai-agent" rel="noopener noreferrer"&gt;my Github repository&lt;/a&gt;. I think it is time to deploy this AI agent to Amazon Bedrock AgentCore Runtime with Google Gemini.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;AWS account (or AWS credentials), you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Google Gemini account, you can sign up/sign in &lt;a href="https://aistudio.google.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Langgraph and CrewAI.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;The AWS services used by this AI agent such as :&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Amazon S3 : upload file from local to S3 and download file from S3 to AI agent processes.&lt;/li&gt;
&lt;li&gt;AWS Secret Manager : store Gemini API Key and LLM inference in AI agent.&lt;/li&gt;
&lt;li&gt;AgentCore Runtime and AgentCore Observability (or CloudWatch Logs).&lt;/li&gt;
&lt;li&gt;AgentCore Starter Toolkit : quickly configure and deploy AI agent with several AWS services such as Amazon ECR, AWS CodeBuild, and AWS IAM.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Creating Amazon S3 bucket and store Gemini API key in AWS Secret Manager.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use this code to create a Amazon S3 bucket.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;s3 = boto3.client('s3', 'us-west-2')
s3.create_bucket(
    Bucket="screening-candidate",
    CreateBucketConfiguration={
        'LocationConstraint': 'us-west-2'
    }
)
print("This bucket is now available.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Use this code to create Gemini API Key in AWS Secret Manager.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apikey = boto3.client('secretsmanager', 'us-west-2')
secret_dict = {"GEMINI_API_KEY": gemini}
response = apikey.create_secret(
    Name=secret_name,
    Description="Gemini API Key",
    SecretString=json.dumps(secret_dict)
)
print("Gemini API Key is now stored.")
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

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

&lt;p&gt;&lt;strong&gt;B. Langgraph and CrewAI Development&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use this code to packaging AgentCore Starter Toolkit with AI agent code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from bedrock_agentcore.runtime import BedrockAgentCoreApp
app = BedrockAgentCoreApp()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explaining the above code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;from bedrock_agentcore.runtime import BedrockAgentCoreApp&lt;/code&gt; means import runtime.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;app = BedrockAgentCoreApp()&lt;/code&gt; means initialize runtime.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use this code to retrieve Gemini API Key from AWS Secret Manager.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;secretmanager = boto3.client('secretsmanager', region_name="us-west-2")
response = secretmanager.get_secret_value(SecretId='geminiapikey')
secret_json = json.loads(response["SecretString"])
api_key = secret_json["GEMINI_API_KEY"]
llm = init_chat_model("google_genai:gemini-2.5-flash", google_api_key=api_key)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explaining the above code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;from first row until four row means retrieve Gemini API key from AWS Secret Manager.&lt;/li&gt;
&lt;li&gt;last row means initialize Langgraph/Langchain chat model using Gemini 2.5 Flash with Gemini API Key.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This structure is very important for creating AI agent using Langgraph or CrewAI.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Candidate upload CV PDF file then extract CV PDF file.&lt;/li&gt;
&lt;li&gt;Compare and Match between Job Requirements and CV.&lt;/li&gt;
&lt;li&gt;Score to the Next Step of the Recruitment Process.&lt;/li&gt;
&lt;li&gt;Create Rejection or Interview Email.&lt;/li&gt;
&lt;li&gt;Create Interview Question for candidate who pass the interview session.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Use this code to configure the AgentCore Runtime.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from bedrock_agentcore_starter_toolkit import Runtime
agentcore_runtime = Runtime()
region = "us-west-2"
agent_name = ... # gemini_Langgraph or gemini_crewai

response = agentcore_runtime.configure(
    entrypoint= ... # langgraph or crewai
    auto_create_execution_role=True,
    auto_create_ecr=True,
    requirements_file="/runtime/requirements.txt",
    region=region,
    agent_name=agent_name
)
response
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Explaining the above code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;from first row until second row means import and initialize AgentCore Runtime. &lt;/li&gt;
&lt;li&gt;
&lt;code&gt;agentcore_runtime.configure&lt;/code&gt; means configure the AgentCore Runtime with entry point (AI agent Python code), create IAM role for Runtime, create ECR image, requirements (install libraries), region and agent name.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Use this code to launch AI agent to AgentCore Runtime. Wait up to one minute.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;launch_result = agentcore_runtime.launch()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;C. TROUBLESHOOTING / VERY IMPORTANT INFORMATION&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After AgentCore Runtime is available then invoke AI agent and get error like this screenshot below.&lt;/p&gt;

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

&lt;p&gt;Open CloudWatch Logs or AgentCore Observability to see what happened with this error.&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%2Fqekx7g78hk1nemv65vsn.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%2Fqekx7g78hk1nemv65vsn.PNG" alt="Error" width="800" height="260"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to Amazon Bedrock AgentCore -&amp;gt; Agent runtime then click your agent name that already created. Click "Observability dashboard" or "Cloudwatch logs" to see this error.&lt;/p&gt;

&lt;p&gt;This error is happened because &lt;code&gt;secretsmanager:GetSecretValue&lt;/code&gt; action is not allowed in IAM role for Runtime.&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%2F9413ywu2b4p14mbibzod.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%2F9413ywu2b4p14mbibzod.PNG" alt="IAM role" width="800" height="677"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to Amazon Bedrock AgentCore -&amp;gt; Agent runtime then click your agent name that already created.&lt;/p&gt;

&lt;p&gt;Click "Version 1" then click IAM service role of Permissions (e.g. AmazonBedrockAgentCoreSDKRuntime-{region-name}-{random-number-letter}) like above screenshot.&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%2Fufwj4b998s4ja03g9e27.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%2Fufwj4b998s4ja03g9e27.PNG" alt="IAM policy" width="800" height="255"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click IAM policy name that related (e.g. BedrockAgentCoreRuntimeExecutionPolicy-{your-agent-name}) like above screenshot.&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%2F55oceequyw8svyvkn51w.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%2F55oceequyw8svyvkn51w.PNG" alt="AWS Secret Manager" width="718" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to AWS Secret Manager, click secret name then copy Secret ARN of Gemini API Key.&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%2F6n43edtdr34hahtfpkac.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%2F6n43edtdr34hahtfpkac.PNG" alt="Edit IAM policy" width="800" height="173"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Add your Secret ARN of Gemini API Key in resource of "secretsManager:GetSecretValue" action with this code :&lt;/p&gt;

&lt;p&gt;&lt;code&gt;arn:aws:secretsmanager:us-west-2:{aws_account_id}:secret:geminiapikey-{random-number-letter}&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Add S3 access action like this screenshot below :&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fccop6on5jujov6czu2hf.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%2Fccop6on5jujov6czu2hf.PNG" alt="Add service" width="372" height="464"&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%2Ftqs6ifm1a78m98uxg5hp.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%2Ftqs6ifm1a78m98uxg5hp.PNG" alt="Check action" width="373" height="651"&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%2Fdkyirbel9vmw2kg7ox4b.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%2Fdkyirbel9vmw2kg7ox4b.PNG" alt="Add resource" width="702" height="420"&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%2Fpzw73kr7yfl7anxuc6zh.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%2Fpzw73kr7yfl7anxuc6zh.PNG" alt="S3 action" width="354" height="276"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Next, click Save, and view the IAM policy after changing it.&lt;/p&gt;

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

&lt;p&gt;Try invoke agent runtime again.&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%2Fq21xcbfxp8h6xl98dfwj.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%2Fq21xcbfxp8h6xl98dfwj.PNG" alt="Invoke agent" width="800" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open AgentCore Observability or CloudWatch Logs. I prefer open AgentCore Observability like this screenshot and invocation completed successfully.&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%2Fk86cixufdx00cj5o621j.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%2Fk86cixufdx00cj5o621j.PNG" alt="Observability" width="800" height="386"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D. AgentCore Observability&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Open AgentCore Runtime -&amp;gt; Agent runtime then click your agent name that already created. I have already created one AI agent using Langgraph and one using CrewAI. For this tutorial, I am using Langgraph because observability of Langgraph and CrewAI is the same.&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%2Fe6yfc3o5mkzwvruvhxaw.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%2Fe6yfc3o5mkzwvruvhxaw.PNG" alt="Langgraph" width="800" height="294"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click View dashboard.&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%2F7qxkco4h9p94v0xdb6tb.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%2F7qxkco4h9p94v0xdb6tb.PNG" alt="Langgraph observability" width="800" height="216"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click Sessions and click session ID.&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%2Fjqmiatmik407dkdzfbpy.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%2Fjqmiatmik407dkdzfbpy.PNG" alt="Session" width="800" height="348"&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%2F3m9lso4f82mpyqxauje7.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%2F3m9lso4f82mpyqxauje7.PNG" alt="Session summary" width="800" height="335"&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%2Fk4tq52tx6a0yt11bzdgx.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%2Fk4tq52tx6a0yt11bzdgx.PNG" alt="Trace" width="800" height="228"&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%2F99hj8pgmxpvungofbwtg.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%2F99hj8pgmxpvungofbwtg.PNG" alt="One of trace" width="800" height="439"&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%2Fjyfr6o54d2kldqrystwo.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%2Fjyfr6o54d2kldqrystwo.PNG" alt="Observability 1" width="800" height="233"&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%2F8kcnzkpk1q84nxx50z5t.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%2F8kcnzkpk1q84nxx50z5t.PNG" alt="Observability 2" width="800" height="265"&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%2Foy649eqf64wi1csuj8oe.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%2Foy649eqf64wi1csuj8oe.PNG" alt="Observability 3" width="800" height="227"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Click "CloudWatch logs" in Agent runtime that automatically open a new tab and see log events like this screenshot.&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%2Fp115t0o5dvcd4vdzfx5c.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%2Fp115t0o5dvcd4vdzfx5c.PNG" alt="CloudWatch Logs" width="800" height="397"&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%2Fhk1cakluurd59lg50v38.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%2Fhk1cakluurd59lg50v38.PNG" alt="Log events" width="800" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open Amazon ECR (Elastic Container Registry) console then click image of agent runtime like this screenshot.&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%2Fx3cu2u966j2eh2gf82cs.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%2Fx3cu2u966j2eh2gf82cs.PNG" alt="ECR" width="800" height="187"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Open AWS CodeBuild console then click build of agent runtime like this screenshot.&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%2Fznw9d5rs4pvbr8dg05oi.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%2Fznw9d5rs4pvbr8dg05oi.PNG" alt="Build" width="800" height="153"&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%2F6z2cb4j8m9ce4gokyz3p.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%2F6z2cb4j8m9ce4gokyz3p.PNG" alt="Build process" width="683" height="626"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; Amazon Bedrock AgentCore Runtime can handle AI agent request while AgentCore Observability can help monitoring session and trace of AI agent. I using AWS CDK for infrastructure as code to improve my AI engineering skill. Stay tune!&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://docs.aws.amazon.com/bedrock-agentcore/" rel="noopener noreferrer"&gt;Amazon Bedrock AgentCore documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.crewai.com/" rel="noopener noreferrer"&gt;CrewAI documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://docs.langchain.com/oss/python/langgraph/" rel="noopener noreferrer"&gt;Langgraph documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://ai.google.dev/gemini-api/docs/" rel="noopener noreferrer"&gt;Google Gemini documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;GITHUB REPOSITORY :&lt;/strong&gt; &lt;a href="https://github.com/budionosanai/amazon-bedrock-agentcore-one-to-one/tree/main/runtime" rel="noopener noreferrer"&gt;https://github.com/budionosanai/amazon-bedrock-agentcore-one-to-one/tree/main/runtime&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
      <category>agentcore</category>
      <category>langgraph</category>
      <category>crewai</category>
      <category>gemini</category>
    </item>
    <item>
      <title>Amazon Quick Suite : Quick Sight</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Sat, 29 Nov 2025 03:05:08 +0000</pubDate>
      <link>https://forem.com/budionosan/amazon-quick-suite-quick-sight-5d9a</link>
      <guid>https://forem.com/budionosan/amazon-quick-suite-quick-sight-5d9a</guid>
      <description>&lt;p&gt;&lt;a href="https://aws.amazon.com/quicksuite/quicksight" rel="noopener noreferrer"&gt;Amazon Quick Sight&lt;/a&gt; is business intelligence AI-generated powered platform that can create data visualization from many more data source, create dashboard, story, scenario, topic.&lt;/p&gt;

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

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

&lt;ol&gt;
&lt;li&gt;AWS account, you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Sales dataset, you can see &lt;a href="https://ws-assets-prod-iad-r-iad-ed304a55c2ca1aee.s3.us-east-1.amazonaws.com/cd8ebba2-2ef8-431a-8f72-ca7f6761713d/datasets/SaaS-Sales.csv" rel="noopener noreferrer"&gt;this link&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Quick Sight - Dataset&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Select "Datasets" in Quick Sight @ Quick Suite console. Click "Create dataset", click "Upload a file", upload sales dataset then click "Visualize". Select "Interactive sheet" and click "Create" to create analyses based sales dataset.&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%2Fvlpla7559eqola7xq17g.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%2Fvlpla7559eqola7xq17g.PNG" alt="Visualize" width="677" height="280"&gt;&lt;/a&gt;&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%2Fz2qhrwtoxpi6pxldm7wz.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%2Fz2qhrwtoxpi6pxldm7wz.PNG" alt="Sheet" width="693" height="488"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Quick Sight - Analyses&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the "Analyses", create several analysis based sales dataset.&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%2Fmwpcln7ewyz6jxfa325v.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%2Fmwpcln7ewyz6jxfa325v.PNG" alt="First analyses" width="800" height="397"&gt;&lt;/a&gt;&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%2Fck59ahbtnkh4d21mkgfz.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%2Fck59ahbtnkh4d21mkgfz.PNG" alt="Second analyses" width="800" height="453"&gt;&lt;/a&gt;&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%2F4yzmqilwn58izm8ygo11.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%2F4yzmqilwn58izm8ygo11.PNG" alt="Third analyses" width="800" height="221"&gt;&lt;/a&gt;&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%2Flssdjfg63e8b7z6ttksk.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%2Flssdjfg63e8b7z6ttksk.PNG" alt="4th analyses" width="800" height="268"&gt;&lt;/a&gt;&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%2Fx6xn5lxf6oiykr6rs20o.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%2Fx6xn5lxf6oiykr6rs20o.PNG" alt="5th analyses" width="800" height="276"&gt;&lt;/a&gt;&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%2Flyhdwdl1k9uzit3ft5pf.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%2Flyhdwdl1k9uzit3ft5pf.PNG" alt="6th analyses" width="800" height="266"&gt;&lt;/a&gt;&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%2F1ykx4jhburfut7q17gsd.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%2F1ykx4jhburfut7q17gsd.PNG" alt="7th analyses" width="800" height="267"&gt;&lt;/a&gt;&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%2F2e5zfuegvynfwy53pqc8.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%2F2e5zfuegvynfwy53pqc8.PNG" alt="8th analyses" width="800" height="267"&gt;&lt;/a&gt;&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%2Fp63p3erjiaev5jkoflwd.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%2Fp63p3erjiaev5jkoflwd.PNG" alt="9th analyses" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, several analyses are made using AI-generated (Build button) such as :&lt;br&gt;
Top 3 products based highest sales.&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%2Fjecpd0a9xejnvq9l150m.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%2Fjecpd0a9xejnvq9l150m.PNG" alt="Top 3 products based highest sales" width="472" height="510"&gt;&lt;/a&gt;&lt;br&gt;
Top 3 products based highest profit.&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%2Fhtooo37189hgfh79ij2i.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%2Fhtooo37189hgfh79ij2i.PNG" alt="Top 3 products based highest profit" width="470" height="429"&gt;&lt;/a&gt;&lt;br&gt;
Top 3 countries based highest sales.&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%2Fexzalyjd75gnp5tm4a1k.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%2Fexzalyjd75gnp5tm4a1k.PNG" alt="Top 3 countries based highest sales" width="474" height="488"&gt;&lt;/a&gt;&lt;br&gt;
Top 3 countries based highest profit.&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%2Fk97vfa9ywmyiarwxdc9p.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%2Fk97vfa9ywmyiarwxdc9p.PNG" alt="Top 3 countries based highest profit" width="467" height="490"&gt;&lt;/a&gt;&lt;br&gt;
Top 3 customers based highest sales.&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%2Fi17q9d5b9duuke8apojd.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%2Fi17q9d5b9duuke8apojd.PNG" alt="Top 3 customers based highest sales" width="468" height="494"&gt;&lt;/a&gt;&lt;br&gt;
Top 3 customers based highest profit.&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%2Fdry1npcnso2nws1jhj8r.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%2Fdry1npcnso2nws1jhj8r.PNG" alt="Top 3 customers based highest profit" width="467" height="425"&gt;&lt;/a&gt;&lt;br&gt;
% of sales coming from discounts.&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%2Fymly8ricps6ktsdvlndm.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%2Fymly8ricps6ktsdvlndm.PNG" alt="% of sales coming from discounts" width="470" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After analyses process is done, click "Publish" to create dashboard. Select new dashboard, write dashboard name, select sheets (can select several sheets or all sheets) then click "Publish dashboard".&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%2F5r8qloxnc0lm9uadt2jo.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%2F5r8qloxnc0lm9uadt2jo.PNG" alt="Click Publish" width="800" height="54"&gt;&lt;/a&gt;&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%2Fgej4v2oteogpmzpnfqa0.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%2Fgej4v2oteogpmzpnfqa0.PNG" alt="Publish dashboard" width="698" height="781"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;C. Quick Sight - Dashboard&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This dashboard is derived from analysis that has already been created with same visualizations unchanged.&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%2Furrnw82yqnh7mx3ju5o7.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%2Furrnw82yqnh7mx3ju5o7.PNG" alt="First dashboard" width="800" height="362"&gt;&lt;/a&gt;&lt;br&gt;
Click "Create". If want to create presentation-based or page-based story, select "Story" and if want to create insight of data, select "Scenario".&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%2Fztfns77d4ueomi5nkr3p.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%2Fztfns77d4ueomi5nkr3p.PNG" alt="Select dashboard" width="800" height="307"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;D. Quick Sight - Stories&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write description story that you want, select several or all visuals from analyses or dashboard and click "Build".&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%2Fdi5443fjow8k4nlxlkl1.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%2Fdi5443fjow8k4nlxlkl1.PNG" alt="Story" width="465" height="788"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The story is now available automatically scrollable-page-based format.&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%2Fouazwjtm25nab412day0.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%2Fouazwjtm25nab412day0.PNG" alt="Scroll page" width="800" height="423"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Change from scrollable-page-based to slideshow-based format. Total of slide is 15 slides.&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%2F1d73m0z03if6sb8enl9x.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%2F1d73m0z03if6sb8enl9x.PNG" alt="Slideshow" width="800" height="381"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E. Quick Sight - Scenario&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write description problem that need to solve, select data from Quick Sight dashboard that already created then click "Start analysis".&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%2Ffgf98z7a1inxrzszzmr4.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%2Ffgf98z7a1inxrzszzmr4.PNG" alt="Start analysis" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After analysis process is done, available several questions or threads. You can choose question or write question that you needs.&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%2Fpkg2mfv0n9g5zgp8ljmu.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%2Fpkg2mfv0n9g5zgp8ljmu.PNG" alt="Process" width="720" height="706"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This scenario has 3 questions or threads that explain about sales and profit.&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%2Fneaxd70uwnmiviuyg78v.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%2Fneaxd70uwnmiviuyg78v.PNG" alt="Scenario" width="800" height="283"&gt;&lt;/a&gt;&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%2Fl24xte16yyfbc19bdui3.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%2Fl24xte16yyfbc19bdui3.PNG" alt="First scenario" width="734" height="732"&gt;&lt;/a&gt;&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%2Fg9ptp8l2ffpwocfjuxqf.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%2Fg9ptp8l2ffpwocfjuxqf.PNG" alt="Second scenario" width="800" height="635"&gt;&lt;/a&gt;&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%2Ftq8nf5atc5kh4o2qwloh.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%2Ftq8nf5atc5kh4o2qwloh.PNG" alt="Third scenario" width="800" height="615"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; Amazon Quick Sight can help create analyses from dataset with several visualization and AI-generated visualization, create dashboard for sharing, create story for presentation to business user and create scenario to get insight from dashboard.&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Amazon Quick Suite : Quick Flow and Quick Research</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Fri, 28 Nov 2025 12:32:56 +0000</pubDate>
      <link>https://forem.com/budionosan/amazon-quick-suite-quick-flow-and-quick-research-15li</link>
      <guid>https://forem.com/budionosan/amazon-quick-suite-quick-flow-and-quick-research-15li</guid>
      <description>&lt;p&gt;&lt;strong&gt;REQUIREMENTS :&lt;/strong&gt; &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AWS account, you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Amazon Quick Suite : Integration and Extension blog, you can see &lt;a href="https://dev.to/budionosan/amazon-quick-suite-integration-and-extension-2jj2"&gt;this blog&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;A. Amazon Quick Suite : Quick Flow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PROBLEM :&lt;/strong&gt; Manual check CV screening need more time, human bias (name, gender, age) then unfair decision and CV format are different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOLUTION :&lt;/strong&gt; Automated CV screening system that extracts candidate information, scores against job requirements, and conditionally sends interview questions to Slack and interview email to Gmail OR rejection email based on scoring criteria.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Open "Flow" in the Quick Suite console. Select "Generate" or "Create a blank flow". Use "Generate" if creating a flow using prompt and use "Create a blank flow" if creating a flow from scratch. In this tutorial, click "Generate". Wait a few seconds to generate flow.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Upload file PDF only, extract CV PDF, compare and match between job requirements and CV extracted. 
Then result of next step must pass 7 of 10 and create condition.
If result are 7 or more of 10, create 5 interview question based CV extracted and 2 interview question based 
leadership note, 
send all interview question to Slack "team-channel" channel then send email simple body about interview 
date/time is 3 days after result is available to candidate that available in the CV extracted.
If result are less 7 of 10, create thank you for your applications in the subject, very simple explanation 
in the body and send email to candidate email that available in the CV extracted.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;The result of generating flow using prompt are shown here. The input for this flow uses file to upload a CV PDF file and text to enter job requirements and leadership notes&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%2F0962dg1gp6dsbbybx05u.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%2F0962dg1gp6dsbbybx05u.PNG" alt="Input" width="800" height="397"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The output of extract CV information AND compare and score CV match uses AI-generated response.&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%2Fn3jfgm86i8gwhkrmdr7y.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%2Fn3jfgm86i8gwhkrmdr7y.PNG" alt="Response" width="800" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This flow have conditional processing that uses reasoning instruction to understand if-else condition based scenario if score is 7 or more out of 10 process with interview process and if less than 7 send rejection email. The action of send interview question to Slack channel, send interview invitation email and send rejection email uses application actions/integration that already created.&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%2Fmurxypduc1sjcgbxzn15.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%2Fmurxypduc1sjcgbxzn15.PNG" alt="Condition" width="800" height="395"&gt;&lt;/a&gt;&lt;br&gt;
Amazon Quick Suite - Flow have several component such as in this screenshot.&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%2Fukwvu065z53kxgb81req.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%2Fukwvu065z53kxgb81req.PNG" alt="Flow component" width="697" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next to "Editor" and click "Run mode". Testing upload FIRST CV PDF file, write job requirements and leadership notes then click "Start".&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Job Requirements :

Minimum Bachelor's degree in Computer Science, Data Science, Artificial Intelligence, or a related field. 
Minimum 2 years of experience in AI/ML development. In-depth understanding of machine learning, deep learning, NLP, and recommendation systems. 
Proficiency in Python programming languages ​​(TensorFlow, PyTorch, Scikit-learn, HuggingFace). 
Experience in data preprocessing, feature engineering, and model deployment. 
Experience with containerization and orchestration (Docker, Kubernetes). 
Understanding of MLOps (CI/CD for ML), ML pipelines, and model monitoring concepts. 
Experience using cloud AI services (Amazon Sagemaker, GCP Vertex AI, or Azure ML) is a plus.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Leadership Notes :

Lead by Example : Be honest, reliable, and show respect to everyone. 
Communicate Clearly : Keep messages simple and open and listen before deciding. 
Support the Team : Help others grow and learn and appreciate good work. 
Focus on Results : Set clear goals and track progress and fix problems, not blame people. 
Encourage Innovation : Allow new ideas and experiments and learn from mistakes. 
Customer First : Think about how your work helps users. 
Keep Learning : Stay updated with technology and leadership skills.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;Wait a few seconds to extract CV information AND compare and score CV match.&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%2F9gins4l1jaoc4vsxpl3z.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%2F9gins4l1jaoc4vsxpl3z.PNG" alt="Extract CV" width="800" height="271"&gt;&lt;/a&gt;&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%2Fg7ndh74tmzkcnlk3b7dh.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%2Fg7ndh74tmzkcnlk3b7dh.PNG" alt="Compare and score CV" width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The conditional processing is thinking by evaluating score condition and having to know what action to take next. In this FIRST flow, the result of conditional processing is send rejection which means the next action is send rejection email. Then human review is needed and click "Submit".&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%2Fk5naqvmytmliaxmgh73c.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%2Fk5naqvmytmliaxmgh73c.PNG" alt="Evaluate" width="800" height="389"&gt;&lt;/a&gt;&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%2F9bvmmm5wxhbvod7w2jc2.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%2F9bvmmm5wxhbvod7w2jc2.PNG" alt="Action" width="800" height="349"&gt;&lt;/a&gt;&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%2Fb2kgzus166yxxj2eot2z.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%2Fb2kgzus166yxxj2eot2z.PNG" alt="Submitted" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to Gmail account, check and see new inbox like this. It means Gmail send rejection email action is successfully.&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%2Fgb5sg4a4u4e3l5h3ju78.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%2Fgb5sg4a4u4e3l5h3ju78.PNG" alt="Rejection email" width="800" height="208"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next to "Run mode" and click "New run". Testing upload SECOND CV PDF file, write job requirements and leadership notes then click "Start". Wait a few seconds to extract CV information AND compare and score CV match.&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%2F1nmgdik9okrmx9tk0a7e.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%2F1nmgdik9okrmx9tk0a7e.PNG" alt="Second CV" width="800" height="612"&gt;&lt;/a&gt;&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%2Fo6dweu9u250slvnfgy8t.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%2Fo6dweu9u250slvnfgy8t.PNG" alt="Second CV" width="800" height="408"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The conditional processing is thinking by evaluating score condition and having to know what action to take next. In this SECOND flow, the result of conditional processing is process to interview which means the next action is send interview invitation email and send interview question. Then human review is needed and click "Submit".&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%2Fca2t8b7d2147q6sjag0e.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%2Fca2t8b7d2147q6sjag0e.PNG" alt="Process to interview" width="800" height="396"&gt;&lt;/a&gt;&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%2F8wkgv1v1vpbtizug4253.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%2F8wkgv1v1vpbtizug4253.PNG" alt="Interview question" width="800" height="379"&gt;&lt;/a&gt;&lt;br&gt;
The send rejection email is not have "Submit" button means this action do not needed.&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%2Fci8ts6s4kwdj3wjfklxj.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%2Fci8ts6s4kwdj3wjfklxj.PNG" alt="Means" width="800" height="487"&gt;&lt;/a&gt;&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%2Fi0m4w2xykxxj969ps93s.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%2Fi0m4w2xykxxj969ps93s.PNG" alt="Two send action" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to Gmail account, check and see new inbox like this. It means Gmail send interview invitation email action is successfully.&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%2F2i2ef5j60vltjbhgqd2g.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%2F2i2ef5j60vltjbhgqd2g.PNG" alt="Invitation email" width="800" height="254"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Go to Slack channel in Slack account, check and see new message like this. It means Slack send message channel (send interview question) action is successfully.&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%2Fx4x8ldefnbsf0z1bulg3.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%2Fx4x8ldefnbsf0z1bulg3.PNG" alt="Slack1" width="800" height="345"&gt;&lt;/a&gt;&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%2Fn9mzsxcz92xkj3wv0bw8.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%2Fn9mzsxcz92xkj3wv0bw8.PNG" alt="Slack2" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; After using Amazon Quick Suite - Flow with several components such as AI-generated response, action/integration and reasoning instruction, the impacts include focusing on interview that can deepen candidate, saving time, increasing recruitment efficiency, reducing bias during initial selection and hiring candidate faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B. Amazon Quick Suite : Quick Research&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PROBLEM :&lt;/strong&gt; Need days, weeks, or months to research, being confused about how to write research note that can share important information and opening more websites for research is also confused.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOLUTION :&lt;/strong&gt; Using Quick Research and company document file to create research plan, full research and summaries of full research.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Open "Research" in the Quick Suite console. Write research objective, enable web search, upload file such as company document file then click "Create plan". Wait a few seconds to generate research plan.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;We are a worldwide IT consulting company focused on AI technologies such as generative AI.
Plan and explain AI technology developments since January 2023 until now for decision-making report which will be reported to C-level directors.
We focus on emerging AI technology developments, such as agentic AI, physical AI, and new AI technology that very never heard and next-generation.
The result is a technology stack for AI technology development (must be compared and explained), business side including ROI (return on investment), AI trends and predictions through 2030.
Use the document-based file upload and web search for this detailed and complex research.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



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

&lt;p&gt;After research plan are is available, can edit or revise plan based needs. Click "Start researching" if don't need to revise the plan again. Wait about 30-60 minutes to generate full research.&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%2Fxk8hk3ugvnwbb58z5aqg.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%2Fxk8hk3ugvnwbb58z5aqg.PNG" alt="Plan" width="800" height="314"&gt;&lt;/a&gt;&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%2Fgkn9773e2uxbyfr9nii9.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%2Fgkn9773e2uxbyfr9nii9.PNG" alt="Plan" width="800" height="345"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;After full research are is available, can add comment or highlight to make sure this research better. Click "Summarize" to create summarize of full research. &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%2Fc66ul4o6bvb6h5nldy2q.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%2Fc66ul4o6bvb6h5nldy2q.PNG" alt="Research" width="800" height="298"&gt;&lt;/a&gt;&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%2Fpnbn5pjyv9scf9jzxc2t.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%2Fpnbn5pjyv9scf9jzxc2t.PNG" alt="Research" width="800" height="283"&gt;&lt;/a&gt;&lt;br&gt;
The research summary can be downloaded in PDF or Word format.&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%2Fdtw3zfc98t7uuyidvwwi.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%2Fdtw3zfc98t7uuyidvwwi.PNG" alt="Summary of research" width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; After using Amazon Quick Suite - Research, the impacts include from first step to last step only need one hour to create research plan, full research and summarize of full research without confused.&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>tutorial</category>
      <category>automation</category>
      <category>aws</category>
    </item>
    <item>
      <title>Amazon Quick Suite : Integration and Extension</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Fri, 28 Nov 2025 07:12:56 +0000</pubDate>
      <link>https://forem.com/budionosan/amazon-quick-suite-integration-and-extension-2jj2</link>
      <guid>https://forem.com/budionosan/amazon-quick-suite-integration-and-extension-2jj2</guid>
      <description>&lt;p&gt;&lt;a href="https://aws.amazon.com/quicksuite" rel="noopener noreferrer"&gt;Amazon Quick Suite&lt;/a&gt; is a generative AI-based business intelligence platform that makes it easy to analysis data, create visualizations, automate workflows, and collaborate across dataset.&lt;/p&gt;

&lt;p&gt;Amazon Quick Suite have five integrated capabilities that work together:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Amazon Quick Sight for data visualization.&lt;/li&gt;
&lt;li&gt;Amazon Quick Flows for workflow automation.&lt;/li&gt;
&lt;li&gt;Amazon Quick Automate for process optimization.&lt;/li&gt;
&lt;li&gt;Amazon Quick Index for data discovery.&lt;/li&gt;
&lt;li&gt;Amazon Quick Research for comprehensive analysis.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;However, I create 3 blog only for explain how to Amazon Quick Suite works.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Amazon Quick Suite - Integration and Extension (this blog).&lt;/li&gt;
&lt;li&gt;Amazon Quick Suite - Flows and Research &lt;a href="https://dev.to/budionosan/amazon-quick-suite-quick-flow-and-quick-research-15li"&gt;this blog&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Amazon Quick Suite - Quick Sight &lt;a href="https://dev.to/budionosan/amazon-quick-suite-quick-sight-5d9a"&gt;this blog&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For my Amazon Quick Automate blog is coming soon...&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;AWS account, you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Zapier account for MCP (Model Context Protocol), you can sign up/sign in &lt;a href="https://zapier.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Slack account, you can sign up/sign in &lt;a href="https://slack.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Gmail account, you can sign up/sign in &lt;a href="https://mail.google.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A. Zapier MCP (Model Context Protocol)&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;I use Zapier because Zapier and Amazon Quick Suite support MCP. Open your &lt;a href="https://mcp.zapier.com" rel="noopener noreferrer"&gt;Zapier MCP website&lt;/a&gt;. Create MCP server with click "+ New MCP Server".&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%2F50wvo418ujwk38eoegnh.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%2F50wvo418ujwk38eoegnh.PNG" alt="Zapier MCP" width="480" height="281"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select "Other" in the MCP Client, write MCP name "Amazon Quick Suite MCP Server" and click "Create MCP Server".&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%2Felpqkpfa55s2bugwkk0g.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%2Felpqkpfa55s2bugwkk0g.PNG" alt="Create MCP" width="669" height="430"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click "+ Add tool" in the Tools. The tools used in this tutorial are Slack to send message to channel and Gmail to send email.&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%2F2s5i8g5818os9cpbh9nf.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%2F2s5i8g5818os9cpbh9nf.PNG" alt="Add tools" width="800" height="302"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Click "Gmail" then click "Send Email". Connect your Gmail account. After your Gmail account is connected, click "Save".&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%2F4bg26rdd9m9c0yqdt72y.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%2F4bg26rdd9m9c0yqdt72y.jpg" alt="Gmail" width="800" height="667"&gt;&lt;/a&gt;&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%2Fpcqfcbk9xxsnvyu3gfsm.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%2Fpcqfcbk9xxsnvyu3gfsm.jpg" alt="Send email action" width="800" height="672"&gt;&lt;/a&gt;&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%2Ff4ss3zazy2ey9fka6m2p.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%2Ff4ss3zazy2ey9fka6m2p.jpg" alt="Connect Gmail account" width="800" height="670"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;For Slack, follow instruction number 4 (Gmail) but for the action, click "Send Channel Message".&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%2Finyv5ke3l2r9ch91u2r3.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%2Finyv5ke3l2r9ch91u2r3.PNG" alt="Slack" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select "Connect" and copy OAuth Server URL to connect to Amazon Quick Suite integration.&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%2F430pvsblxlenybcflvkj.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%2F430pvsblxlenybcflvkj.PNG" alt="Connect" width="800" height="430"&gt;&lt;/a&gt;&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%2Ftlsgyyn9itlgje54dy1a.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%2Ftlsgyyn9itlgje54dy1a.jpg" alt="Copy OAuth URL" width="800" height="367"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;B. Amazon Quick Suite - Integration&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Open your AWS account, search and click Amazon Quick Suite service that automatically opened a new tab. Click "Sign up for Amazon Quick Suite".&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%2Fhpiain707k8rch14ic2x.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%2Fhpiain707k8rch14ic2x.jpg" alt="Amazon Quick Suite" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write your account name and email for account notifications. The email for account notifications can be different from your AWS account email.&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%2Fkl315ksec9pgfjgi7pte.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%2Fkl315ksec9pgfjgi7pte.jpg" alt="Settings" width="800" height="747"&gt;&lt;/a&gt;&lt;br&gt;
Click "Go to Amazon Quick Suite".&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%2Fe7cuasfio4lnep691ipq.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%2Fe7cuasfio4lnep691ipq.PNG" alt="Successfully" width="486" height="365"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;I need integration because will used to Quick Flow. Go to "Integrations", create Amazon Quick Suite integration using MCP (Model Context Protocol) like this screenshot.&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%2F3aq5396w9r4k4lgjt4be.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%2F3aq5396w9r4k4lgjt4be.PNG" alt="MCP Integration" width="800" height="266"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write integration name, description, copy the MCP server endpoint from Zapier MCP. Click "Next" then click "Create and continue".&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%2Fk4nyfvzgu10de2v5lfcl.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%2Fk4nyfvzgu10de2v5lfcl.jpg" alt="Input" width="800" height="419"&gt;&lt;/a&gt;&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%2Fm7qzvn9ndvdtihw1k0a7.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%2Fm7qzvn9ndvdtihw1k0a7.PNG" alt="Create" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Zapier MCP now available in Amazon Quick Suite integration. Select "Zapier MCP" then click "Test action APIs".&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%2F0ty4fwbyzqj7j1p5vjn6.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%2F0ty4fwbyzqj7j1p5vjn6.PNG" alt="Zapier MCP" width="800" height="208"&gt;&lt;/a&gt;&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%2F8fycz4u439jui1r5ln9x.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%2F8fycz4u439jui1r5ln9x.PNG" alt="Test action APIs" width="800" height="259"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Test Gmail send email action, write instruction then click "Submit". The result of API response available in seconds.&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%2F4r50bdxmjxtr3voiosjf.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%2F4r50bdxmjxtr3voiosjf.jpg" alt="Test Gmail" width="800" height="252"&gt;&lt;/a&gt;&lt;br&gt;
This is API response that success.&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%2Fat1uprcc319aqf7vwkyi.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%2Fat1uprcc319aqf7vwkyi.PNG" alt="Success" width="800" height="534"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Back to Zapier MCP, select "History". The first action "Gmail send email" is available like this.&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%2Fkmdofwilqo5ktmaw57r7.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%2Fkmdofwilqo5ktmaw57r7.jpg" alt="Zapier MCP history" width="800" height="548"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to Gmail account, check and see new inbox like this. It means Gmail send email action is successfully.&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%2Fuo7qyzkqvqj2bq0igf8i.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%2Fuo7qyzkqvqj2bq0igf8i.jpg" alt="Gmail account" width="800" height="106"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Then back to Quick Suite console, click "My Assistant" and write chat of instruction/action like this and click Enter. But need human review before send email action is run with click "Submit".&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%2Fufguik8wqo8wdq71rfw4.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%2Fufguik8wqo8wdq71rfw4.jpg" alt="Chat action" width="516" height="292"&gt;&lt;/a&gt;&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%2F2qngmlwergu6a4adgm60.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%2F2qngmlwergu6a4adgm60.jpg" alt="Action" width="800" height="157"&gt;&lt;/a&gt;&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%2Fkdfwnl4blwxi3j238455.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%2Fkdfwnl4blwxi3j238455.jpg" alt="Action1" width="800" height="491"&gt;&lt;/a&gt;&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%2Fv7snvmeijf19jyzjcbo7.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%2Fv7snvmeijf19jyzjcbo7.jpg" alt="Process" width="513" height="460"&gt;&lt;/a&gt;&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%2Fhysevmqa5xgkhq0xg8wj.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%2Fhysevmqa5xgkhq0xg8wj.jpg" alt="Process1" width="507" height="531"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to Gmail account, check and see new inbox like this. It means Gmail send email action is successfully.&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%2Fwogzm0cq8v6ebunhticb.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%2Fwogzm0cq8v6ebunhticb.jpg" alt="important" width="800" height="93"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;C. Amazon Quick Suite - Extension&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click this &lt;a href="https://docs.aws.amazon.com/quicksuite/latest/userguide/browser-extension-user-guide.html#install-and-configure-browser" rel="noopener noreferrer"&gt;Amazon Quick Suite extension link&lt;/a&gt; and choose a browser that best suits your needs. I am using Google Chrome for this extension. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After installing the browser extension, click on the extension in the browser and a sign-in screen will appear as shown in the screenshot. Click "Sign in", enter Quick Suite account name then click "Next".&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%2Fpb4aupr61nj4nboti896.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%2Fpb4aupr61nj4nboti896.PNG" alt="Browser extension" width="518" height="235"&gt;&lt;/a&gt;&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%2Fztd3zqc6x9zdpgae2kj5.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%2Fztd3zqc6x9zdpgae2kj5.PNG" alt="Sign in" width="554" height="479"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Open any PDF file and can ask any question such as "Summarize only the contents of ..."&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%2Fjfq0rjgnhzf21qjj4uq3.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%2Fjfq0rjgnhzf21qjj4uq3.PNG" alt="PDF file" width="800" height="358"&gt;&lt;/a&gt;&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%2Fhqbutpz55fnfcwjjfey7.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%2Fhqbutpz55fnfcwjjfey7.PNG" alt="Chat" width="537" height="612"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write "write this summary and send to Slack channel" in the chat extension. This action need human review before send the summary to the Slack channel with click "Submit".&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%2Fa2am1e3hod5zcryerbti.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%2Fa2am1e3hod5zcryerbti.PNG" alt="Summary" width="537" height="615"&gt;&lt;/a&gt;&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%2Fmmp2qqodsoym9hozv1jo.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%2Fmmp2qqodsoym9hozv1jo.PNG" alt="Submit" width="800" height="268"&gt;&lt;/a&gt;&lt;br&gt;
This action successfully sent the summary to the Slack channel.&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%2F7kmj7hlv6ag3mjj27tjf.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%2F7kmj7hlv6ag3mjj27tjf.PNG" alt=" " width="551" height="542"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Go to Slack account, check and see new chat in the channel. It means Slack send channel message action is successfully.&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%2F4tlle5l4ocl4kpof89a0.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%2F4tlle5l4ocl4kpof89a0.PNG" alt="Slack channel success" width="800" height="342"&gt;&lt;/a&gt;&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%2Flnbe7da0tff65j9f6czm.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%2Flnbe7da0tff65j9f6czm.PNG" alt="Zapier MCP action history" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; Amazon Quick Suite can integrate with other tools such as Zapier MCP that already have several tools and actions. Amazon Quick Suite also can integrate with browser extension. The result of two tools (Gmail and Slack) and two actions are is successfully.&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
      <category>analytics</category>
      <category>ai</category>
      <category>automation</category>
      <category>aws</category>
    </item>
    <item>
      <title>RAG (Retrieval Augmented Generation) using Amazon Bedrock and Pinecone</title>
      <dc:creator>Budiono Santoso</dc:creator>
      <pubDate>Sun, 06 Jul 2025 04:47:41 +0000</pubDate>
      <link>https://forem.com/budionosan/amazon-bedrock-knowledge-base-and-agent-hik</link>
      <guid>https://forem.com/budionosan/amazon-bedrock-knowledge-base-and-agent-hik</guid>
      <description>&lt;p&gt;&lt;strong&gt;UPDATE :&lt;/strong&gt; AWS have Amazon Bedrock AgentCore that can create AI agent using memory, identity, gateway, observability, also connect with AI agent framework such as Langgraph, CrewAI, etc. I want to write about this service. Stay tune!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PROBLEM :&lt;/strong&gt; Previous support have problems such as repeated customer questions, slow response times and limited availability.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SOLUTION :&lt;/strong&gt; I build a Retrieval-Augmented Generation (RAG) system to improve financial customer service. &lt;br&gt;
I created Bedrock Knowledge Base using Amazon Titan Embedding and Pinecone, store knowledge base (CSV or PDF or anything) to S3, testing knowledge base before deploy to Bedrock Agent. &lt;br&gt;
After deploy to Bedrock Agent, try invoke this agent make sure successfully when LLM retrieve information from knowledge base then answer the question.&lt;/p&gt;

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

&lt;ol&gt;
&lt;li&gt;AWS account, you can sign up/sign in &lt;a href="https://console.aws.amazon.com" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pinecone account to get Pinecone API key, you can sign up/sign in &lt;a href="https://pinecone.io" rel="noopener noreferrer"&gt;here&lt;/a&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;STEP-BY-STEP :&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A.&lt;/strong&gt; I use Pinecone because most widely used vector database product, has a free vector database index, and can connect to Amazon Bedrock. Open a Pinecone account and create a database index using the following steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click "Create index".&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%2F2k97u09yg64msbl0yzwt.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%2F2k97u09yg64msbl0yzwt.PNG" alt="Create index" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select text embedding. Click "llama-text-embed-v2".&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%2Fk86u1z1zkjgeot3jy7xg.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%2Fk86u1z1zkjgeot3jy7xg.PNG" alt="Select text embedding" width="800" height="526"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Configure text embedding such as dimension to 512.&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%2Ffclj1c3m01xfxtmcmlt4.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%2Ffclj1c3m01xfxtmcmlt4.PNG" alt="Text embedding configuration" width="800" height="211"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select the capacity mode and cloud provider. However, for the starter plan, select serverless and AWS only. You cannot select pods or other cloud providers such as Google Cloud and Azure.&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%2Facw2n5finsms9vzkumyb.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%2Facw2n5finsms9vzkumyb.PNG" alt="For the starter plan, capacity mode serverless only and AWS as a cloud provider" width="800" height="426"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You cannot select other region. Click "Create index".&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%2Fpzev7bhgddws3czdhy0z.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%2Fpzev7bhgddws3czdhy0z.PNG" alt="Available region Virginia only then click Create index" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F76sck3qi4c347sd9apae.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%2F76sck3qi4c347sd9apae.PNG" alt="My Pinecone database index for Amazon Bedrock Knowledge Base" width="800" height="283"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;B.&lt;/strong&gt; Open your AWS account, search for the AWS Secret Manager service, create a Pinecone secret key using the following steps.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Click "store a new secret".&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%2Ft5md69wsa636yzfd073v.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%2Ft5md69wsa636yzfd073v.PNG" alt="AWS Secret Manager" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Select "Other type of secret". Fill in the key/value as Pinecone API Key. It must be "apiKey" and Pinecone API Key because when I fill different other than "apiKey", such as "pineconeapikey", will failed.&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%2Fkgn22zud833qy6on5vu2.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%2Fkgn22zud833qy6on5vu2.PNG" alt="Pinecone API Key" width="800" height="257"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Fill in the secret name and click "Store".&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%2Flj8zfj1xdsyx4pgdnwrg.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%2Flj8zfj1xdsyx4pgdnwrg.PNG" alt="Secret name" width="609" height="314"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;After Pinecone API key is stored, copy secret ARN.&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%2Fqp6r4lcsv02aemxq6a9r.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%2Fqp6r4lcsv02aemxq6a9r.PNG" alt="Secret ARN" width="743" height="421"&gt;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;C.&lt;/strong&gt; Create Amazon Bedrock Knowledge Base and Agent using boto3 SDK. The source code is &lt;a href="https://github.com/budionosanai/amazon-bedrock-prompt-engineering-and-rag/blob/main/knowledgebaseAgent.ipynb" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Knowledge base&lt;/em&gt;.&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%2Fuvjoi2a2h5jm4dhmd5nt.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%2Fuvjoi2a2h5jm4dhmd5nt.PNG" alt="Knowledge base" width="518" height="499"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Knowledge base overview.&lt;/em&gt;&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%2Fn4122c9m3yrm3whzwgqs.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%2Fn4122c9m3yrm3whzwgqs.PNG" alt="Knowledge base overview" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Embedding model using Amazon Titan Embedding and vector database using Pinecone.&lt;/em&gt;&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%2Fatprakw25ac8w4s65u6a.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%2Fatprakw25ac8w4s65u6a.PNG" alt="Embedding model and vector database" width="800" height="219"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data source from Amazon S3.&lt;/em&gt;&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%2F706180nn5ykdar62w2mz.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%2F706180nn5ykdar62w2mz.PNG" alt="Data source" width="800" height="118"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Data source configuration.&lt;/em&gt;&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%2Fcdlrlxojcxbeaf5r8uvw.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%2Fcdlrlxojcxbeaf5r8uvw.PNG" alt="Data source configuration" width="800" height="347"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Sync all knowledge base.&lt;/em&gt; This knowledge base sync cannot be sync automatically, it must be updated manually.&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%2Fd6ht15f9q8vbf0jdxdoo.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%2Fd6ht15f9q8vbf0jdxdoo.PNG" alt="Sync all knowledge base" width="800" height="274"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Copy inference profile ARN. For this tutorial, copy US Nova Micro.&lt;/em&gt; I using Amazon Nova Micro because need text only, lowest latency response and very low cost.&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%2Fuqmnob4ex930q8buu63e.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%2Fuqmnob4ex930q8buu63e.PNG" alt="Inference profile ARN" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Testing the knowledge base based question outside knowledge base before deploy to Bedrock Agent.&lt;/em&gt;&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%2Fs1em228jkhzwggrug99j.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%2Fs1em228jkhzwggrug99j.PNG" alt="Test knowledge base" width="800" height="244"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Testing the knowledge base based question inside knowledge base before deploy to Bedrock Agent.&lt;/em&gt;&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%2Firfsrzkjs5badb5vywkx.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%2Firfsrzkjs5badb5vywkx.PNG" alt="Test knowledge base" width="800" height="238"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But, if want to sync from another S3 bucket, how to sync? I explain this solution.&lt;/p&gt;

&lt;p&gt;Go to IAM then click IAM role for Bedrock Knowledge Base like this. Click S3 policy.&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%2Fyvj51b6th4epsdx0pf6i.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%2Fyvj51b6th4epsdx0pf6i.PNG" alt="IAM role for Bedrock Knowledge Base" width="675" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This policy only can sync for "all-in-bedrock" S3 bucket. But if I want to sync another S3 bucket. Example I have S3 bucket name "bedrock-kb", can't sync because this S3 policy can't detect.&lt;br&gt;&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%2Fv1gm2lhcm83bt43fsvqs.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%2Fv1gm2lhcm83bt43fsvqs.PNG" alt="S3 policy" width="496" height="678"&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%2Fqd3sxozoq13pvt8j8z1j.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%2Fqd3sxozoq13pvt8j8z1j.PNG" alt="S3 policy" width="439" height="460"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Editing S3 policy configuration like this screenshot to can sync all S3 bucket.&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%2Fvotqe2z4bno6id0lf9m8.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%2Fvotqe2z4bno6id0lf9m8.PNG" alt="After edit S3 policy" width="687" height="747"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Go to Amazon Bedrock then click Agent overview.&lt;/em&gt;&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%2Fwcrohkzpdp0vgy29wtwa.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%2Fwcrohkzpdp0vgy29wtwa.PNG" alt="Bedrock Agent overview" width="800" height="287"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bedrock Agent detail.&lt;/em&gt;&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%2F5o946nomyy6xto03salx.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%2F5o946nomyy6xto03salx.PNG" alt="Agent detail" width="800" height="425"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Instruction for this agent using Amazon Nova Micro.&lt;/em&gt;&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%2Fnjzxi9d1gbch9uigg20b.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%2Fnjzxi9d1gbch9uigg20b.PNG" alt="Instruction for this agent" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Associate agent with knowledge base that already created.&lt;/em&gt;&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%2Fqpvs81dwi4h0s2dmqjcm.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%2Fqpvs81dwi4h0s2dmqjcm.PNG" alt="Associate agent with knowledge base" width="800" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bedrock Agent version and alias.&lt;/em&gt;&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%2Fgnxpbvzz3ocbdtzhjh6o.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%2Fgnxpbvzz3ocbdtzhjh6o.PNG" alt=" " width="800" height="314"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Copy inference profile ARN. For this tutorial, copy US Nova Micro.&lt;/em&gt; I using Amazon Nova Micro because need text only, lowest latency response and very low cost.&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%2Fuqmnob4ex930q8buu63e.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%2Fuqmnob4ex930q8buu63e.PNG" alt="Inference profile ARN" width="800" height="406"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Testing Bedrock Agent with scenario if a question is not related with knowledge base.&lt;/em&gt; Result is the agent cannot answer because outside knowledge base.&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%2F6kcsguquhd0ogcfcigya.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%2F6kcsguquhd0ogcfcigya.PNG" alt="Test Bedrock Agent" width="474" height="399"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Testing Bedrock Agent with scenario if a question is related with knowledge base.&lt;/em&gt; Result is the agent can answer because inside knowledge base.&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%2F8u55mytma9klyx251bfm.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%2F8u55mytma9klyx251bfm.PNG" alt="Test Bedrock Agent" width="482" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see result of testing other question at &lt;a href="https://github.com/budionosanai/amazon-bedrock-prompt-engineering-and-rag/blob/main/knowledgebaseAgent.ipynb" rel="noopener noreferrer"&gt;this source code.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CONCLUSION :&lt;/strong&gt; After created this project, I get impact such as get accurate and faster response, no need training or fine-tuning from scratch, less hallucination, appropriate handling of reworded questions, refuse to answer of off-topic question and efficiency operational.&lt;/p&gt;

&lt;p&gt;Through this project, I learn hard skills such as vector databases (Pinecone), embeddings (Amazon Titan), and LLMs (Amazon Nova). I also learn soft skills such as continuous learning because AI trend change faster and detail orientation to make sure answer from question is right and according to dataset.&lt;/p&gt;

&lt;p&gt;Thank you,&lt;br&gt;
Budi :)&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
