mirror of
https://github.com/awslabs/amazon-bedrock-agentcore-samples.git
synced 2025-09-08 20:50:46 +00:00
* updated README.md file with bearer token generation * updated README.md file with bearer token generation-removed client id and secret credentials * removed hardcoded domain * added agent runtime, frontend, observability and agentcore identity * update README.md file to reflect frontend testing
238 lines
7.4 KiB
Markdown
238 lines
7.4 KiB
Markdown
# Device Management Chat Application
|
|
|
|
A FastAPI-based chat application that interfaces with AWS Bedrock AgentCore runtime to provide a user-friendly web interface for the Device Management system. The application features real-time chat, AWS Cognito authentication, and Docker deployment.
|
|
|
|
## Features
|
|
|
|
- **Real-time Chat Interface**: WebSocket-based streaming responses from the Device Management Agent
|
|
- **AWS Cognito Authentication**: Secure user authentication and session management
|
|
- **Responsive Design**: Works on desktop and mobile devices
|
|
- **Docker Support**: Easy deployment with Docker Compose
|
|
- **Session Management**: Maintains conversation context across interactions
|
|
- **Streaming Response Handling**: Processes and displays real-time agent responses
|
|
|
|
## Architecture
|
|
|
|
```
|
|
├── main.py # FastAPI application with WebSocket endpoints
|
|
├── auth.py # AWS Cognito authentication module
|
|
├── templates/ # HTML templates
|
|
│ ├── chat.html # Main chat interface
|
|
│ ├── login.html # Cognito OAuth login page
|
|
│ └── simple_login.html # Simple authentication form
|
|
├── static/ # Static assets
|
|
│ ├── css/styles.css # Application styling
|
|
│ ├── js/ # JavaScript files
|
|
│ └── img/aws-logo.svg # AWS branding
|
|
├── Dockerfile # Container configuration
|
|
├── docker-compose.yml # Multi-container orchestration
|
|
└── requirements.txt # Python dependencies
|
|
```
|
|
|
|
## Prerequisites
|
|
|
|
- **Python 3.12** (recommended)
|
|
- **AWS CLI** configured with appropriate credentials
|
|
- **Docker & Docker Compose** (for containerized deployment)
|
|
- **AWS Bedrock AgentCore** access
|
|
- **AWS Cognito User Pool** (for authentication)
|
|
|
|
## Environment Configuration
|
|
|
|
Create a `.env` file based on `.env.example`:
|
|
|
|
```bash
|
|
# AWS Configuration
|
|
AWS_REGION=us-west-2
|
|
|
|
# Agent Runtime ARN
|
|
AGENT_ARN=arn:aws:bedrock-agentcore:us-west-2:123456789012:runtime/your-agent-name
|
|
|
|
# Cognito Authentication (Optional)
|
|
COGNITO_DOMAIN=your-domain.auth.us-west-2.amazoncognito.com
|
|
COGNITO_CLIENT_ID=your-client-id
|
|
COGNITO_CLIENT_SECRET=your-client-secret
|
|
COGNITO_REDIRECT_URI=http://localhost:5001/auth/callback
|
|
COGNITO_LOGOUT_URI=http://localhost:5001/logout
|
|
COGNITO_USER_POOL_ID=us-west-2_YourPoolId
|
|
```
|
|
|
|
## Installation & Setup
|
|
|
|
### Option 1: Docker Deployment (Recommended)
|
|
|
|
1. **Clone and navigate to the project**:
|
|
```bash
|
|
cd frontend
|
|
```
|
|
|
|
2. **Configure environment**:
|
|
```bash
|
|
cp .env.example .env
|
|
# Edit .env with your actual values
|
|
```
|
|
|
|
3. **Build and run with Docker Compose**:
|
|
```bash
|
|
docker-compose up -d
|
|
```
|
|
|
|
4. **Access the application**:
|
|
- Open http://localhost:5001
|
|
- Login with your credentials
|
|
- Start chatting with the Device Management Agent
|
|
|
|
### Option 2: Local Development
|
|
|
|
1. **Setup Python environment**:
|
|
```bash
|
|
python3.12 -m venv venv
|
|
source venv/bin/activate # On Windows: venv\Scripts\activate
|
|
```
|
|
|
|
2. **Install dependencies**:
|
|
```bash
|
|
pip install -r requirements.txt
|
|
```
|
|
|
|
3. **Run the application**:
|
|
```bash
|
|
# Development server with auto-reload
|
|
uvicorn main:app --host 0.0.0.0 --port 5001 --reload
|
|
```
|
|
|
|
### Option 3: Automated Setup
|
|
|
|
Use the provided setup script:
|
|
```bash
|
|
chmod +x setup_and_run.sh
|
|
./setup_and_run.sh
|
|
```
|
|
|
|
## Key Files Description
|
|
|
|
### Core Application Files
|
|
|
|
- **`main.py`**: Main FastAPI application with WebSocket endpoints, streaming response handling, and session management
|
|
- **`auth.py`**: AWS Cognito integration for user authentication and authorization
|
|
|
|
### Configuration Files
|
|
|
|
- **`requirements.txt`**: Python package dependencies including FastAPI, boto3, WebSockets
|
|
- **`Dockerfile`**: Container image configuration for Python 3.12 slim
|
|
- **`docker-compose.yml`**: Multi-container orchestration with volume mounts for AWS credentials
|
|
- **`.env.example`**: Template for environment variables
|
|
|
|
### Utilities & Scripts
|
|
|
|
- **`setup_and_run.sh`**: Automated setup and deployment script
|
|
|
|
### Frontend Assets
|
|
|
|
- **`templates/chat.html`**: Main chat interface with WebSocket integration
|
|
- **`templates/login.html`**: Cognito OAuth login page
|
|
- **`templates/simple_login.html`**: Alternative simple login form
|
|
- **`static/css/styles.css`**: Application styling and responsive design
|
|
- **`static/img/aws-logo.svg`**: AWS branding assets
|
|
|
|
## Usage Examples
|
|
|
|
Once the application is running, you can interact with the Device Management system:
|
|
|
|
### Device Management Commands
|
|
- **"List all devices"** - Display all devices in the system
|
|
- **"Show settings for device DEV001"** - Get specific device configuration
|
|
- **"List WiFi networks for Living Room Router"** - Show available networks
|
|
- **"Update WiFi SSID to MyNewNetwork on device DEV001"** - Modify device settings
|
|
- **"Show device status for DG-100005"** - Check device connectivity and status
|
|
|
|
### System Information
|
|
- **"Show device statistics"** - Get system overview
|
|
- **"List devices by status"** - Filter devices by connection status
|
|
- **"Show firmware versions"** - Display firmware information across devices
|
|
|
|
## API Endpoints
|
|
|
|
### WebSocket Endpoints
|
|
- **`/ws/{client_id}`**: Real-time chat communication with streaming responses
|
|
|
|
### HTTP Endpoints
|
|
- **`GET /`**: Main chat interface (requires authentication)
|
|
- **`GET /simple-login`**: Simple authentication form
|
|
- **`POST /simple-login`**: Process simple login
|
|
- **`GET /auth/login`**: Initiate Cognito OAuth flow
|
|
- **`GET /auth/callback`**: Handle Cognito OAuth callback
|
|
- **`GET /logout`**: User logout and session cleanup
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
1. **Agent Connection Errors**:
|
|
- Verify AGENT_ARN is correct in `.env`
|
|
- Check AWS credentials and permissions
|
|
- Ensure Bedrock AgentCore access
|
|
|
|
2. **Authentication Issues**:
|
|
- Verify Cognito configuration in `.env`
|
|
- Check redirect URIs match Cognito settings
|
|
- Validate user pool and client configuration
|
|
|
|
3. **Docker Issues**:
|
|
```bash
|
|
docker-compose logs --tail=50
|
|
```
|
|
- Check container logs for errors
|
|
- Verify AWS credentials mount
|
|
- Ensure port 5001 is available
|
|
|
|
4. **Streaming Response Problems**:
|
|
- Check WebSocket connection in browser dev tools
|
|
- Verify agent response format
|
|
- Review parsing logic in `main.py`
|
|
|
|
### Debug Mode
|
|
|
|
Enable debug logging by setting:
|
|
```bash
|
|
export PYTHONPATH=.
|
|
export LOG_LEVEL=DEBUG
|
|
```
|
|
|
|
## Security Considerations
|
|
|
|
- **AWS Credentials**: Never commit credentials to version control
|
|
- **Session Security**: Uses secure random session keys
|
|
- **CORS Configuration**: Configured for development (adjust for production)
|
|
- **Authentication**: Supports both Cognito OAuth and simple auth modes
|
|
|
|
## Development
|
|
|
|
### Adding New Features
|
|
|
|
1. **Backend Changes**: Modify `main.py` for new endpoints or WebSocket handlers
|
|
2. **Frontend Changes**: Update templates and static files
|
|
3. **Authentication**: Extend `auth.py` for additional auth providers
|
|
4. **Testing**: Add tests to verify new functionality
|
|
|
|
### Deployment
|
|
|
|
For production deployment:
|
|
|
|
1. **Update CORS settings** in `main.py`
|
|
2. **Configure proper SSL/TLS** certificates
|
|
3. **Set production environment variables**
|
|
4. **Use production-grade WSGI server** (e.g., Gunicorn)
|
|
5. **Implement proper logging and monitoring**
|
|
|
|
## Support
|
|
|
|
For issues and questions:
|
|
- Check the troubleshooting section above
|
|
- Review application logs: `docker-compose logs`
|
|
- Verify AWS permissions and configuration
|
|
|
|
## License
|
|
|
|
This project is part of the AWS Device Management system samples.
|