diff --git a/.github/workflows/dedo-duro-analysis.yml b/.github/workflows/dedo-duro-analysis.yml index 8d8fa93..1c35c3a 100644 --- a/.github/workflows/dedo-duro-analysis.yml +++ b/.github/workflows/dedo-duro-analysis.yml @@ -1,39 +1,27 @@ +# Dedo-Duro AWS Resource Analysis +# Automated weekly analysis with on-demand triggering + name: Dedo-Duro AWS Analysis on: - # Run weekly on Monday at 6 AM UTC schedule: + # Run weekly on Monday at 6 AM UTC - cron: '0 6 * * 1' - - # Allow manual trigger + workflow_dispatch: inputs: - region: - description: 'AWS Region to analyze (leave empty for default)' - required: false - type: string resource_types: - description: 'Comma-separated resource types (leave empty for all)' + description: 'Comma-separated resource types (e.g., ec2,rds,s3)' required: false - type: string - output_format: - description: 'Output format' + default: 'ec2,rds,s3,ebs,lambda,dynamodb' + regions: + description: 'Comma-separated AWS regions (e.g., us-east-1,us-west-2)' required: false - default: 'html' - type: choice - options: - - html - - json - - csv - multi_region: - description: 'Analyze all regions' + default: 'us-east-1' + environment: + description: 'Environment filter (prod, test, dev, or empty for all)' required: false - default: false - type: boolean - environment_filter: - description: 'Environment filter (prod, test, dev)' - required: false - type: string + default: '' env: PYTHON_VERSION: '3.11' @@ -42,165 +30,115 @@ jobs: analyze: name: Run AWS Resource Analysis runs-on: ubuntu-latest + permissions: - id-token: write # Required for OIDC authentication + id-token: write # For OIDC authentication contents: read - + steps: - - name: Checkout repository + - name: Checkout Repository uses: actions/checkout@v4 - + - name: Set up Python uses: actions/setup-python@v5 with: python-version: ${{ env.PYTHON_VERSION }} cache: 'pip' - - - name: Install dependencies + + - name: Install Dependencies run: | python -m pip install --upgrade pip pip install -r requirements.txt - - - name: Configure AWS credentials + + - name: Configure AWS Credentials uses: aws-actions/configure-aws-credentials@v4 - env: - INPUT_REGION: ${{ inputs.region }} - DEFAULT_REGION: ${{ secrets.AWS_DEFAULT_REGION }} with: role-to-assume: ${{ secrets.AWS_ROLE_ARN }} - aws-region: ${{ inputs.region || secrets.AWS_DEFAULT_REGION || 'us-east-1' }} - + aws-region: us-east-1 + # Alternative: Use access keys (less secure) + # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + - name: Run Dedo-Duro Analysis id: analysis - env: - INPUT_REGION: ${{ inputs.region }} - INPUT_RESOURCE_TYPES: ${{ inputs.resource_types }} - INPUT_OUTPUT_FORMAT: ${{ inputs.output_format }} - INPUT_MULTI_REGION: ${{ inputs.multi_region }} - INPUT_ENVIRONMENT: ${{ inputs.environment_filter }} run: | - # Build command with optional parameters using environment variables - CMD="python main.py" - - # Add region if specified (validate alphanumeric and hyphens only) - if [ -n "$INPUT_REGION" ]; then - SAFE_REGION=$(echo "$INPUT_REGION" | grep -E '^[a-z0-9-]+$' || echo "") - if [ -n "$SAFE_REGION" ]; then - CMD="$CMD --region $SAFE_REGION" - fi - fi - - # Add resource types if specified (validate alphanumeric, commas, underscores) - if [ -n "$INPUT_RESOURCE_TYPES" ]; then - SAFE_TYPES=$(echo "$INPUT_RESOURCE_TYPES" | grep -E '^[a-zA-Z0-9_,]+$' || echo "") - if [ -n "$SAFE_TYPES" ]; then - CMD="$CMD --resource-types $SAFE_TYPES" - fi - fi - - # Add output format (choice type, already validated) - if [ -n "$INPUT_OUTPUT_FORMAT" ]; then - CMD="$CMD --output-format $INPUT_OUTPUT_FORMAT" - else - CMD="$CMD --output-format html" - fi - - # Add multi-region flag if enabled - if [ "$INPUT_MULTI_REGION" = "true" ]; then - CMD="$CMD --multi-region" + # Set default values + RESOURCE_TYPES="${{ github.event.inputs.resource_types || 'ec2,rds,s3,ebs,lambda' }}" + REGIONS="${{ github.event.inputs.regions || 'us-east-1' }}" + ENVIRONMENT="${{ github.event.inputs.environment || '' }}" + + # Build command + CMD="python main.py --resource-types $RESOURCE_TYPES --regions $REGIONS --output-format html,json" + + if [ -n "$ENVIRONMENT" ]; then + CMD="$CMD --environment $ENVIRONMENT" fi - - # Add environment filter if specified (validate alphanumeric only) - if [ -n "$INPUT_ENVIRONMENT" ]; then - SAFE_ENV=$(echo "$INPUT_ENVIRONMENT" | grep -E '^[a-zA-Z]+$' || echo "") - if [ -n "$SAFE_ENV" ]; then - CMD="$CMD --environment $SAFE_ENV" - fi - fi - - # Run analysis + echo "Running: $CMD" - eval "$CMD" - - # Set output file path - REPORT=$(ls aws-optimization-report.* 2>/dev/null | head -1) - echo "report_file=$REPORT" >> "$GITHUB_OUTPUT" - - - name: Upload Report Artifact + $CMD + + # Set outputs + echo "report_date=$(date +%Y%m%d_%H%M%S)" >> $GITHUB_OUTPUT + + - name: Upload HTML Report uses: actions/upload-artifact@v4 with: - name: dedo-duro-report-${{ github.run_number }} + name: dedo-duro-report-${{ steps.analysis.outputs.report_date }} path: | - aws-optimization-report.* - retention-days: 30 - - - name: Upload to S3 (optional) + aws_resource_report_*.html + aws_resource_report_*.json + retention-days: 90 + + - name: Upload to S3 (Optional) if: ${{ secrets.REPORT_S3_BUCKET != '' }} - env: - REPORT_FILE: ${{ steps.analysis.outputs.report_file }} - S3_BUCKET: ${{ secrets.REPORT_S3_BUCKET }} - run: | - if [ -n "$REPORT_FILE" ] && [ -f "$REPORT_FILE" ]; then - TIMESTAMP=$(date +%Y-%m-%d) - aws s3 cp "$REPORT_FILE" "s3://${S3_BUCKET}/reports/${TIMESTAMP}/${REPORT_FILE}" - echo "Report uploaded to s3://${S3_BUCKET}/reports/${TIMESTAMP}/${REPORT_FILE}" - fi - - - name: Create Summary - env: - REPORT_FILE: ${{ steps.analysis.outputs.report_file }} - INPUT_REGION: ${{ inputs.region }} - INPUT_OUTPUT_FORMAT: ${{ inputs.output_format }} run: | - { - echo "## Dedo-Duro Analysis Complete" - echo "" - echo "**Report:** \`${REPORT_FILE:-no report}\`" - echo "**Region:** ${INPUT_REGION:-default}" - echo "**Format:** ${INPUT_OUTPUT_FORMAT:-html}" - echo "" - echo "Download the report from the Artifacts section above." - } >> "$GITHUB_STEP_SUMMARY" + aws s3 cp aws_resource_report_*.html s3://${{ secrets.REPORT_S3_BUCKET }}/reports/ + aws s3 cp aws_resource_report_*.json s3://${{ secrets.REPORT_S3_BUCKET }}/reports/ + + - name: Post Summary to PR/Issue + if: github.event_name == 'workflow_dispatch' + uses: actions/github-script@v7 + with: + script: | + const fs = require('fs'); + + // Read JSON report for summary + const files = fs.readdirSync('.').filter(f => f.endsWith('.json') && f.startsWith('aws_resource_report')); + if (files.length > 0) { + const report = JSON.parse(fs.readFileSync(files[0], 'utf8')); + + let summary = `## Dedo-Duro Analysis Complete\n\n`; + summary += `**Date:** ${new Date().toISOString()}\n`; + summary += `**Regions:** ${{ github.event.inputs.regions || 'us-east-1' }}\n\n`; + summary += `### Summary\n`; + + if (report.summary) { + summary += `- **Total Resources:** ${report.summary.total_resources || 'N/A'}\n`; + summary += `- **Potential Savings:** $${(report.summary.total_potential_savings || 0).toLocaleString()}/month\n`; + } + + core.summary.addRaw(summary).write(); + } notify: name: Send Notifications needs: analyze runs-on: ubuntu-latest if: always() - + steps: - - name: Send Slack Notification (optional) + - name: Notify Slack if: ${{ secrets.SLACK_WEBHOOK_URL != '' }} - uses: slackapi/slack-github-action@v1.25.0 + uses: 8398a7/action-slack@v3 + with: + status: ${{ needs.analyze.result }} + fields: repo,message,commit,author,action,eventName,ref,workflow env: SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }} - SLACK_WEBHOOK_TYPE: INCOMING_WEBHOOK - ANALYZE_RESULT: ${{ needs.analyze.result }} - RUN_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} - with: - payload: | - { - "text": "Dedo-Duro AWS Analysis Complete", - "blocks": [ - { - "type": "header", - "text": { - "type": "plain_text", - "text": "Dedo-Duro AWS Analysis Report" - } - }, - { - "type": "section", - "fields": [ - { - "type": "mrkdwn", - "text": "*Status:*\n${{ needs.analyze.result }}" - }, - { - "type": "mrkdwn", - "text": "*Run:*\n<${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}|View Details>" - } - ] - } - ] - } + + - name: Notify Teams + if: ${{ secrets.TEAMS_WEBHOOK_URL != '' && needs.analyze.result != 'success' }} + run: | + curl -H 'Content-Type: application/json' \ + -d '{"@type":"MessageCard","title":"Dedo-Duro Analysis","text":"Analysis completed with status: ${{ needs.analyze.result }}"}' \ + ${{ secrets.TEAMS_WEBHOOK_URL }} diff --git a/README.md b/README.md index 233814b..80d0dff 100755 --- a/README.md +++ b/README.md @@ -220,6 +220,25 @@ Comprehensive cost optimization for AWS AI/ML services: - **CircleCI Config**: Configuration for CircleCI pipelines - **Artifact Upload**: Automatic report upload to S3 or CI artifacts +#### Web Dashboard (Enterprise) +- **Real-time Monitoring**: Flask-based web dashboard for live analysis status +- **REST API**: Full API for triggering analysis and retrieving results +- **Report History**: View and compare historical analysis reports +- **Alert Configuration**: Configure custom alert thresholds via web interface + +#### Notifications (Enterprise) +- **Slack Integration**: Send alerts and reports to Slack channels via webhooks +- **Microsoft Teams**: Teams channel integration for notifications +- **Custom Alerts**: Configurable thresholds for cost, security, and idle resources +- **Alert Severity Levels**: Critical, warning, and info classifications + +#### Auto-Remediation (Experimental) +- **Safe Operations Only**: Tagging and snapshot operations by default +- **Dry-Run Mode**: All actions simulated unless explicitly enabled +- **Approval Workflow**: High-risk actions require manual approval +- **Audit Logging**: Complete audit trail of all remediation actions +- **Risk Levels**: SAFE, LOW, MEDIUM, HIGH, CRITICAL classifications + ### Advanced Capabilities & Reporting - **Multi-Region & China Region Support:** Analyzes resources across multiple specified AWS regions simultaneously, including AWS China regions (`cn-north-1`, `cn-northwest-1`). @@ -468,6 +487,26 @@ flowchart LR │ └── dedo-duro-analysis.yml # Automated analysis workflow ├── .circleci/ # CircleCI configuration (v12.0) │ └── config.yml # CircleCI pipeline config +├── web/ # Web Dashboard (v12.0-Enterprise) +│ ├── app.py # Flask application +│ ├── templates/ # HTML templates +│ │ └── index.html # Dashboard template +│ └── static/ # CSS/JS assets +│ ├── style.css # Dashboard styles +│ └── app.js # Dashboard JavaScript +├── notifications/ # Notification System (v12.0-Enterprise) +│ ├── __init__.py +│ ├── slack.py # Slack webhook integration +│ ├── teams.py # Microsoft Teams integration +│ └── alerting.py # Alert manager with thresholds +├── remediation/ # Auto-Remediation (v12.0-Enterprise) +│ ├── __init__.py +│ ├── base.py # Base remediation framework +│ ├── ec2_remediation.py # EC2 remediation actions +│ ├── rds_remediation.py # RDS remediation actions +│ └── s3_remediation.py # S3 remediation actions +├── docs/ # Documentation +│ └── kubernetes_permissions.md # K8s permissions guide └── utils/ # Utility functions (shared) ├── __init__.py ├── aws_utils.py # AWS-specific utilities @@ -1396,13 +1435,19 @@ Key milestones: v2.0 (architecture), v3.0 (security), v4.0 (Spot), v5.0 (orphan) - ~~Reading files with tags and metadata to facilitate the resource grouping process~~ → **Tag-based grouping** (`--grouping-tags`) - ~~Create the all-in option - Run for a set of accounts at the same time~~ → **Multi-Account Analysis** (`--accounts-file`, `--all-accounts`) +### Completed in v12.0-Enterprise ✅ + +- ~~Web interface for real-time monitoring~~ → **Web Dashboard** (`web/app.py` - Flask-based) +- ~~Auto-remediation capabilities (experimental)~~ → **Remediation Framework** (`remediation/` module) +- ~~Integration with Slack/Teams for notifications~~ → **Notification System** (`notifications/` module) +- ~~Custom alerting thresholds~~ → **Alert Manager** (`notifications/alerting.py`) +- ~~Kubernetes permissions documentation~~ → **Kubernetes Permissions** (`docs/kubernetes_permissions.md`) + ### Pending -- List new permissions required for new functions, such as Kubernetes (partial - see `docs/kubernetes_permissions.md`) -- Web interface for real-time monitoring -- Auto-remediation capabilities (experimental) -- Integration with Slack/Teams for notifications -- Custom alerting thresholds +- Enhanced web dashboard with real-time WebSocket updates +- Remediation approval workflow via web interface +- Historical trend analysis and forecasting --- diff --git a/changelog.md b/changelog.md index 35d5bb7..b47892e 100755 --- a/changelog.md +++ b/changelog.md @@ -2,6 +2,80 @@ All notable changes to this project will be documented in this file. +## [12.0-Enterprise] - 2025-01-26 + +### Added + +- **Multi-Account Analysis (`core/multi_account.py`)**: New orchestration module for analyzing multiple AWS accounts in a single run. + - Support for `--accounts-file` JSON configuration + - `--all-accounts` option for AWS Organizations integration + - Cross-account role assumption with automatic credential management + - Support for AWS GovCloud (`aws-us-gov`) and China (`aws-cn`) partitions + +- **Cost Explorer Analyzer (`analyzers/cost_explorer_analyzer.py`)**: New analyzer integrating with AWS Cost Explorer API. + - Actual spend data vs. estimated costs comparison + - Cost anomaly detection + - Service-by-service cost breakdown + - 30-day cost trends and forecasting + +- **RTO/RPO Analyzer (`analyzers/rto_analyzer.py`)**: New analyzer for disaster recovery readiness assessment. + - Backup configuration analysis + - Cross-region replication status + - Recovery time objectives evaluation + - Recovery point objectives metrics + +- **EKS Session Analyzer (`analyzers/eks_session_analyzer.py`)**: New analyzer for Kubernetes session monitoring. + - Active kubectl session tracking + - SSM sessions to EKS nodes monitoring + - Unusual session pattern detection + +- **EKS Deployment Lifecycle (`analyzers/eks_deployment_lifecycle.py`)**: New analyzer for deployment health. + - Deployment rollout status tracking + - Pod restart pattern analysis + - Deployment age vs. update frequency analysis + +- **Environment Filtering**: New `--environment` CLI argument for prod/test/dev filtering. + - Tag-based environment detection + - Configurable environment tags in `AnalysisConfig` + +- **Tag-Based Resource Grouping**: Enhanced HTML reports with tag-based grouping sections. + - Configurable grouping tags + - Visual separation by business unit, application, or custom tags + +- **CI/CD Integration Templates**: + - GitHub Actions workflow (`.github/workflows/dedo-duro-analysis.yml`) + - Jenkins pipeline (`ci/Jenkinsfile`) + - CircleCI configuration (`.circleci/config.yml`) + +- **Web Interface (`web/app.py`)**: New Flask-based web dashboard for real-time monitoring. + - REST API for analysis triggering + - Interactive report viewer + - Historical report comparison + - Real-time analysis status + +- **Notifications Module (`notifications/`)**: Integration with messaging platforms. + - Slack webhook integration + - Microsoft Teams integration + - Custom alerting thresholds + - Cost threshold alerts + +- **Auto-Remediation (`remediation/`)**: Experimental auto-fix capabilities. + - Safe operations only (tagging, snapshots) + - Dry-run mode by default + - Audit logging for all actions + +- **Kubernetes Permissions Documentation (`docs/kubernetes_permissions.md`)**: Comprehensive guide for EKS monitoring permissions. + - IAM permissions for EKS, SSM, CloudWatch, CloudTrail + - Kubernetes RBAC ClusterRole and ClusterRoleBinding examples + - Verification commands and security best practices + +### Changed + +- Updated `config.py` with `MultiAccountConfig`, `AlertConfig`, and `environment_filter` fields +- Enhanced `main.py` with new CLI arguments for all v12.0 features +- Improved `core/analyzer.py` with multi-account support and environment filtering +- Enhanced `reporters/html_reporter.py` with tag-based grouping sections + ## [15.0] - 2025-05-23 ### Added diff --git a/ci/Jenkinsfile b/ci/Jenkinsfile index 53d0bda..edb2399 100644 --- a/ci/Jenkinsfile +++ b/ci/Jenkinsfile @@ -1,239 +1,91 @@ -/** - * Dedo-Duro AWS Resource Analysis Pipeline - * - * This Jenkinsfile runs the Dedo-Duro analyzer to identify AWS cost - * optimization opportunities and generate reports. - * - * Prerequisites: - * - AWS credentials configured (via IAM role or credentials plugin) - * - Python 3.9+ available on agent - * - pip installed - * - * Parameters: - * - AWS_REGION: Target AWS region (optional) - * - RESOURCE_TYPES: Comma-separated analyzer keys (optional) - * - OUTPUT_FORMAT: Report format (html, json, csv) - * - MULTI_REGION: Analyze all regions (boolean) - * - ENVIRONMENT_FILTER: Filter by environment tag (prod, test, dev) - */ +// Dedo-Duro Jenkins Pipeline +// Automated AWS Resource Analysis pipeline { - agent any - + agent { + docker { + image 'python:3.11-slim' + args '-v /var/run/docker.sock:/var/run/docker.sock' + } + } + parameters { - string( - name: 'AWS_REGION', - defaultValue: '', - description: 'AWS region to analyze (leave empty for default)' - ) - string( - name: 'RESOURCE_TYPES', - defaultValue: '', - description: 'Comma-separated list of analyzer keys (e.g., ec2,s3,rds)' - ) - choice( - name: 'OUTPUT_FORMAT', - choices: ['html', 'json', 'csv'], - description: 'Report output format' - ) - booleanParam( - name: 'MULTI_REGION', - defaultValue: false, - description: 'Analyze resources across all AWS regions' - ) - string( - name: 'ENVIRONMENT_FILTER', - defaultValue: '', - description: 'Filter resources by environment (prod, test, dev)' - ) - string( - name: 'S3_BUCKET', - defaultValue: '', - description: 'S3 bucket for report upload (optional)' - ) + string(name: 'RESOURCE_TYPES', defaultValue: 'ec2,rds,s3,ebs,lambda', description: 'Comma-separated resource types') + string(name: 'REGIONS', defaultValue: 'us-east-1', description: 'Comma-separated AWS regions') + string(name: 'ENVIRONMENT', defaultValue: '', description: 'Environment filter (prod, test, dev)') } - + environment { - PYTHON_VERSION = '3.11' - REPORT_DIR = 'reports' + AWS_DEFAULT_REGION = 'us-east-1' } - + triggers { - // Run weekly on Monday at 6 AM - cron('H 6 * * 1') - } - - options { - buildDiscarder(logRotator(numToKeepStr: '30')) - timestamps() - timeout(time: 60, unit: 'MINUTES') - disableConcurrentBuilds() + cron('H 6 * * 1') // Weekly on Monday } - + stages { - stage('Checkout') { - steps { - checkout scm - } - } - - stage('Setup Python Environment') { + stage('Setup') { steps { sh ''' - python3 -m venv venv - . venv/bin/activate pip install --upgrade pip pip install -r requirements.txt ''' } } - - stage('Validate Parameters') { + + stage('Analyze') { steps { - script { - // Validate region format if provided - if (params.AWS_REGION) { - if (!(params.AWS_REGION ==~ /^[a-z]{2}-[a-z]+-\d+$/)) { - error("Invalid AWS region format: ${params.AWS_REGION}") - } - } - - // Validate resource types format if provided - if (params.RESOURCE_TYPES) { - if (!(params.RESOURCE_TYPES ==~ /^[a-zA-Z0-9_,]+$/)) { - error("Invalid resource types format: ${params.RESOURCE_TYPES}") - } - } - - // Validate environment filter if provided - if (params.ENVIRONMENT_FILTER) { - def validEnvs = ['prod', 'production', 'test', 'testing', 'dev', 'development', 'staging', 'qa'] - if (!(params.ENVIRONMENT_FILTER.toLowerCase() in validEnvs)) { - error("Invalid environment filter: ${params.ENVIRONMENT_FILTER}") - } - } - } - } - } - - stage('Run Analysis') { - steps { - withAWS(credentials: 'aws-credentials', region: params.AWS_REGION ?: 'us-east-1') { + withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', + credentialsId: 'aws-credentials']]) { script { - def cmd = '. venv/bin/activate && python main.py' - - // Add optional parameters - if (params.AWS_REGION) { - cmd += " --region ${params.AWS_REGION}" + def cmd = "python main.py --resource-types ${params.RESOURCE_TYPES} --regions ${params.REGIONS} --output-format html,json" + if (params.ENVIRONMENT) { + cmd += " --environment ${params.ENVIRONMENT}" } - - if (params.RESOURCE_TYPES) { - cmd += " --resource-types ${params.RESOURCE_TYPES}" - } - - cmd += " --output-format ${params.OUTPUT_FORMAT}" - - if (params.MULTI_REGION) { - cmd += ' --multi-region' - } - - if (params.ENVIRONMENT_FILTER) { - cmd += " --environment ${params.ENVIRONMENT_FILTER}" - } - sh cmd } } } } - - stage('Archive Reports') { + + stage('Archive') { steps { - script { - // Find and archive the report - def reportPattern = "aws-optimization-report.${params.OUTPUT_FORMAT}" - - archiveArtifacts( - artifacts: reportPattern, - allowEmptyArchive: false, - fingerprint: true - ) - - // Publish HTML report if format is HTML - if (params.OUTPUT_FORMAT == 'html') { - publishHTML(target: [ - allowMissing: false, - alwaysLinkToLastBuild: true, - keepAll: true, - reportDir: '.', - reportFiles: 'aws-optimization-report.html', - reportName: 'Dedo-Duro Report' - ]) - } - } + archiveArtifacts artifacts: 'aws_resource_report_*.html,aws_resource_report_*.json', fingerprint: true } } - + stage('Upload to S3') { when { - expression { params.S3_BUCKET?.trim() } + environment name: 'REPORT_S3_BUCKET', value: '' } steps { - withAWS(credentials: 'aws-credentials', region: params.AWS_REGION ?: 'us-east-1') { - script { - def timestamp = new Date().format('yyyy-MM-dd') - def reportFile = "aws-optimization-report.${params.OUTPUT_FORMAT}" - def s3Key = "dedo-duro-reports/${timestamp}/${reportFile}" - - s3Upload( - bucket: params.S3_BUCKET, - file: reportFile, - path: s3Key - ) - - echo "Report uploaded to s3://${params.S3_BUCKET}/${s3Key}" - } + withCredentials([[$class: 'AmazonWebServicesCredentialsBinding', + credentialsId: 'aws-credentials']]) { + sh ''' + aws s3 cp aws_resource_report_*.html s3://${REPORT_S3_BUCKET}/reports/ + aws s3 cp aws_resource_report_*.json s3://${REPORT_S3_BUCKET}/reports/ + ''' } } } } - + post { always { - cleanWs() + publishHTML(target: [ + allowMissing: true, + alwaysLinkToLastBuild: true, + keepAll: true, + reportDir: '.', + reportFiles: 'aws_resource_report_*.html', + reportName: 'Dedo-Duro Report' + ]) } - success { - echo 'Dedo-Duro analysis completed successfully!' - - // Send Slack notification if configured - script { - try { - slackSend( - channel: '#aws-cost-alerts', - color: 'good', - message: "Dedo-Duro Analysis Complete - ${env.BUILD_URL}" - ) - } catch (Exception e) { - echo "Slack notification skipped: ${e.message}" - } - } + echo 'Analysis completed successfully!' } - failure { - echo 'Dedo-Duro analysis failed!' - - script { - try { - slackSend( - channel: '#aws-cost-alerts', - color: 'danger', - message: "Dedo-Duro Analysis Failed - ${env.BUILD_URL}" - ) - } catch (Exception e) { - echo "Slack notification skipped: ${e.message}" - } - } + echo 'Analysis failed!' } } } diff --git a/complete_simulated_report.html b/complete_simulated_report.html index 03bdba0..2b7e9df 100644 --- a/complete_simulated_report.html +++ b/complete_simulated_report.html @@ -88,20 +88,20 @@

