34 个版本
0.11.1 | 2021 年 3 月 15 日 |
---|---|
0.11.0-beta.10 | 2020 年 10 月 20 日 |
0.11.0-beta.9 | 2020 年 7 月 29 日 |
0.11.0-beta.3 | 2020 年 3 月 16 日 |
0.5.10 | 2018 年 3 月 30 日 |
#1297 in 开发工具
140KB
2.5K SLoC
tsunami
tsunami
提供在云实例上运行一次性作业的接口。
想象一下,你需要在 AWS 上运行一个涉及四种不同类型机器的实验。或者 Azure 上。每个都需要以特定的方式设置。也许一个是服务器,两个是负载生成客户端,另一个是某种监控器。你希望使用自定义 AMI 在不同地区启动它们,然后在它们全部启动和运行后运行一些基准测试。
这个工具包使这一切变得非常简单。
你说明你想要的机器,库会处理其余部分。它使用云服务的 API 以适当的方式启动机器,并在设置可用时提供 [ssh 连接]。当所有机器都可用时,你可以一步连接到它们所有,然后运行你的分布式作业。当你完成时,tsunami
会为你拆除一切。而且我提到它甚至支持 AWS spot 实例,所以它甚至能帮你省钱吗?
这个魔法是如何工作的?看看这个例子
use azure::Region as AzureRegion;
use rusoto_core::{credential::DefaultCredentialsProvider, Region as AWSRegion};
use tsunami::Tsunami;
use tsunami::providers::{aws, azure};
#[tokio::main]
async fn main() -> Result<(), color_eyre::Report> {
// Initialize AWS
let mut aws = aws::Launcher::default();
// Create an AWS machine descriptor and add it to the AWS Tsunami
aws.spawn(
vec![(
String::from("aws_vm"),
aws::Setup::default()
.region_with_ubuntu_ami(AWSRegion::UsWest1) // default is UsEast1
.await
.unwrap()
.setup(|vm| {
// default is a no-op
Box::pin(async move {
vm.ssh.command("sudo")
.arg("apt")
.arg("update")
.status()
.await?;
vm.ssh.command("bash")
.arg("-c")
.arg("\"curl https://sh.rustup.rs -sSf | sh -- -y\"")
.status()
.await?;
Ok(())
})
}),
)],
None,
)
.await?;
// Initialize Azure
let mut azure = azure::Launcher::default();
// Create an Azure machine descriptor and add it to the Azure Tsunami
azure
.spawn(
vec![(
String::from("azure_vm"),
azure::Setup::default()
.region(AzureRegion::FranceCentral) // default is EastUs
.setup(|vm| {
// default is a no-op
Box::pin(async move {
vm.ssh.command("sudo")
.arg("apt")
.arg("update")
.status()
.await?;
vm.ssh.command("bash")
.arg("-c")
.arg("\"curl https://sh.rustup.rs -sSf | sh -- -y\"")
.status()
.await?;
Ok(())
})
}),
)],
None,
)
.await?;
// SSH to the VMs and run commands on it
let aws_vms = aws.connect_all().await?;
let azure_vms = azure.connect_all().await?;
let vms = aws_vms.into_iter().chain(azure_vms.into_iter());
// do amazing things with the VMs!
// you have access to things like ip addresses for each host too.
// call terminate_all() to terminate the instances.
aws.terminate_all().await?;
azure.terminate_all().await?;
Ok(())
}
实时编码
这个工具包的早期版本是作为针对已熟悉 Rust 且想看到更大、更复杂的构建的用户的实时编码流系列的一部分编写的。您可以在 YouTube 上找到过去会议的录音 在这里。
许可证
根据以下任一许可证授权:
- Apache 许可证 2.0 (LICENSE-APACHE 或 http://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
您自行选择。
贡献
除非您明确声明,否则根据 Apache-2.0 许可证定义的,您提交的任何旨在包含在作品中的贡献,将根据上述许可双授权,而无需任何附加条款或条件。
依赖关系
~9-29MB
~402K SLoC