Rust AWS SDK文档数据库操作库aws-sdk-docdb的使用:支持Amazon DocumentDB的增删改查与管理功能

Rust AWS SDK文档数据库操作库aws-sdk-docdb的使用:支持Amazon DocumentDB的增删改查与管理功能

Amazon DocumentDB是一个快速、可靠且完全托管的数据库服务。Amazon DocumentDB使得在云中设置、操作和扩展MongoDB兼容的数据库变得容易。使用Amazon DocumentDB,您可以运行相同的应用程序代码并使用与MongoDB相同的驱动程序和工具。

开始使用

SDK为每个AWS服务提供一个crate。您必须在Rust项目中添加Tokio作为依赖项以执行异步代码。要将aws-sdk-docdb添加到您的项目中,请在Cargo.toml文件中添加以下内容:

[dependencies]
aws-config = { version = "1.1.7", features = ["behavior-version-latest"] }
aws-sdk-docdb = "1.82.0"
tokio = { version = "1", features = ["full"] }

然后在代码中,可以创建如下客户端:

use aws_sdk_docdb as docdb;

#[::tokio::main]
async fn main() -> Result<(), docdb::Error> {
    let config = aws_config::load_from_env().await;
    let client = aws_sdk_docdb::Client::new(&config);

    // ... 使用客户端进行一些调用

    Ok(())
}

完整示例

以下是使用aws-sdk-docdb进行Amazon DocumentDB基本操作的完整示例:

use aws_sdk_docdb as docdb;
use docdb::types::Filter;

#[tokio::main]
async fn main() -> Result<(), docdb::Error> {
    // 加载配置并创建客户端
    let config = aws_config::load_from_env().await;
    let client = docdb::Client::new(&config);

    // 1. 创建DB集群
    let create_result = client
        .create_db_cluster()
        .db_cluster_identifier("my-docdb-cluster")
        .engine("docdb")
        .master_username("admin")
        .master_user_password("password123")
        .send()
        .await?;
    println!("Created DB cluster: {:?}", create_result.db_cluster);

    // 2. 描述DB集群
    let describe_result = client
        .describe_db_clusters()
        .db_cluster_identifier("my-docdb-cluster")
        .send()
        .await?;
    println!("DB clusters: {:?}", describe_result.db_clusters);

    // 3. 创建DB实例
    let instance_result = client
        .create_db_instance()
        .db_instance_identifier("my-docdb-instance")
        .db_cluster_identifier("my-docdb-cluster")
        .db_instance_class("db.r5.large")
        .engine("docdb")
        .send
        .await?;
    println!("Created DB instance: {:?}", instance_result.db_instance);

    // 4. 修改DB实例
    let modify_result = client
        .modify_db_instance()
        .db_instance_identifier("my-docdb-instance")
        .apply_immediately(true)
        .new_db_instance_identifier("my-docdb-instance-new")
        .send()
        .await?;
    println!("Modified DB instance: {:?}", modify_result.db_instance);

    // 5. 删除DB实例
    let delete_instance_result = client
        .delete_db_instance()
        .db_instance_identifier("my-docdb-instance-new")
        .send()
        .await?;
    println!("Deleted DB instance: {:?}", delete_instance_result.db_instance);

    // 6. 删除DB集群
    let delete_cluster_result = client
        .delete_db_cluster()
        .db_cluster_identifier("my-docdb-cluster")
        .send()
        .await?;
    println!("Deleted DB cluster: {:?}", delete_cluster_result.db_cluster);

    Ok(())
}

许可证

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


1 回复

根据您提供的内容,我将整理Rust AWS SDK文档数据库操作库aws-sdk-docdb的使用指南,并提供一个完整的示例demo。

Rust AWS SDK文档数据库操作库aws-sdk-docdb使用指南

aws-sdk-docdb是Rust AWS SDK中用于操作Amazon DocumentDB的库,它提供了完整的DocumentDB管理功能。

安装与配置

在Cargo.toml中添加依赖:

[dependencies]
aws-sdk-docdb = "0.28"
tokio = { version = "1", features = ["full"] }

完整示例代码

下面是一个完整的DocumentDB操作示例,包含创建客户端、集群管理等功能:

use aws_sdk_docdb as docdb;
use std::error::Error;
use std::time::Duration;
use tokio::time::sleep;

