4 个版本 (破坏性更新)
0.5.0 | 2023 年 4 月 29 日 |
---|---|
0.3.0 | 2022 年 1 月 29 日 |
0.2.0 | 2021 年 12 月 12 日 |
0.1.0 | 2021 年 11 月 20 日 |
177 在 缓存 中排名
每月下载量 21
22KB
224 代码行
AWS Secrets Manager Rust 缓存客户端
该 crate 为 Rust 应用程序提供 AWS Secrets Manager 的秘密的进程内缓存客户端。它受到 AWS Secrets Manager Go 缓存客户端 和 AWS SDK for Rust 的大力启发。
客户端内部使用 LRU(最近最少使用)缓存方案,为缓存的值提供 O(1) 插入和 O(1) 查找。
入门
要使用此客户端,您必须拥有
- Rust 开发环境
- 一个 Amazon Web Services (AWS) 账户,以访问 AWS Secrets Manager 中存储的秘密并使用 AWS SDK for Rust。
用法
以下示例演示了如何开始使用此客户端
use aws_sdk_secretsmanager::Client;
use aws_secretsmanager_cache::SecretCache;
#[tokio::main]
async fn main() {
// instantiate an AWS SecretsManager client using the AWS Rust SDK
let aws_config = aws_config::from_env().load().await;
let client = Client::new(&aws_config);
let mut cache = SecretCache::new(client);
match cache.get_secret_string("YOUR_SECRET_ID".to_string()).send().await {
Ok(secret_value) => {
// use secret value
}
// e.g. ResourceNotFoundException: Secrets Manager can't find the specified secret.
Err(e) => println!("ERROR: {}", e),
}
}
强制缓存刷新
如果自上次检索和缓存秘密以来秘密已被轮换,并且尚未在缓存中过期,则必须通过调用 AWS 并更新值来强制刷新缓存中的值。
这可以通过调用 force_refresh()
来完成,例如
match cache
.get_secret_string("YOUR_SECRET_ID".to_string())
.force_refresh()
.send()
.await
缓存配置
max_cache_size usize
在驱逐最不常访问的秘密之前,在缓存中保持的秘密的最大数量cache_item_ttl u128
缓存的秘密在秘密值需要刷新之前被视为有效的时间(纳秒)。刷新是同步发生的。
use aws_sdk_secretsmanager::Client;
use aws_secretsmanager_cache::{CacheConfig, SecretCache};
use std::time;
#[tokio::main]
async fn main() {
let aws_config = aws_config::from_env().load().await;
let client = Client::new(&aws_config);
// cache configuration with 30 second expiry time and maximum 1000 secrets
let cache_config = CacheConfig::new()
.cache_item_ttl(time::Duration::from_secs(30).as_nanos())
.max_cache_size(1000);
let mut cache = SecretCache::new_with_config(client, cache_config);
}
全局缓存
某些云环境(如 AWS Lambda)鼓励在全局范围内初始化客户端,以避免每次函数调用都要初始化。这可以通过使用 lazy_static
crate 来实现,例如
use async_once::AsyncOnce;
use aws_sdk_secretsmanager::Client;
use aws_secretsmanager_cache::SecretCache;
use lazy_static::lazy_static;
use std::sync::Mutex;
// store the cache in the global scope - useful for runtime environments like AWS Lambda
lazy_static! {
static ref CACHE: AsyncOnce<Mutex<SecretCache>> = AsyncOnce::new(async {
Mutex::new(SecretCache::new(Client::new(
&aws_config::from_env().load().await,
)))
});
}
#[tokio::main]
async fn main() {
// use cache
}
开发
代码格式化
该项目使用 rustfmt 和 clippy 进行格式化和代码检查。按照说明安装 rustfmt
和 clippy
并运行
cargo fix
测试
使用以下命令在本地运行单元测试
cargo test
许可证
根据您的选择,在Apache License,版本2.0或MIT许可证下授权。项目中的文件除非符合这些条款,否则不得复制、修改或分发。
依赖项
约24–33MB
约442K SLoC