rameshv29 05ada44c3f
Updated the folder structure and added AgentCore Observability (#139)
* updated the cognito setup, gateway creation using agentcore sdk

* added the config directory with test file

* updated the automation scripts and simplified the approach to install and test it

* updated the tool description in the target creation and updated readme file

* added agentcore observability for agentcore gateway

* updated architecture diagram

* Update observability section in README.md with more concise information

* removed old folder directory

* updated the tool description in the targets
2025-07-24 18:15:45 -07:00

147 lines
5.4 KiB
Python

#!/usr/bin/env python3
import os
import sys
import json
import requests
def main():
# Find the cognito_config.env file
config_paths = [
"./config/cognito_config.env", # When run from project root
"../config/cognito_config.env", # When run from scripts directory
]
# If running from scripts directory, ensure we look in the right place
current_dir = os.getcwd()
if os.path.basename(current_dir) == "scripts":
config_paths = [
"../config/cognito_config.env", # When run from scripts directory
"./config/cognito_config.env", # Fallback
]
config_file = None
for path in config_paths:
if os.path.exists(path):
config_file = path
print(f"Found Cognito config at {path}")
break
if not config_file:
print("Error: Could not find cognito_config.env")
sys.exit(1)
# Load environment variables
cognito_config = {}
with open(config_file, 'r') as f:
for line in f:
if line.startswith('export '):
key, value = line.replace('export ', '').strip().split('=', 1)
cognito_config[key] = value.strip('"\'')
# Get token
url = f"https://{cognito_config['COGNITO_DOMAIN_NAME']}.auth.us-west-2.amazoncognito.com/oauth2/token"
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
data = {
'grant_type': 'client_credentials',
'client_id': cognito_config['COGNITO_APP_CLIENT_ID'],
'client_secret': cognito_config['COGNITO_CLIENT_SECRET']
}
try:
print(f"Requesting token from {url}")
print(f"Using client ID: {cognito_config['COGNITO_APP_CLIENT_ID']}")
response = requests.post(url, headers=headers, data=data)
response.raise_for_status()
token_data = response.json()
token = token_data.get('access_token')
if not token:
print(f"Error: No access token in response. Full response: {token_data}")
sys.exit(1)
print(f"Token received: {token[:20]}...")
print(f"Token expires in: {token_data.get('expires_in', 'unknown')} seconds")
# Update cognito_config.env
with open(config_file, 'r') as f:
lines = f.readlines()
with open(config_file, 'w') as f:
for line in lines:
if line.startswith('export COGNITO_ACCESS_TOKEN='):
f.write(f'export COGNITO_ACCESS_TOKEN={token}\n')
else:
f.write(line)
# Update mcp.json
mcp_file = os.path.expanduser('~/.aws/amazonq/mcp.json')
try:
with open(mcp_file, 'r') as f:
mcp_data = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
# Create a new mcp.json if it doesn't exist or is invalid
mcp_data = {"mcpServers": {}}
# Get gateway ID from config
gateway_config_paths = [
"./config/gateway_config.env", # When run from project root
"../config/gateway_config.env", # When run from scripts directory
]
# If running from scripts directory, ensure we look in the right place
if os.path.basename(current_dir) == "scripts":
gateway_config_paths = [
"../config/gateway_config.env", # When run from scripts directory
"./config/gateway_config.env", # Fallback
]
gateway_id = None
for path in gateway_config_paths:
if os.path.exists(path):
with open(path, 'r') as f:
for line in f:
if line.startswith('export GATEWAY_IDENTIFIER='):
gateway_id = line.replace('export GATEWAY_IDENTIFIER=', '').strip()
break
if gateway_id:
break
if not gateway_id:
print("Warning: Could not find GATEWAY_IDENTIFIER in config files")
else:
# Update mcp.json with the gateway ID and token
gateway_url = f"https://{gateway_id}.gateway.bedrock-agentcore.us-west-2.amazonaws.com/mcp"
server_name = "db-performance-analyzer"
# Update existing entries
for server in mcp_data.get('mcpServers', {}):
for i, arg in enumerate(mcp_data['mcpServers'][server]['args']):
if arg.startswith('Authorization: Bearer '):
mcp_data['mcpServers'][server]['args'][i] = f'Authorization: Bearer {token}'
# Add entry if it doesn't exist
if server_name not in mcp_data.get('mcpServers', {}):
mcp_data.setdefault('mcpServers', {})[server_name] = {
"command": "npx",
"timeout": 60000,
"args": [
"mcp-remote@latest",
gateway_url,
"--header",
f"Authorization: Bearer {token}"
]
}
print(f"Added entry for {server_name} in mcp.json")
with open(mcp_file, 'w') as f:
json.dump(mcp_data, f, indent=2)
return token
except Exception as e:
print(f'Error: {e}')
sys.exit(1)
if __name__ == "__main__":
main()