Executive Summary

Analyzed Regions
eu-west-1, us-east-1, us-west-2
-
Analysis Date
2026-01-26 18:50:06 UTC
+
Analysis Date
2026-01-26 19:10:33 UTC
Resources Analyzed
84
-
Optimization Opportunities
20 (23.8%)
-
Est. Monthly Savings (Spot Priority)
$534.97
-
Est. Annual Savings (Spot Priority)
$6419.66
-
Est. Monthly Savings (Right-Sizing Priority)
$891.62
-
Est. Annual Savings (Right-Sizing Priority)
$10699.44
+
Optimization Opportunities
23 (27.4%)
+
Est. Monthly Savings (Spot Priority)
$561.43
+
Est. Annual Savings (Spot Priority)
$6737.18
+
Est. Monthly Savings (Right-Sizing Priority)
$935.72
+
Est. Annual Savings (Right-Sizing Priority)
$11228.64
-
Est. Annual Savings (Schedule)
$89192.84
+
Est. Annual Savings (Schedule)
$140453.75
-
Old EBS Snapshots (> 1 Year)
24
-
Est. Monthly Cost (Old Snapshots)
$309.85
+
Old EBS Snapshots (> 1 Year)
18
+
Est. Monthly Cost (Old Snapshots)
$223.47
-
Security Findings
14
+
Security Findings
7
@@ -133,12 +133,12 @@