#[tokio::main]
async fn main() -> Result<(), Box<dyn Error>> {
    // 创建DocumentDB客户端
    let client = create_client().await;
    
    let cluster_id = "rust-docdb-cluster";
    let snapshot_id = "rust-docdb-snapshot";
    let parameter_group_name = "default.docdb4.0";
    
    // 1. 创建DocumentDB集群
    println!("Creating DocumentDB cluster...");
    create_cluster(&client, cluster_id).await?;
    
    // 2. 等待集群可用
    println!("Waiting for cluster to become available...");
    wait_until_cluster_available(&client, cluster_id).await?;
    
    // 3. 列出所有集群
    println!("Listing all DocumentDB clusters:");
    list_clusters(&client).await?;
    
    // 4. 修改集群参数组
    println!("Modifying cluster parameter group...");
    modify_cluster_parameter_group(&client, cluster_id, parameter_group_name).await?;
    
    // 5. 创建集群快照
    println!("Creating cluster snapshot...");
    create_cluster_snapshot(&client, cluster_id, snapshot_id).await?;
    
    // 6. 删除集群
    println!("Deleting cluster...");
    delete_cluster(&client, cluster_id).await?;
    
    Ok(())
}

// 创建DocumentDB客户端
async fn create_client() -> docdb::Client {
    let config = aws_config::load_from_env().await;
    docdb::Client::new(&config)
}

// 创建DocumentDB集群
async fn create_cluster(client: &docdb::Client, cluster_id: &str) -> Result<(), docdb::Error> {
    let response = client
        .create_db_cluster()
        .db_cluster_identifier(cluster_id)
        .engine("docdb")
        .master_username("admin")
        .master_user_password("password123")
        .send()
        .await?;

    println!("Created cluster: {:?}", response.db_cluster);
    Ok(())
}

// 等待集群可用
async fn wait_until_cluster_available(
    client: &docdb::Client,
    cluster_id: &str,
) -> Result<(), docdb::Error> {
    loop {
        let response = client
            .describe_db_clusters()
            .db_cluster_identifier(cluster_id)
            .send()
            .await?;
        
        if let Some(cluster) = response.db_clusters.and_then(|c| c.first().cloned()) {
            if cluster.status == Some("available".to_string()) {
                break;
            }
        }
        
        sleep(Duration::from_secs(10)).await;
    }
    Ok(())
}

// 列出所有DocumentDB集群
async fn list_clusters(client: &docdb::Client) -> Result<(), docdb::Error> {
    let response = client
        .describe_db_clusters()
        .send()
        .await?;

    for cluster in response.db_clusters.unwrap_or_default() {
        println!("Cluster ID: {}, Status: {:?}", 
            cluster.db_cluster_identifier.unwrap_or_default(),
            cluster.status
        );
    }
    Ok(())
}

// 修改集群参数组
async fn modify_cluster_parameter_group(
    client: &docdb::Client,
    _cluster_id: &str,
    parameter_group_name: &str,
) -> Result<(), docdb::Error> {
    client
        .modify_db_cluster_parameter_group()
        .db_cluster_parameter_group_name(parameter_group_name)
        .parameters(
            docdb::types::Parameter::builder()
                .parameter_name("tls")
                .parameter_value("disabled")
                .apply_method("immediate")
                .build(),
        )
        .send()
        .await?;

    println!("Successfully modified parameter group");
    Ok(())
}

// 创建集群快照
async fn create_cluster_snapshot(
    client: &docdb::Client,
    cluster_id: &str,
    snapshot_id: &str,
) -> Result<(), docdb::Error> {
    let response = client
        .create_db_cluster_snapshot()
        .db_cluster_identifier(cluster_id)
        .db_cluster_snapshot_identifier(snapshot_id)
        .send()
        .await?;

    println!("Created snapshot: {:?}", response.db_cluster_snapshot);
    Ok(())
}

// 删除集群
async fn delete_cluster(client: &docdb::Client, cluster_id: &str) -> Result<(), docdb::Error> {
    let response = client
        .delete_db_cluster()
        .db_cluster_identifier(cluster_id)
        .send()
        .await?;

    println!("Deleted cluster: {:?}", response.db_cluster);
    Ok(())
}

代码说明

  1. 客户端创建:使用AWS环境配置创建DocumentDB客户端
  2. 集群管理:包含创建、列出和删除集群功能
  3. 参数组修改:演示如何修改集群参数
  4. 快照功能:展示如何创建集群快照
  5. 等待机制:添加了等待集群可用的逻辑

最佳实践

  1. 错误处理:所有AWS操作都进行了错误处理
  2. 异步操作:使用tokio运行时处理异步操作
  3. 资源清理:示例中包含删除集群的操作
  4. 安全实践:使用环境变量获取AWS凭证

这个完整示例演示了如何使用aws-sdk-docdb进行DocumentDB的基本操作,您可以根据实际需求进行扩展和修改。

回到顶部