mirror of
https://github.com/awslabs/amazon-bedrock-agentcore-samples.git
synced 2025-09-08 20:50:46 +00:00
214 lines
6.4 KiB
Bash
214 lines
6.4 KiB
Bash
|
#!/bin/bash
|
||
|
set -e
|
||
|
|
||
|
echo "=== AgentCore Gateway Setup for DB Performance Analyzer ==="
|
||
|
echo "This script will create all necessary resources for AgentCore Gateway"
|
||
|
|
||
|
# Create config directory
|
||
|
mkdir -p config
|
||
|
|
||
|
# Step 1: Install required packages
|
||
|
echo "Step 1: Installing required packages..."
|
||
|
# Create virtual environment if it doesn't exist
|
||
|
if [ ! -d "venv" ]; then
|
||
|
echo "Creating virtual environment..."
|
||
|
python3 -m venv venv
|
||
|
fi
|
||
|
|
||
|
# Activate virtual environment and install packages
|
||
|
source venv/bin/activate
|
||
|
pip install -r requirements.txt
|
||
|
deactivate
|
||
|
|
||
|
# Step 2: Create IAM role for Gateway
|
||
|
echo "Step 2: Creating IAM role for Gateway..."
|
||
|
./scripts/create_iam_roles.sh
|
||
|
|
||
|
# Step 3: Set up Cognito resources
|
||
|
echo "Step 3: Setting up Cognito resources..."
|
||
|
source venv/bin/activate
|
||
|
python3 scripts/setup_cognito.py
|
||
|
deactivate
|
||
|
|
||
|
# Load Cognito configuration
|
||
|
if [ -f "config/cognito_config.env" ]; then
|
||
|
source config/cognito_config.env
|
||
|
echo "Loaded Cognito configuration"
|
||
|
else
|
||
|
echo "Error: config/cognito_config.env not found"
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
# Step 4: Create psycopg2 Lambda layer
|
||
|
echo "Step 4: Creating psycopg2 Lambda layer..."
|
||
|
./scripts/create_psycopg2_layer.sh
|
||
|
|
||
|
# Step 5: Get VPC configuration from database cluster
|
||
|
echo "Step 5: Getting VPC configuration..."
|
||
|
# Check if we have database configuration
|
||
|
if [ -f "config/db_prod_config.env" ]; then
|
||
|
source config/db_prod_config.env
|
||
|
if [ ! -z "$DB_CLUSTER_NAME" ]; then
|
||
|
source venv/bin/activate
|
||
|
python3 scripts/get_vpc_config.py --cluster-name "$DB_CLUSTER_NAME"
|
||
|
deactivate
|
||
|
else
|
||
|
echo "Warning: DB_CLUSTER_NAME not found in config/db_prod_config.env"
|
||
|
fi
|
||
|
elif [ -f "config/db_dev_config.env" ]; then
|
||
|
source config/db_dev_config.env
|
||
|
if [ ! -z "$DB_CLUSTER_NAME" ]; then
|
||
|
source venv/bin/activate
|
||
|
python3 scripts/get_vpc_config.py --cluster-name "$DB_CLUSTER_NAME"
|
||
|
deactivate
|
||
|
else
|
||
|
echo "Warning: DB_CLUSTER_NAME not found in config/db_dev_config.env"
|
||
|
fi
|
||
|
else
|
||
|
echo "Warning: No database configuration found. Lambda will be created without VPC configuration."
|
||
|
fi
|
||
|
|
||
|
# Step 5b: Create VPC endpoints for AWS services
|
||
|
if [ -f "config/vpc_config.env" ]; then
|
||
|
echo "Step 5b: Creating VPC endpoints for AWS services..."
|
||
|
chmod +x ./scripts/create_vpc_endpoints.sh
|
||
|
./scripts/create_vpc_endpoints.sh
|
||
|
fi
|
||
|
|
||
|
# Step 6: Create Lambda function
|
||
|
echo "Step 6: Creating Lambda function..."
|
||
|
./scripts/create_lambda.sh
|
||
|
|
||
|
# Step 7: Create Gateway
|
||
|
echo "Step 7: Creating Gateway..."
|
||
|
# Load IAM configuration
|
||
|
if [ -f "config/iam_config.env" ]; then
|
||
|
source config/iam_config.env
|
||
|
echo "Loaded IAM configuration with GATEWAY_ROLE_ARN: $GATEWAY_ROLE_ARN"
|
||
|
else
|
||
|
echo "Error: config/iam_config.env not found. Creating IAM roles again..."
|
||
|
./scripts/create_iam_roles.sh
|
||
|
if [ -f "config/iam_config.env" ]; then
|
||
|
source config/iam_config.env
|
||
|
echo "Loaded IAM configuration with GATEWAY_ROLE_ARN: $GATEWAY_ROLE_ARN"
|
||
|
else
|
||
|
echo "Error: Failed to create IAM roles"
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Set the role ARN for the gateway
|
||
|
export ROLE_ARN=$GATEWAY_ROLE_ARN
|
||
|
echo "Setting ROLE_ARN=$ROLE_ARN"
|
||
|
|
||
|
# Create the gateway
|
||
|
source venv/bin/activate
|
||
|
python3 scripts/create_gateway.py
|
||
|
deactivate
|
||
|
|
||
|
# Load Gateway configuration
|
||
|
if [ -f "config/gateway_config.env" ]; then
|
||
|
source config/gateway_config.env
|
||
|
echo "Loaded Gateway configuration with GATEWAY_IDENTIFIER: $GATEWAY_IDENTIFIER"
|
||
|
else
|
||
|
echo "Warning: config/gateway_config.env not found, checking parent directory..."
|
||
|
if [ -f "../config/gateway_config.env" ]; then
|
||
|
# Copy the file to the expected location
|
||
|
cp ../config/gateway_config.env config/
|
||
|
source config/gateway_config.env
|
||
|
echo "Loaded Gateway configuration with GATEWAY_IDENTIFIER: $GATEWAY_IDENTIFIER"
|
||
|
else
|
||
|
echo "Error: Gateway configuration not found in any location"
|
||
|
exit 1
|
||
|
fi
|
||
|
fi
|
||
|
|
||
|
# Step 8: Create Gateway Target
|
||
|
echo "Step 8: Creating Gateway Target..."
|
||
|
# Export environment variables for lambda-target-analyze-db-performance.py
|
||
|
export LAMBDA_ARN=$LAMBDA_ARN
|
||
|
export TARGET_NAME="db-performance-analyzer"
|
||
|
export TARGET_DESCRIPTION="DB Performance Analyzer tools"
|
||
|
|
||
|
# Create the target using create_target.py
|
||
|
source venv/bin/activate
|
||
|
python3 scripts/create_target.py
|
||
|
deactivate
|
||
|
|
||
|
# Step 9: Test Gateway
|
||
|
echo "Step 9: Testing Gateway..."
|
||
|
# Construct the gateway endpoint
|
||
|
MCP_ENDPOINT="https://${GATEWAY_IDENTIFIER}.gateway.bedrock-agentcore.${REGION}.amazonaws.com/mcp"
|
||
|
|
||
|
# Get a fresh token
|
||
|
echo "Getting a fresh token for testing..."
|
||
|
source venv/bin/activate
|
||
|
python3 scripts/get_token.py
|
||
|
deactivate
|
||
|
|
||
|
# Reload the Cognito configuration to get the fresh token
|
||
|
if [ -f "config/cognito_config.env" ]; then
|
||
|
source config/cognito_config.env
|
||
|
echo "Loaded fresh token from config/cognito_config.env"
|
||
|
fi
|
||
|
|
||
|
# Test listing tools with the correct format
|
||
|
echo "Testing listTools with the correct format..."
|
||
|
curl -s -X POST \
|
||
|
-H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
|
||
|
-H "Content-Type: application/json" \
|
||
|
-d '{
|
||
|
"jsonrpc": "2.0",
|
||
|
"id": "list-tools-request",
|
||
|
"method": "tools/list",
|
||
|
"params": {}
|
||
|
}' \
|
||
|
"$MCP_ENDPOINT" | jq .
|
||
|
|
||
|
# Test invoking explain_query tool with the correct format
|
||
|
echo -e "\nTesting invokeTool with the correct format..."
|
||
|
curl -s -X POST \
|
||
|
-H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
|
||
|
-H "Content-Type: application/json" \
|
||
|
-d '{
|
||
|
"jsonrpc": "2.0",
|
||
|
"id": "invoke-tool-request",
|
||
|
"method": "tools/call",
|
||
|
"params": {
|
||
|
"name": "db-performance-analyzer___explain_query",
|
||
|
"arguments": {
|
||
|
"environment": "dev",
|
||
|
"action_type": "explain_query",
|
||
|
"query": "SELECT version()"
|
||
|
}
|
||
|
}
|
||
|
}' \
|
||
|
"$MCP_ENDPOINT" | jq .
|
||
|
|
||
|
# Test invoking slow_query tool with the correct format
|
||
|
echo -e "\nTesting slow_query tool..."
|
||
|
curl -s -X POST \
|
||
|
-H "Authorization: Bearer $COGNITO_ACCESS_TOKEN" \
|
||
|
-H "Content-Type: application/json" \
|
||
|
-d '{
|
||
|
"jsonrpc": "2.0",
|
||
|
"id": "invoke-slow-query-request",
|
||
|
"method": "tools/call",
|
||
|
"params": {
|
||
|
"name": "pgstat-analyzer___slow_query",
|
||
|
"arguments": {
|
||
|
"environment": "dev",
|
||
|
"action_type": "slow_query"
|
||
|
}
|
||
|
}
|
||
|
}' \
|
||
|
"$MCP_ENDPOINT" | jq .
|
||
|
|
||
|
echo -e "\n=== Setup Complete ==="
|
||
|
echo "Gateway ID: $GATEWAY_IDENTIFIER"
|
||
|
echo "Gateway Endpoint: $MCP_ENDPOINT"
|
||
|
if [ -f "config/target_config.env" ]; then
|
||
|
source config/target_config.env
|
||
|
echo "Target ID: $TARGET_ID"
|
||
|
fi
|
||
|
echo "To clean up resources, run: ./cleanup.sh"
|