AI/ML Services Resources

new Chart(document.getElementById('savingsChart'), { type: 'bar', data: { - labels: ["Cost Explorer", "Bedrock", "Ec2", "S3", "Sagemaker", "Ebs", "Lambda", "Rds"], + labels: ["Cost Explorer", "S3", "Bedrock", "Ec2", "Rds", "Ebs"], datasets: [{ label: 'Est. Monthly Savings ($)', - data: [21532.07, 1200.0, 891.62, 505.85, 309.13, 247.76, 47.33, 42.03], - backgroundColor: ["rgba(54, 162, 235, 0.8)", "rgba(255, 99, 132, 0.8)", "rgba(255, 206, 86, 0.8)", "rgba(75, 192, 192, 0.8)", "rgba(153, 102, 255, 0.8)", "rgba(255, 159, 64, 0.8)", "rgba(199, 199, 199, 0.8)", "rgba(83, 102, 255, 0.8)"], - borderColor: ["rgba(54, 162, 235, 1)", "rgba(255, 99, 132, 1)", "rgba(255, 206, 86, 1)", "rgba(75, 192, 192, 1)", "rgba(153, 102, 255, 1)", "rgba(255, 159, 64, 1)", "rgba(199, 199, 199, 1)", "rgba(83, 102, 255, 1)"], + data: [34328.1, 1726.73, 1200.0, 935.72, 651.22, 173.16], + backgroundColor: ["rgba(54, 162, 235, 0.8)", "rgba(255, 99, 132, 0.8)", "rgba(255, 206, 86, 0.8)", "rgba(75, 192, 192, 0.8)", "rgba(153, 102, 255, 0.8)", "rgba(255, 159, 64, 0.8)"], + borderColor: ["rgba(54, 162, 235, 1)", "rgba(255, 99, 132, 1)", "rgba(255, 206, 86, 1)", "rgba(75, 192, 192, 1)", "rgba(153, 102, 255, 1)", "rgba(255, 159, 64, 1)"], borderWidth: 1 }] }, @@ -228,37 +228,37 @@

AI/ML Services Resources

1 Cost Explorer - anomaly-6552 (Amazon EC2) + anomaly-4824 (Amazon CloudFront) N/A - $13848.16 - Investigate 140.0% cost increase + $13655.30 + Investigate 149.0% cost increase 2 Cost Explorer - anomaly-2328 (Amazon EC2) + anomaly-9896 (AWS Lambda) N/A - $2541.51 - Investigate 41.0% cost increase + $12470.44 + Investigate 147.0% cost increase 3 Cost Explorer - anomaly-4036 (AWS Lambda) + anomaly-1668 (AWS Lambda) N/A - $2283.17 - Investigate 64.0% cost increase + $5810.37 + Investigate 118.0% cost increase 4 Cost Explorer - anomaly-5958 (Amazon RDS) + anomaly-3831 (AWS Lambda) N/A - $1775.38 - Investigate 58.0% cost increase + $1614.94 + Investigate 90.0% cost increase @@ -273,46 +273,46 @@

AI/ML Services Resources

6 Cost Explorer - anomaly-9783 (Amazon RDS) + anomaly-4959 (Amazon RDS) N/A - $1083.85 - Investigate 85.0% cost increase + $777.05 + Investigate 67.0% cost increase 7 - Ec2 - i-0537d818 (dev-web-01) - t3.medium - $394.47 - Consider stopping + S3 + bucket-1 + N/A + $619.95 + Add lifecycle policy for cost optimization 8 - Sagemaker - notebook-experimentation-3 (notebook-3) - ml.t3.medium - $309.13 - Stop idle notebook instance + S3 + bucket-9 + N/A + $463.03 + Add lifecycle policy for cost optimization 9 - Ec2 - i-023f4017 (prod-api-02) - m5.xlarge - $216.67 - Consider stopping + Rds + db-02 (database-2) + db.m5.large + $300.50 + Consider downsizing instance class 10 - S3 - bucket-3 - N/A - $212.01 - Add lifecycle policy for cost optimization + Rds + db-08 (database-8) + db.m5.xlarge + $283.82 + Consider downsizing instance class @@ -326,7 +326,7 @@

Table of Contents

  • Top 10 Savings Opportunities
  • Ec2 (15)
  • Ebs (12)
  • S3 (10)
  • Rds (8)
  • SageMaker Analysis (5)
  • Lambda Analysis (10)
  • Bedrock (1)
  • Cost Explorer (5)
  • Eks Deployments (5)
  • Eks Sessions (6)
  • Rto Analysis (7)
  • -

    Ec2 (15 findings)

    Account IDAccount AliasInstance IDNameRegionNike OwnerCurrent TypeRecommended TypeOSCPU Utilization (%)Network I/O (MB/s)StatusRecommendationEst. Monthly Savings
    123456789012simulated-accounti-00d8b28fdev-web-01eu-west-1devops-teamt3.mediumt3.microUbuntu 22.0445.50%93.2IdleConsider stopping$394.47
    123456789012simulated-accounti-035609e7prod-api-02eu-west-1platform-teamm5.xlargem6g.mediumUbuntu 22.048.00%14.7IdleConsider stopping$216.67
    123456789012simulated-accounti-03358932prod-worker-03us-west-2data-teamm5.xlargem5.xlargeUbuntu 22.0418.50%8.8ActiveConsider no action needed$0.00
    123456789012simulated-accounti-02ad82a3dev-worker-04eu-west-1ml-teamc5.xlarget3.microWindows Server 202232.50%7.4OversizedConsider downsizing$112.28
    123456789012simulated-accounti-01114819prod-api-05us-west-2platform-teamt3.smallt3.smallAmazon Linux 202358.90%43.5ActiveConsider no action needed$0.00
    123456789012simulated-accounti-02d29aa0dev-api-06eu-west-1platform-teamr5.xlarger5.xlargeWindows Server 202236.90%52.1ActiveConsider no action needed$0.00
    123456789012simulated-accounti-015221cdstaging-web-07us-east-1devops-teamm5.xlargem5.xlargeRHEL 871.10%41.9ActiveConsider no action needed$0.00
    123456789012simulated-accounti-04abd119prod-db-08us-west-2devops-teamm5.largem6g.largeUbuntu 22.048.80%46.9IdleConsider stopping$168.20
    123456789012simulated-accounti-05f074beprod-api-09us-east-1backend-teamt3.smallt3.smallAmazon Linux 242.90%74.5ActiveConsider no action needed$0.00
    123456789012simulated-accounti-04923c56prod-api-10us-west-2ml-teamt3.smallt3.smallRHEL 822.50%121.2ActiveConsider no action needed$0.00
    123456789012simulated-accounti-03103acdstaging-worker-11us-east-1ml-teamr5.xlarger5.xlargeAmazon Linux 202316.60%70.3ActiveConsider no action needed$0.00
    123456789012simulated-accounti-0407a0dedev-db-12eu-west-1devops-teamr5.larger5.largeAmazon Linux 202326.30%80.8ActiveConsider no action needed$0.00
    123456789012simulated-accounti-00b3ab99dev-worker-13us-east-1devops-teamr5.larger5.largeRHEL 873.60%44.0ActiveConsider no action needed$0.00
    123456789012simulated-accounti-01d666b1dev-api-14us-west-2backend-teamt3.microt3.microAmazon Linux 202327.60%17.9ActiveConsider no action needed$0.00
    123456789012simulated-accounti-01068c9adev-db-15eu-west-1platform-teamt3.mediumt3.mediumAmazon Linux 202353.80%89.8ActiveConsider no action needed$0.00

    Ebs (12 findings)

    Account IDAccount AliasVolume IDNameRegionNike OwnerCurrent TypeSize (GB)IOPSThroughput (MB/s)Attached InstanceRecommendationEst. Monthly Savings
    123456789012simulated-accountvol-031e9a90volume-temp-1us-west-2devops-teamgp317483102405i-01f825dfOK$0.00
    123456789012simulated-accountvol-04d839c3volume-data-2us-east-1devops-teamgp2956790161i-01ffeabbMigrate to gp3$19.12
    123456789012simulated-accountvol-05ecdf46volume-temp-3us-west-2devops-teamst11416137565i-04d2a439OK$0.00
    123456789012simulated-accountvol-03764972volume-temp-4us-west-2backend-teamst111722510154i-05cd53d3OK$0.00
    123456789012simulated-accountvol-040d127avolume-backup-5us-west-2devops-teamio112027267130i-029eb240OK$0.00
    123456789012simulated-accountvol-04daf759volume-backup-6us-east-1backend-teamsc112782148158N/ADelete or snapshot unattached volume$102.24
    123456789012simulated-accountvol-049a3f47volume-data-7us-west-2platform-teamgp2604184764i-02840dd9Migrate to gp3$12.08
    123456789012simulated-accountvol-020a341cvolume-temp-8us-west-2backend-teamsc11911418136i-026f333fOK$0.00
    123456789012simulated-accountvol-05229e60volume-data-9us-east-1devops-teamio1150014110189i-04fc40d0OK$0.00
    123456789012simulated-accountvol-011417cbvolume-temp-10us-west-2data-teamio214294546208N/ADelete or snapshot unattached volume$114.32
    123456789012simulated-accountvol-00de0275volume-temp-11us-west-2data-teamio115991453855i-03d7b010OK$0.00
    123456789012simulated-accountvol-0176441avolume-root-12us-west-2platform-teamsc11221386170i-0135cdc5OK$0.00

    S3 (10 findings)

    Account IDAccount AliasBucket NameRegionNike OwnerStorage (GB)Lifecycle PolicyRecommendationEst. Monthly Savings
    123456789012simulated-accountprod-logs-5399us-east-1platform-team43485ConfiguredWell configured$0.00
    123456789012simulated-accountprod-static-assets-9432us-east-1backend-team24597ConfiguredWell configured$0.00
    123456789012simulated-accountprod-temp-9053us-east-1data-team15363Not ConfiguredAdd lifecycle policy for cost optimization$212.01
    123456789012simulated-accountprod-backups-5866us-east-1devops-team8898Not ConfiguredAdd lifecycle policy for cost optimization$122.79
    123456789012simulated-accountdev-archives-3333us-east-1platform-team17386ConfiguredWell configured$0.00
    123456789012simulated-accountprod-backups-1289us-east-1platform-team43061ConfiguredWell configured$0.00
    123456789012simulated-accountprod-temp-8289us-east-1platform-team17821ConfiguredWell configured$0.00
    123456789012simulated-accountdev-archives-4799us-east-1platform-team22562ConfiguredWell configured$0.00
    123456789012simulated-accountstaging-backups-5279us-east-1devops-team14901ConfiguredWell configured$0.00
    123456789012simulated-accountprod-data-lake-9344us-east-1platform-team12395Not ConfiguredAdd lifecycle policy for cost optimization$171.05

    Rds (8 findings)

    Account IDAccount AliasDB InstanceNameRegionNike OwnerCurrent TypeStorage (GB)CPU Utilization (%)ConnectionsRecommendationEst. Monthly Savings
    123456789012simulated-accountdb-prod-replica-01database-1us-west-2data-teamdb.t3.medium34547.00%301Well utilized$0.00
    123456789012simulated-accountdb-staging-main-02database-2us-west-2data-teamdb.t3.small4971.20%385Well utilized$0.00
    123456789012simulated-accountdb-prod-replica-03database-3us-east-1analytics-teamdb.r5.xlarge60035.50%169Well utilized$0.00
    123456789012simulated-accountdb-dev-analytics-04database-4us-east-1backend-teamdb.r5.large25749.60%52Well utilized$0.00
    123456789012simulated-accountdb-dev-analytics-05database-5us-west-2analytics-teamdb.m5.xlarge20749.40%260Well utilized$0.00
    123456789012simulated-accountdb-dev-analytics-06database-6us-west-2data-teamdb.t3.micro55256.90%178Well utilized$0.00
    123456789012simulated-accountdb-prod-main-07database-7us-west-2platform-teamdb.t3.micro66317.60%223Consider downsizing instance class$42.03
    123456789012simulated-accountdb-dev-analytics-08database-8us-east-1backend-teamdb.t3.medium44433.50%336Well utilized$0.00

    SageMaker Analysis (5 findings)

    Analysis of SageMaker endpoint and notebook instance usage.

    Account IDAccount AliasResource ARNNameRegionNike OwnerTypeStatusRecommendationEst. Monthly Savings
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:notebook-instance/notebook-data-science-1notebook-1us-east-1ml-teamNotebook InstanceIdleStop idle notebook instance$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:notebook-instance/notebook-data-science-2notebook-2us-east-1ml-teamNotebook InstanceIdleStop idle notebook instance$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:notebook-instance/notebook-experimentation-3notebook-3us-east-1ml-teamNotebook InstanceIdleStop idle notebook instance$309.13
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:endpoint/endpoint-prediction-1endpoint-1us-east-1ml-teamInference EndpointActiveWell utilized endpoint$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:endpoint/endpoint-inference-2endpoint-2us-east-1ml-teamInference EndpointActiveWell utilized endpoint$0.00

    Lambda Analysis (10 findings)

    Analysis of Lambda function configurations and usage.

    Account IDAccount AliasFunction NameRegionNike OwnerRuntimeMemory Size (MB)RecommendationEst. Monthly Savings
    123456789012simulated-accountprod-worker-1us-east-1backend-teamjava171024OK$0.00
    123456789012simulated-accountdev-handler-2us-east-1data-teamgo1.x512OK$0.00
    123456789012simulated-accountdev-processor-3us-east-1data-teamgo1.x3072OK$0.00
    123456789012simulated-accountprod-api-4us-east-1backend-teamnodejs18.x3072OK$0.00
    123456789012simulated-accountprod-handler-5us-east-1ml-teampython3.93072OK$0.00
    123456789012simulated-accountdev-handler-6us-east-1data-teampython3.9128OK$0.00
    123456789012simulated-accountdev-handler-7us-east-1backend-teamjava173072Reduce memory allocation$47.33
    123456789012simulated-accountdev-processor-8us-east-1backend-teamnodejs20.x512OK$0.00
    123456789012simulated-accountdev-api-9us-east-1backend-teampython3.9512OK$0.00
    123456789012simulated-accountprod-api-10us-east-1ml-teamnodejs18.x512OK$0.00

    Bedrock (1 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountpt-claude-instant-prodClaude Instant Productionus-east-1ml-teamN/AConsider on-demand pricing for variable workloads$1,200.00

    Cost Explorer (5 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountanomaly-4036AWS Lambdaus-east-1finops-teamN/AInvestigate 64.0% cost increase$2,283.17
    123456789012simulated-accountanomaly-5958Amazon RDSus-east-1finops-teamN/AInvestigate 58.0% cost increase$1,775.38
    123456789012simulated-accountanomaly-6552Amazon EC2us-east-1finops-teamN/AInvestigate 140.0% cost increase$13,848.16
    123456789012simulated-accountanomaly-9783Amazon RDSus-east-1finops-teamN/AInvestigate 85.0% cost increase$1,083.85
    123456789012simulated-accountanomaly-2328Amazon EC2us-east-1finops-teamN/AInvestigate 41.0% cost increase$2,541.51

    Eks Deployments (5 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountprod-frontendfrontendus-east-1frontend-teamN/ADeployment healthy$0.00
    123456789012simulated-accountprod-backend-apibackend-apius-east-1platform-teamN/AInvestigate restart issues$0.00
    123456789012simulated-accountprod-workerworkerus-east-1devops-teamN/ADeployment healthy$0.00
    123456789012simulated-accountstaging-schedulerschedulerus-east-1frontend-teamN/AReview and update stale deployment$0.00
    123456789012simulated-accountstaging-gatewaygatewayus-east-1platform-teamN/AInvestigate restart issues$0.00

    Eks Sessions (6 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountsession-313248staging-cluster-session-1us-east-1devops-teamN/AReview long-running session for security$0.00
    123456789012simulated-accountsession-800338dev-cluster-session-2us-east-1devops-teamN/AReview long-running session for security$0.00
    123456789012simulated-accountsession-228980staging-cluster-session-3us-east-1devops-teamN/AReview long-running session for security$0.00
    123456789012simulated-accountsession-256279prod-cluster-session-4us-east-1devops-teamN/ANormal session activity$0.00
    123456789012simulated-accountsession-127425dev-cluster-session-5us-east-1devops-teamN/AReview long-running session for security$0.00
    123456789012simulated-accountsession-559543prod-cluster-session-6us-east-1devops-teamN/AReview long-running session for security$0.00

    Rto Analysis (7 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountdb-prod-1database-1us-east-1data-teamN/AEnable cross-region backup for disaster recovery$0.00
    123456789012simulated-accountdb-staging-2database-2us-east-1platform-teamN/AEnable cross-region backup for disaster recovery$0.00
    123456789012simulated-accountdb-staging-3database-3us-east-1devops-teamN/ABackup configuration adequate$0.00
    123456789012simulated-accountdb-staging-4database-4us-east-1platform-teamN/ABackup configuration adequate$0.00
    123456789012simulated-accountbucket-critical-1critical-data-bucket-1us-east-1data-teamN/AEnable cross-region replication for critical data$0.00
    123456789012simulated-accountbucket-critical-2critical-data-bucket-2us-east-1platform-teamN/AEnable cross-region replication for critical data$0.00
    123456789012simulated-accountbucket-critical-3critical-data-bucket-3us-east-1data-teamN/AReplication configured$0.00
    +

    Ec2 (15 findings)

    Account IDAccount AliasInstance IDNameRegionNike OwnerCurrent TypeRecommended TypeOSCPU Utilization (%)Network I/O (MB/s)StatusRecommendationEst. Monthly Savings
    123456789012simulated-accounti-05ccc9f5staging-web-01eu-west-1devops-teamt3.microt3.microRHEL 849.00%140.6IdleConsider stopping$272.93
    123456789012simulated-accounti-01fd98ffstaging-worker-02eu-west-1devops-teamm5.2xlargem6g.mediumUbuntu 22.0444.00%5.8OversizedConsider downsizing$64.61
    123456789012simulated-accounti-051abe56dev-worker-03us-west-2ml-teamr5.larger5.largeRHEL 852.20%119.9ActiveConsider no action needed$0.00
    123456789012simulated-accounti-03a46139staging-web-04us-east-1platform-teamt3.mediumt3.mediumAmazon Linux 263.60%32.6ActiveConsider no action needed$0.00
    123456789012simulated-accounti-047c5b8aprod-web-05us-east-1ml-teamc5.xlargec5.xlargeAmazon Linux 202351.00%12.1ActiveConsider no action needed$0.00
    123456789012simulated-accounti-01a0376fstaging-web-06eu-west-1data-teamr5.xlargem6g.mediumUbuntu 22.0447.40%94.8OversizedConsider downsizing$238.02
    123456789012simulated-accounti-01909d74dev-db-07eu-west-1devops-teamt3.mediumt3.mediumWindows Server 202227.10%52.8ActiveConsider no action needed$0.00
    123456789012simulated-accounti-052aa331prod-db-08eu-west-1ml-teamr5.larger5.largeWindows Server 202267.60%148.6ActiveConsider no action needed$0.00
    123456789012simulated-accounti-04554860dev-api-09us-west-2backend-teamr5.larget3.microAmazon Linux 202339.30%44.9IdleConsider stopping$109.09
    123456789012simulated-accounti-01080c94staging-web-10eu-west-1devops-teamt3.smallt3.smallRHEL 835.90%48.7ActiveConsider no action needed$0.00
    123456789012simulated-accounti-04bbd4dbstaging-api-11us-west-2devops-teamt3.smallt3.smallAmazon Linux 235.10%129.2ActiveConsider no action needed$0.00
    123456789012simulated-accounti-039b338cstaging-api-12eu-west-1devops-teamc5.xlargec5.xlargeWindows Server 202283.20%34.8ActiveConsider no action needed$0.00
    123456789012simulated-accounti-031d88d1staging-worker-13eu-west-1data-teamt3.microt3.microAmazon Linux 261.80%103.4ActiveConsider no action needed$0.00
    123456789012simulated-accounti-03731fd9staging-db-14us-east-1devops-teamr5.xlarget4g.smallWindows Server 202222.00%14.0OversizedConsider downsizing$235.76
    123456789012simulated-accounti-025744eddev-web-15eu-west-1devops-teamt3.microt3.smallRHEL 821.80%70.9OversizedConsider downsizing$15.31

    Ebs (12 findings)

    Account IDAccount AliasVolume IDNameRegionNike OwnerCurrent TypeSize (GB)IOPSThroughput (MB/s)Attached InstanceRecommendationEst. Monthly Savings
    123456789012simulated-accountvol-02ad15cfvolume-root-1us-east-1devops-teamio21225591094i-03c803a1OK$0.00
    123456789012simulated-accountvol-0417fbb2volume-root-2us-west-2devops-teamgp214242463117i-00d4c346Migrate to gp3$28.48
    123456789012simulated-accountvol-0191d7c9volume-root-3us-east-1devops-teamst11389161866i-055b3aa1OK$0.00
    123456789012simulated-accountvol-0521889avolume-data-4us-east-1backend-teamsc13521535122i-037f4d9bOK$0.00
    123456789012simulated-accountvol-053033c3volume-root-5us-east-1devops-teamst113671109108i-020c4dd9OK$0.00
    123456789012simulated-accountvol-0548307bvolume-temp-6us-west-2data-teamst11365937196N/ADelete or snapshot unattached volume$109.20
    123456789012simulated-accountvol-02fbe12cvolume-root-7us-east-1platform-teamsc11286238659i-015df5ecOK$0.00
    123456789012simulated-accountvol-02da8aecvolume-root-8us-west-2platform-teamgp3183615116698i-012a8234OK$0.00
    123456789012simulated-accountvol-056afc99volume-root-9us-west-2data-teamio116887609102i-050d88b4OK$0.00
    123456789012simulated-accountvol-0269e76bvolume-temp-10us-east-1data-teamst117611164190i-01cb717fOK$0.00
    123456789012simulated-accountvol-0234d36dvolume-root-11us-west-2platform-teamgp2177433064i-046e6554Migrate to gp3$35.48
    123456789012simulated-accountvol-0260f3fevolume-root-12us-west-2data-teamio113324185130i-01716cc1OK$0.00

    S3 (10 findings)

    Account IDAccount AliasBucket NameRegionNike OwnerStorage (GB)Lifecycle PolicyRecommendationEst. Monthly Savings
    123456789012simulated-accountprod-logs-9042us-east-1data-team44924Not ConfiguredAdd lifecycle policy for cost optimization$619.95
    123456789012simulated-accountstaging-logs-5527us-east-1data-team10085ConfiguredWell configured$0.00
    123456789012simulated-accountdev-backups-3195us-east-1backend-team14868Not ConfiguredAdd lifecycle policy for cost optimization$205.18
    123456789012simulated-accountstaging-data-lake-5073us-east-1backend-team44515ConfiguredWell configured$0.00
    123456789012simulated-accountstaging-backups-3439us-east-1data-team13780Not ConfiguredAdd lifecycle policy for cost optimization$190.16
    123456789012simulated-accountdev-data-lake-8964us-east-1platform-team10180ConfiguredWell configured$0.00
    123456789012simulated-accountdev-backups-6708us-east-1backend-team7966ConfiguredWell configured$0.00
    123456789012simulated-accountstaging-logs-1923us-east-1data-team177Not ConfiguredAdd lifecycle policy for cost optimization$0.00
    123456789012simulated-accountprod-archives-6395us-east-1data-team33553Not ConfiguredAdd lifecycle policy for cost optimization$463.03
    123456789012simulated-accountprod-archives-4338us-east-1data-team18001Not ConfiguredAdd lifecycle policy for cost optimization$248.41

    Rds (8 findings)

    Account IDAccount AliasDB InstanceNameRegionNike OwnerCurrent TypeStorage (GB)CPU Utilization (%)ConnectionsRecommendationEst. Monthly Savings
    123456789012simulated-accountdb-prod-analytics-01database-1us-east-1platform-teamdb.t3.small16546.70%355Well utilized$0.00
    123456789012simulated-accountdb-dev-analytics-02database-2us-east-1backend-teamdb.m5.large65326.40%379Consider downsizing instance class$300.50
    123456789012simulated-accountdb-prod-main-03database-3us-west-2platform-teamdb.t3.micro16615.90%10Consider downsizing instance class$66.90
    123456789012simulated-accountdb-dev-replica-04database-4us-west-2data-teamdb.t3.small32235.10%209Well utilized$0.00
    123456789012simulated-accountdb-dev-replica-05database-5us-west-2backend-teamdb.r5.large15237.90%374Well utilized$0.00
    123456789012simulated-accountdb-prod-replica-06database-6us-east-1platform-teamdb.t3.medium33247.00%419Well utilized$0.00
    123456789012simulated-accountdb-prod-analytics-07database-7us-east-1analytics-teamdb.m5.xlarge90855.90%243Well utilized$0.00
    123456789012simulated-accountdb-staging-main-08database-8us-west-2backend-teamdb.m5.xlarge7513.70%41Consider downsizing instance class$283.82

    SageMaker Analysis (5 findings)

    Analysis of SageMaker endpoint and notebook instance usage.

    Account IDAccount AliasResource ARNNameRegionNike OwnerTypeStatusRecommendationEst. Monthly Savings
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:notebook-instance/notebook-data-science-1notebook-1us-east-1ml-teamNotebook InstanceIdleStop idle notebook instance$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:notebook-instance/notebook-experimentation-2notebook-2us-east-1ml-teamNotebook InstanceIn UseActive notebook$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:notebook-instance/notebook-ml-training-3notebook-3us-east-1ml-teamNotebook InstanceIdleStop idle notebook instance$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:endpoint/endpoint-inference-1endpoint-1us-east-1ml-teamInference EndpointActiveWell utilized endpoint$0.00
    123456789012simulated-accountarn:aws:sagemaker:us-east-1:123456789012:endpoint/endpoint-inference-2endpoint-2us-east-1ml-teamInference EndpointActiveWell utilized endpoint$0.00

    Lambda Analysis (10 findings)

    Analysis of Lambda function configurations and usage.

    Account IDAccount AliasFunction NameRegionNike OwnerRuntimeMemory Size (MB)RecommendationEst. Monthly Savings
    123456789012simulated-accountprod-processor-1us-east-1ml-teampython3.9512OK$0.00
    123456789012simulated-accountprod-api-2us-east-1backend-teamgo1.x3072OK$0.00
    123456789012simulated-accountdev-worker-3us-east-1platform-teampython3.11256OK$0.00
    123456789012simulated-accountdev-api-4us-east-1ml-teampython3.9512OK$0.00
    123456789012simulated-accountprod-worker-5us-east-1data-teamnodejs20.x3072OK$0.00
    123456789012simulated-accountdev-api-6us-east-1data-teamnodejs20.x3072OK$0.00
    123456789012simulated-accountdev-processor-7us-east-1platform-teampython3.111024OK$0.00
    123456789012simulated-accountdev-worker-8us-east-1ml-teamnodejs18.x2048OK$0.00
    123456789012simulated-accountdev-api-9us-east-1ml-teamjava17128OK$0.00
    123456789012simulated-accountprod-processor-10us-east-1data-teampython3.9128OK$0.00

    Bedrock (1 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountpt-claude-instant-prodClaude Instant Productionus-east-1ml-teamN/AConsider on-demand pricing for variable workloads$1,200.00

    Cost Explorer (5 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountanomaly-4824Amazon CloudFrontus-east-1finops-teamN/AInvestigate 149.0% cost increase$13,655.30
    123456789012simulated-accountanomaly-3831AWS Lambdaus-east-1finops-teamN/AInvestigate 90.0% cost increase$1,614.94
    123456789012simulated-accountanomaly-1668AWS Lambdaus-east-1finops-teamN/AInvestigate 118.0% cost increase$5,810.37
    123456789012simulated-accountanomaly-9896AWS Lambdaus-east-1finops-teamN/AInvestigate 147.0% cost increase$12,470.44
    123456789012simulated-accountanomaly-4959Amazon RDSus-east-1finops-teamN/AInvestigate 67.0% cost increase$777.05

    Eks Deployments (5 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountprod-frontendfrontendus-east-1platform-teamN/AInvestigate restart issues$0.00
    123456789012simulated-accountprod-backend-apibackend-apius-east-1frontend-teamN/AReview and update stale deployment$0.00
    123456789012simulated-accountprod-workerworkerus-east-1backend-teamN/AReview and update stale deployment$0.00
    123456789012simulated-accountstaging-schedulerschedulerus-east-1platform-teamN/AInvestigate restart issues$0.00
    123456789012simulated-accountstaging-gatewaygatewayus-east-1platform-teamN/AInvestigate restart issues$0.00

    Eks Sessions (6 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountsession-331296dev-cluster-session-1us-east-1devops-teamN/ANormal session activity$0.00
    123456789012simulated-accountsession-193012prod-cluster-session-2us-east-1devops-teamN/AReview long-running session for security$0.00
    123456789012simulated-accountsession-726157prod-cluster-session-3us-east-1devops-teamN/AReview long-running session for security$0.00
    123456789012simulated-accountsession-905983prod-cluster-session-4us-east-1devops-teamN/ANormal session activity$0.00
    123456789012simulated-accountsession-193882staging-cluster-session-5us-east-1devops-teamN/ANormal session activity$0.00
    123456789012simulated-accountsession-851597prod-cluster-session-6us-east-1devops-teamN/AReview long-running session for security$0.00

    Rto Analysis (7 findings)

    Account IDAccount AliasResource IDNameRegionNike OwnerDetailsRecommendationEst. Monthly Savings
    123456789012simulated-accountdb-staging-1database-1us-east-1platform-teamN/AEnable cross-region backup for disaster recovery$0.00
    123456789012simulated-accountdb-staging-2database-2us-east-1backend-teamN/ABackup configuration adequate$0.00
    123456789012simulated-accountdb-prod-3database-3us-east-1backend-teamN/AEnable cross-region backup for disaster recovery$0.00
    123456789012simulated-accountdb-prod-4database-4us-east-1data-teamN/ABackup configuration adequate$0.00
    123456789012simulated-accountbucket-critical-1critical-data-bucket-1us-east-1data-teamN/AEnable cross-region replication for critical data$0.00
    123456789012simulated-accountbucket-critical-2critical-data-bucket-2us-east-1data-teamN/AReplication configured$0.00
    123456789012simulated-accountbucket-critical-3critical-data-bucket-3us-east-1devops-teamN/AEnable cross-region replication for critical data$0.00

    CloudWatch Agent Information

    @@ -351,7 +351,7 @@

    Installation:

    -

    Security Findings (14 findings)

    +

    Security Findings (7 findings)

    Review the security findings identified during the analysis. Detailed findings are listed under the 'Security and Privacy' section if available.

    @@ -362,7 +362,7 @@

    Installation:

    © 2026 Dedo Duro AWS Analyzer. All rights reserved.

    -

    Report generated on: 2026-01-26 18:50:06 UTC

    +

    Report generated on: 2026-01-26 19:10:33 UTC

    + +