20次发布
0.7.0 | 2024年4月12日 |
---|---|
0.6.0 | 2023年7月28日 |
0.5.0 | 2022年12月3日 |
0.2.0 | 2022年10月30日 |
0.1.0-rc.0 | 2021年5月20日 |
#78 in 模板引擎
111 每月下载量
用于 cloudformatious-cli
140KB
2.5K SLoC
cloudformatious
提供丰富类型化高级API的CloudFormation库,用于执行长时间运行的操作,并等待其终止或观察其进度。
use futures_util::StreamExt;
use cloudformatious::{ApplyStackInput, DeleteStackInput, TemplateSource};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let config = aws_config::load_from_env().await;
let client = cloudformatious::Client::new(&config);
let input = ApplyStackInput::new("my-stack", TemplateSource::inline("{}"));
let mut stack = client.apply_stack(input);
let mut events = stack.events();
while let Some(event) = events.next().await {
eprintln!("{:#?}", event);
};
let output = stack.await?;
eprintln!("Stack applied");
println!("{:#?}", output);
let input = DeleteStackInput::new(output.stack_id);
client.delete_stack(input).await?;
println!("Stack deleted");
Ok(())
}
动机
CloudFormation的API相对较低级。这使得在应用之前手动审查更改等较复杂的流程成为可能,但对于常见的幂等性“应用此模板”部署来说有些不自然。还有其他工具可以缓解这个问题,例如aws cloudformation deploy
高级命令,但它们的输出非常有限,所以它们只能完成一半的工作。此外,我所了解的工具主要是从shell中调用的,这意味着它们不能被原生集成到希望编排CloudFormation堆栈的程序中。
特性
CloudFormatious
扩展特性有以下方法:
apply_stack
实现了幂等的“更新或创建堆栈”操作。delete_stack
实现了幂等的删除堆栈操作。
在这两种情况下,API比aws_sdk_cloudformation
更易用,API也更丰富。特别是
- 两个方法的返回值都实现了
Future
,可以await
以等待整体操作的结束。 - 两个方法的返回值都有一个
events()
方法,可以用来获取操作期间发生的堆栈事件的Stream
。 - 如果堆栈最终处于失败状态,两个方法都返回丰富的
Err
值。 - 两种方法在栈操作成功时都会返回丰富的
Err
值,但如果某些资源出现错误(这些“警告”可以忽略,但可能意味着您的环境中遗留了不必要的基础设施)。 apply_stack
返回一个比生成的aws_sdk_cloudformation
类型更“干净”的丰富Ok
值(更少的冗余Option
、互斥状态的enum
等)。
贡献
欢迎反馈和PR。但是,如果您想添加任何非平凡的功能,可能首先打开一个问题来讨论它是有意义的。
许可证
依赖项
~27MB
~468K SLoC