# Streamlit Cloud Deployment Guide This guide explains how to deploy the FRED ML frontend to Streamlit Cloud. ## Prerequisites 1. **GitHub Account**: Your code must be in a GitHub repository 2. **Streamlit Cloud Account**: Sign up at [streamlit.io/cloud](https://streamlit.io/cloud) 3. **AWS Credentials**: Configured for S3 and Lambda access ## Step 1: Prepare Your Repository ### Repository Structure Ensure your repository has the following structure: ``` FRED_ML/ ├── frontend/ │ ├── app.py │ └── .streamlit/ │ └── config.toml ├── requirements.txt └── README.md ``` ### Update requirements.txt Make sure your `requirements.txt` includes Streamlit dependencies: ```txt streamlit==1.28.1 plotly==5.17.0 altair==5.1.2 boto3==1.34.0 pandas==2.1.4 numpy==1.24.3 ``` ## Step 2: Configure Streamlit App ### Main App File Your `frontend/app.py` should be the main entry point. Streamlit Cloud will automatically detect and run this file. ### Streamlit Configuration The `.streamlit/config.toml` file should be configured for production: ```toml [global] developmentMode = false [server] headless = true port = 8501 enableCORS = false enableXsrfProtection = false [browser] gatherUsageStats = false ``` ## Step 3: Deploy to Streamlit Cloud ### 1. Connect Repository 1. Go to [share.streamlit.io](https://share.streamlit.io) 2. Sign in with your GitHub account 3. Click "New app" 4. Select your repository 5. Set the main file path to `frontend/app.py` ### 2. Configure Environment Variables In the Streamlit Cloud dashboard, add these environment variables: ```bash # AWS Configuration AWS_ACCESS_KEY_ID=your_aws_access_key AWS_SECRET_ACCESS_KEY=your_aws_secret_key AWS_DEFAULT_REGION=us-west-2 # Application Configuration S3_BUCKET=fredmlv1 LAMBDA_FUNCTION=fred-ml-processor ``` ### 3. Advanced Settings - **Python version**: 3.9 or higher - **Dependencies**: Use `requirements.txt` from root directory - **Main file path**: `frontend/app.py` ## Step 4: Environment Variables Setup ### AWS Credentials Create an IAM user with minimal permissions: ```json { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::fredmlv1", "arn:aws:s3:::fredmlv1/*" ] }, { "Effect": "Allow", "Action": [ "lambda:InvokeFunction" ], "Resource": "arn:aws:lambda:us-east-1:*:function:fred-ml-processor" } ] } ``` ### Application Variables | Variable | Description | Example | |----------|-------------|---------| | `S3_BUCKET` | S3 bucket name | `fredmlv1` | | `LAMBDA_FUNCTION` | Lambda function name | `fred-ml-processor` | | `AWS_ACCESS_KEY_ID` | AWS access key | `AKIA...` | | `AWS_SECRET_ACCESS_KEY` | AWS secret key | `...` | | `AWS_DEFAULT_REGION` | AWS region | `us-east-1` | ## Step 5: Deploy and Test ### 1. Deploy 1. Click "Deploy" in Streamlit Cloud 2. Wait for the build to complete 3. Check the deployment logs for any errors ### 2. Test the Application 1. Open the provided Streamlit URL 2. Navigate to the "Analysis" page 3. Select indicators and run a test analysis 4. Check the "Reports" page for results ### 3. Monitor Logs - Check Streamlit Cloud logs for frontend issues - Monitor AWS CloudWatch logs for Lambda function issues - Verify S3 bucket for generated reports ## Troubleshooting ### Common Issues #### 1. Import Errors **Problem**: Module not found errors **Solution**: Ensure all dependencies are in `requirements.txt` #### 2. AWS Credentials **Problem**: Access denied errors **Solution**: Verify IAM permissions and credentials #### 3. S3 Access **Problem**: Cannot access S3 bucket **Solution**: Check bucket name and IAM permissions #### 4. Lambda Invocation **Problem**: Lambda function not responding **Solution**: Verify function name and permissions ### Debug Commands ```bash # Test AWS credentials aws sts get-caller-identity # Test S3 access aws s3 ls s3://fredmlv1/ # Test Lambda function aws lambda invoke --function-name fred-ml-processor --payload '{}' response.json ``` ## Production Considerations ### Security 1. **Use IAM Roles**: Instead of access keys when possible 2. **Rotate Credentials**: Regularly update AWS credentials 3. **Monitor Access**: Use CloudTrail to monitor API calls ### Performance 1. **Caching**: Use Streamlit caching for expensive operations 2. **Connection Pooling**: Reuse AWS connections 3. **Error Handling**: Implement proper error handling ### Monitoring 1. **Streamlit Cloud Metrics**: Monitor app performance 2. **AWS CloudWatch**: Monitor Lambda and S3 usage 3. **Custom Alerts**: Set up alerts for failures ## Custom Domain (Optional) If you want to use a custom domain: 1. **Domain Setup**: Configure your domain in Streamlit Cloud 2. **SSL Certificate**: Streamlit Cloud handles SSL automatically 3. **DNS Configuration**: Update your DNS records ## Cost Optimization ### Streamlit Cloud - **Free Tier**: 1 app, limited usage - **Team Plan**: Multiple apps, more resources - **Enterprise**: Custom pricing ### AWS Costs - **Lambda**: Pay per invocation - **S3**: Pay per storage and requests - **EventBridge**: Minimal cost for scheduling ## Support ### Streamlit Cloud Support - **Documentation**: [docs.streamlit.io](https://docs.streamlit.io) - **Community**: [discuss.streamlit.io](https://discuss.streamlit.io) - **GitHub**: [github.com/streamlit/streamlit](https://github.com/streamlit/streamlit) ### AWS Support - **Documentation**: [docs.aws.amazon.com](https://docs.aws.amazon.com) - **Support Center**: [aws.amazon.com/support](https://aws.amazon.com/support) --- **Next Steps**: After deployment, test the complete workflow and monitor for any issues.