Rust AWS管理库aws-manager的使用,高效管理Amazon Web Services云资源的Rust工具包

Rust AWS管理库aws-manager的使用,高效管理Amazon Web Services云资源的Rust工具包

Crates.io

aws-manager是基于AWS SDK Rust版本的封装库。

安装

在项目目录中运行以下Cargo命令:

cargo add aws-manager

或者在Cargo.toml中添加以下行:

aws-manager = "0.30.4"

基本使用示例

以下是一个使用aws-manager管理AWS资源的简单示例:

use aws_manager::{
    ec2,  // 用于管理EC2实例
    s3,   // 用于管理S3存储桶
    sts,  // 用于安全令牌服务
    Config,  // 配置结构体
};

#[tokio::main]
async fn main() {
    // 初始化AWS配置
    let config = Config::from_env()  // 从环境变量获取AWS配置
        .await
        .expect("failed to load AWS config from environment");
    
    // 获取AWS账户ID
    let sts_manager = sts::Manager::new(config.clone());
    let account_id = sts_manager
        .get_caller_identity()
        .await
        .expect("failed to get caller identity");
    println!("AWS Account ID: {}", account_id);
    
    // 列出所有EC2实例
    let ec2_manager = ec2::Manager::new(config.clone());
    let instances = ec2_manager
        .describe_instances()
        .await
        .expect("failed to describe instances");
    println!("EC2 Instances: {:?}", instances);
    
    // 列出所有S3存储桶
    let s3_manager = s3::Manager::new(config);
    let buckets = s3_manager
        .list_buckets()
        .await
        .expect("failed to list buckets");
    println!("S3 Buckets: {:?}", buckets);
}

完整示例代码

下面是一个更完整的示例,展示如何使用aws-manager创建EC2实例和S3存储桶:

use aws_manager::{
    ec2, 
    s3,
    sts,
    Config,
};
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    // 1. 初始化配置
    let config = Config::from_env().await?;
    
    // 2. 验证AWS凭证
    let sts_manager = sts::Manager::new(config.clone());
    let account_id = sts_manager.get_caller_identity().await?;
    println!("Connected to AWS Account: {}", account_id);
    
    // 3. S3操作示例
    let s3_manager = s3::Manager::new(config.clone());
    
    // 创建新存储桶
    let bucket_name = format!("my-rust-bucket-{}", chrono::Utc::now().timestamp());
    s3_manager.create_bucket(&bucket_name).await?;
    println!("Created S3 bucket: {}", bucket_name);
    
    // 列出所有存储桶
    let buckets = s3_manager.list_buckets().await?;
    println!("Available S3 buckets: {:?}", buckets);
    
    // 4. EC2操作示例
    let ec2_manager = ec2::Manager::new(config);
    
    // 列出所有实例
    let instances = ec2_manager.describe_instances().await?;
    println!("Current EC2 instances: {:?}", instances);
    
    // 创建新实例(注释掉实际创建代码,避免意外启动实例)
    /*
    let instance = ec2_manager
        .run_instances(
            "ami-0abcdef1234567890",  // AMI ID
            "t2.micro",               // 实例类型
            "my-keypair",             // 密钥对名称
            1,                        // 数量
            Some("my-security-group") // 安全组
        )
        .await?;
    println!("Launched new EC2 instance: {:?}", instance);
    
    // 等待实例运行
    tokio::time::sleep(Duration::from_secs(60)).await;
    
    // 终止实例
    ec2_manager.terminate_instances(&[instance.instance_id]).await?;
    println!("Terminated instance: {}", instance.instance_id);
    */
    
    Ok(())
}

功能特性

aws-manager提供了以下主要功能:

  1. EC2管理:创建、描述、启动、停止和终止EC2实例
  2. S3管理:创建、列出和删除S3存储桶,上传/下载对象
  3. STS集成:获取AWS账户和用户信息
  4. IAM管理:管理用户、组和策略
  5. 配置简化:从环境变量轻松加载AWS配置

许可证

该项目使用Apache-2.0许可证。


1 回复

以下是基于您提供的内容整理的完整示例代码:

内容中提供的示例汇总

  1. 创建客户端示例:
