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.02021年5月20日

#78 in 模板引擎

Download history 14/week @ 2024-04-15 4/week @ 2024-04-22 8/week @ 2024-05-20 6/week @ 2024-06-03 4/week @ 2024-06-10 7/week @ 2024-07-01 111/week @ 2024-07-29

111 每月下载量
用于 cloudformatious-cli

MIT 许可证

140KB
2.5K SLoC

cloudformatious

crates.io docs.rs

提供丰富类型化高级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。但是,如果您想添加任何非平凡的功能,可能首先打开一个问题来讨论它是有意义的。

许可证

MIT

依赖项

~27MB
~468K SLoC