2025-07-18 20:24:26 -04:00
..
2025-07-18 20:24:26 -04:00
2025-07-18 20:24:26 -04:00

ADK Agent with Bedrock AgentCore Integration

Information Details
Agent type Synchronous
Agentic Framework Google ADK
LLM model Gemini 2.0 Flash
Components AgentCore Runtime
Example complexity Easy
SDK used Amazon BedrockAgentCore Python SDK

This example demonstrates how to integrate a Google ADK agent with AWS Bedrock AgentCore, enabling you to deploy a search-capable agent as a managed service.

Prerequisites

  • Python 3.10+
  • uv - Fast Python package installer and resolver
  • AWS account with Bedrock access
  • Google AI API key (for the Gemini model)

Setup Instructions

1. Create a Python Environment with uv

# Install uv if you don't have it already
pip install uv

# Create and activate a virtual environment
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

2. Install Requirements

uv pip install -r requirements.txt

3. Understanding the Agent Code

The adk-agent-google-search.py file contains a Google ADK agent with Google Search capabilities, integrated with Bedrock AgentCore:

from google.adk.agents import Agent
from google.adk.runners import Runner
from google.adk.sessions import InMemorySessionService
from google.adk.tools import google_search
from google.genai import types
import asyncio

# Agent Definition
root_agent = Agent(
    model="gemini-2.0-flash", 
    name="openai_agent",
    description="Agent to answer questions using Google Search.",
    instruction="I can answer your questions by searching the internet. Just ask me anything!",
    # google_search is a pre-built tool which allows the agent to perform Google searches.
    tools=[google_search]
)

# Session and Runner
async def setup_session_and_runner(user_id, session_id):
    session_service = InMemorySessionService()
    session = await session_service.create_session(app_name=APP_NAME, user_id=user_id, session_id=session_id)
    runner = Runner(agent=root_agent, app_name=APP_NAME, session_service=session_service)
    return session, runner

# Agent Interaction
async def call_agent_async(query, user_id, session_id):
    content = types.Content(role='user', parts=[types.Part(text=query)])
    session, runner = await setup_session_and_runner(user_id, session_id)
    events = runner.run_async(user_id=user_id, session_id=session_id, new_message=content)

    async for event in events:
        if event.is_final_response():
            final_response = event.content.parts[0].text
            print("Agent Response: ", final_response)
    
    return final_response

# Integrate with Bedrock AgentCore
from bedrock_agentcore.runtime import BedrockAgentCoreApp
app = BedrockAgentCoreApp()

@app.entrypoint
def agent_invocation(payload, context):
    return asyncio.run(call_agent_async(
        payload.get("prompt", "what is Bedrock Agentcore Runtime?"), 
        payload.get("user_id", "user1234"), 
        context.session_id
    ))

app.run()

4. Configure and Launch with Bedrock AgentCore Toolkit

# Configure your agent for deployment
agentcore configure -e adk-agent-google-search.py

# Deploy your agent with Gemini API key
agentcore launch --env GEMINI_API_KEY=your_api_key_here

5. Testing Your Agent Locally

Launch locally to test:

agentcore launch -l --env GEMINI_API_KEY=your_api_key_here

Then invoke the agent:

agentcore invoke -l '{"prompt": "What is Amazon Bedrock Agentcore Runtime?"}'

The agent will:

  1. Process your query
  2. Use Google Search to find relevant information
  3. Provide a comprehensive response based on the search results

Note: Remove the -l flag to launch and invoke in the cloud

How It Works

This agent uses Google's ADK (Agent Development Kit) framework to create an assistant that can:

  1. Process natural language queries
  2. Perform Google searches to find relevant information
  3. Incorporate search results into coherent responses
  4. Maintain session state between interactions

The agent is wrapped with the Bedrock AgentCore framework, which handles:

  • Deployment to AWS
  • Scaling and management
  • Request/response handling
  • Environment variable management

Additional Resources