use aws_manager::{AwsManager, Region};

#[tokio::main]
async fn main() {
    let manager = AwsManager::new(
        Region::UsEast1,
        "your-access-key-id", 
        "your-secret-access-key"
    ).await;
}
  1. EC2实例管理示例:
use aws_manager::ec2;

async fn list_instances(manager: &AwsManager) {
    let instances = ec2::describe_instances(&manager).await.unwrap();
    for instance in instances {
        println!("Instance ID: {}, State: {:?}", 
            instance.instance_id, instance.state);
    }
}

async fn launch_instance(manager: &AwsManager) {
    let params = ec2::RunInstancesParams {
        image_id: "ami-0abcdef1234567890".to_string(),
        instance_type: "t2.micro".to_string(),
        min_count: 1,
        max_count: 1,
    };
    
    let result = ec2::run_instances(&manager, params).await.unwrap();
    println!("Launched instance: {:?}", result.instance_id);
}
  1. S3存储桶操作示例:
use aws_manager::s3;

async fn list_buckets(manager: &AwsManager) {
    let buckets = s3::list_buckets(&manager).await.unwrap();
    for bucket in buckets {
        println!("Bucket: {}", bucket.name);
    }
}

async fn upload_file(manager: &AwsManager) {
    let content = "Hello, AWS S3!".as_bytes();
    s3::put_object(
        &manager,
        "my-bucket",
        "hello.txt",
        content,
        "text/plain"
    ).await.unwrap();
}

完整示例demo

use aws_manager::{AwsManager, Region, ec2, s3};
use aws_manager::error::AwsError;

#[tokio::main]
async fn main() {
    // 1. 创建AWS客户端
    let manager = AwsManager::new(
        Region::UsEast1,
        "your-access-key-id",
        "your-secret-access-key"
    ).await;
    
    // 2. EC2实例操作
    match ec2::describe_instances(&manager).await {
        Ok(instances) => {
            println!("当前EC2实例列表:");
            for instance in instances {
                println!("ID: {}, 状态: {:?}", 
                    instance.instance_id, instance.state);
            }
        },
        Err(e) => eprintln!("获取EC2实例失败: {}", e),
    }
    
    // 3. S3存储桶操作
    match s3::list_buckets(&manager).await {
        Ok(buckets) => {
            println!("当前S3存储桶:");
            for bucket in buckets {
                println!("存储桶名: {}", bucket.name);
                
                // 在每个存储桶中上传测试文件
                let content = format!("测试文件内容 {}", bucket.name);
                if let Err(e) = s3::put_object(
                    &manager,
                    &bucket.name,
                    "test_file.txt",
                    content.as_bytes(),
                    "text/plain"
                ).await {
                    eprintln!("上传文件到 {} 失败: {}", bucket.name, e);
                }
            }
        },
        Err(e) => eprintln!("获取S3存储桶失败: {}", e),
    }
    
    // 4. 高级配置示例
    let config = aws_manager::AwsConfig {
        region: Region::ApNortheast1,
        timeout: Some(std::time::Duration::from_secs(30)),
        retries: 3,
    };
    
    let custom_manager = AwsManager::with_config(config).await;
    
    // 5. 使用自定义配置的客户端执行操作
    if let Err(e) = ec2::describe_instances(&custom_manager).await {
        match e {
            AwsError::AuthenticationFailed => {
                eprintln!("认证失败,请检查凭据");
            },
            _ => eprintln!("操作失败: {}", e),
        }
    }
}

代码说明

  1. 这个完整示例演示了:

    • AWS客户端的创建
    • EC2实例的查询操作
    • S3存储桶的列表和文件上传操作
    • 自定义配置的客户端创建
    • 完善的错误处理机制
  2. 最佳实践:

    • 使用异步(async/await)编程模型
    • 对每个AWS操作都进行了错误处理
    • 演示了客户端的重用
    • 展示了如何创建自定义配置的客户端
  3. 注意事项:

    • 需要替换实际的AWS访问密钥
    • 需要确保指定的AWS区域有相应资源
    • 实际使用时应该处理更多错误情况
回到顶部