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<()> {
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(())
}