在Boto3中,我可以显式提供访问密钥:

dynamodb_client = boto3.resource("dynamodb",
                                 region_name=...,
                                 aws_access_key_id=...,
                                 aws_secret_access_key=...)

我如何才能在《铁 rust 》中实现同样的目标?

我只看到一个从env(~/.aws/credentials)读取它的函数:

let shared_config: SdkConfig = aws_config::load_from_env().await;

推荐答案

Standard caveat applies: please don't use hardcoded credentials unless absolutely necessary - it isn't secure.

在启用hardcoded-credentials功能的情况下使用aws-credential-types依赖项.这将允许您使用Credentials::from_keys方法:

/使用硬编码的访问密钥、密钥和会话令牌创建Credentials.

use aws_credential_types::Credentials;

// ...

let access_key_id = "xxx";
let secret_access_key = "yyy";

let credentials = Credentials::from_keys(access_key_id, secret_access_key, None);

以下是一个完整但最小的工作Rust CLI应用程序来演示以上内容:

// cargo.toml

[package]
name = "aws-sdk-for-rust-hardcoded-credentials-demo"
version = "0.1.0"
edition = "2021"

[dependencies]
aws-credential-types = { version = "1.1.1", features = ["hardcoded-credentials"] }
aws-types = "1.1.1"
aws-sdk-dynamodb = { version = "1.7.0", features = ["behavior-version-latest"] }
tokio = { version = "1", features = ["full"] }

// main.rs

use aws_credential_types::Credentials;
use aws_sdk_dynamodb::Config;
use aws_types::region::Region;

#[tokio::main]
async fn main() {
    let access_key_id = "xxx";
    let secret_access_key = "yyy";

    let credentials = Credentials::from_keys(access_key_id, secret_access_key, None);

    let config = Config::builder()
        .credentials_provider(credentials)
        .region(Region::new("eu-west-1"))
        .build();

    let dynamodb_client = aws_sdk_dynamodb::Client::from_conf(config);

    let list_tables_response = dynamodb_client.list_tables().send().await.unwrap();

    if let Some(table_names) = list_tables_response.table_names {
        println!("DynamoDB tables: {:?}", table_names);
    } else {
        println!("No DynamoDB tables");
    }
}

Rust相关问答推荐

空字符串转换为Box字符串时是否分配?<>

如何从使用mockall模拟的方法中返回self?

创建包含缺失值的框架

为什么reqwest以文本形式下载二进制文件?

交换引用时的生命周期

我可以在不收集或克隆的情况下,将一个带有Item=(key,val)的迭代器拆分成单独的key iter和val iter吗?

Rust移动/复制涉及实际复制时进行检测

Rust从关联函数启动线程

有没有一种方法可以创建一个闭包来计算Rust中具有随机系数的n次多项式?

结果流到 Vec 的结果:如何避免多个into_iter和collect?

Button.set_hexpand(false) 不会阻止按钮展开

go 重并堆积MPSC通道消息

如何从trait方法返回std :: iter :: Map?

Rust编译器通过哪些规则来确保锁被释放?

Rust 中的自动取消引用是如何工作的?

类型判断模式匹配panic

将 `&T` 转换为新类型 `&N`

我如何将 google_gmail1::Gmail> 传递给线程生成?

Rust - 在线程之间不安全地共享没有互斥量的可变数据

Rust 内联 asm 中的向量寄存器:不能将 `Simd` 类型的值用于内联汇编