burncloud-aws 0.1.0

burncloud-aws
Documentation
use anyhow::{Result, anyhow};
use tracing::{info, error, Level};
use tracing_subscriber::FmtSubscriber;
use burncloud_aws::aws_deploy::MultiRegionDeployer;
use burncloud_aws::security::create_secure_aws_env;

#[tokio::main]
async fn main() -> Result<()> {
    // 🔒 强制创建安全的AWS环境,仅从.env文件读取凭证
    if let Err(e) = create_secure_aws_env() {
        error!("❌ 安全环境配置失败: {}", e);
        return Err(anyhow!("{}", e));
    }

    let subscriber = FmtSubscriber::builder()
        .with_max_level(Level::INFO)
        .finish();

    tracing::subscriber::set_global_default(subscriber)?;

    info!("🌍 多区域AWS Bedrock监控系统部署");
    info!("📋 部署内容:");
    info!("   - 遍历.env中所有AWS_REGION");
    info!("   - 在每个区域部署完整监控堆栈");
    info!("   - Lambda函数和IAM权限");
    info!("   - SNS主题和订阅");
    info!("   - CloudWatch告警(8个)");
    info!("   - EventBridge规则");
    info!("   - AK/SK自动关闭配置");
    info!("   - 429 throttling限制");

    // 创建多区域部署器
    let deployer = MultiRegionDeployer::from_env()?;

    // 在所有区域部署
    let results = deployer.deploy_to_all_regions().await?;

    // 详细统计各个区域的部署状态
    let success_count = results.iter().filter(|r| matches!(r.status, burncloud_aws::aws_deploy::DeployStatus::Success)).count();
    let failed_count = results.iter().filter(|r| matches!(r.status, burncloud_aws::aws_deploy::DeployStatus::Failed(_))).count();

    // 输出详细的区域统计信息
    info!("\n{}", "=".repeat(80));
    info!("📊 区域部署详细统计");
    info!("{}", "=".repeat(80));

    // 成功的区域
    if success_count > 0 {
        info!("\n✅ 成功部署的区域 ({} 个):", success_count);
        for result in results.iter().filter(|r| matches!(r.status, burncloud_aws::aws_deploy::DeployStatus::Success)) {
            info!("   🌍 {} (耗时: {:?})", result.region, result.duration);
        }
    }

    // 失败的区域和原因
    if failed_count > 0 {
        info!("\n❌ 部署失败的区域 ({} 个):", failed_count);
        for result in results.iter().filter(|r| matches!(r.status, burncloud_aws::aws_deploy::DeployStatus::Failed(_))) {
            if let burncloud_aws::aws_deploy::DeployStatus::Failed(ref error) = result.status {
                info!("   🌍 {} (耗时: {:?})", result.region, result.duration);
                info!("   💥 失败原因: {}", error);
            }
        }
    }

    // 总结
    info!("\n📈 部署总结:");
    info!("   ✅ 成功: {}/{} 区域", success_count, results.len());
    info!("   ❌ 失败: {}/{} 区域", failed_count, results.len());
    info!("   ⏱️ 总耗时: {:?}", results.iter().map(|r| r.duration).sum::<std::time::Duration>());

    if success_count > 0 {
        info!("\n🎉 多区域部署完成!");
        info!("✨ {} 个区域的Bedrock 429错误现在将自动触发AK/SK关闭!", success_count);
        info!("🚀 429 throttling限制已在所有成功部署的区域激活!");
    }

    Ok(())
}