1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2020年1月12日 |
---|
#18 在 #ec2
54KB
1K SLoC
burnish
burnish
是一个管理使用 EC2 驱动的应用程序部署的工具。
重要
此项目是基于 Golang 的工具的重写,该工具在我所在的公司生产环境中使用(经过他们的许可)。这是另一个学习如何用 Rust 编写命令行工具的尝试。虽然我相信与原始工具相比,我已经实现了完整的特性覆盖,但这里的大部分工作还没有经过严格的测试。
概述
burnish
是 AWS API 的高级包装器。通过使用 burnish
,团队可以快速部署新的代码版本,查看环境状态,并修改运行中应用程序的状态。
burnish
对应用程序的部署方式做出了一些假设
- 每个版本都被打包成一个单独的 AWS EC2 AMI
- 应用程序可以部署到自动扩展组并注册到弹性负载均衡器
- 应用程序在知名路径上报告健康和版本信息
- 应用程序使用单调递增的整数版本标识符,例如 r41、r42、r43...
- 应用程序的两个版本可以同时在不同的自动扩展组中运行
除了管理部署外,burnish
还公开了创建启动配置、自动扩展组、在自动扩展组中旋转实例、测量 ELB 统计信息和在新 relic 中标记部署活动的工具。
目前,burnish
不涉及以下内容
- 数据库迁移
- 外部通知(例如,在部署完成后ping Slack 频道)
- 多区域应用程序部署
- 非 EC2 AMI 的应用程序
这可能在未来的版本中改变。
下载
您可以从这里下载预构建的二进制文件 此处。
配置您的 AWS 资源
burnish
依赖于一个 "宇宙" 文件,该文件定义了它可以部署的环境和应用程序。 universe.json.example
是一个宇宙文件的简单示例。您 必须 有一个完整、功能正常的宇宙文件才能使 burnish
正常运行。
burnish
对您的整体 AWS 架构没有任何限制;它仅假设您的应用程序以单个 AMI 的形式部署到自动扩展组,并已注册到弹性负载均衡器。您可以根据需要自由配置 VPC 及相关网络拓扑。
burnish
提供了一个 示例 Terraform 配置,该配置定义了自动扩展组、Cloud Watch 警报和扩展策略。该配置可以作为您自己的配置的基础,并根据您应用程序的特定配置进行定制。请参阅 README 了解使用方法和预期输出。
使用方法
ELB 监控
使用 burnish elb stats
从 CloudWatch 获取实时 ELB 指标。
$ burnish elb stats --name my-example-elb
+----------+----------+--------------+------------+-------------+-------------------+-------------------+
| Interval | Requests | Requests/sec | 500 Errors | 500 Error % | Connection Errors | Avg. Latency (ms) |
+----------+----------+--------------+------------+-------------+-------------------+-------------------+
| 1 min | 395 | 6.58 | 2 | 0.005 | 0 | 0.190 |
| 5 min | 1820 | 6.07 | 14 | 0.008 | 0 | 0.295 |
| 15 min | 5658 | 6.29 | 48 | 0.008 | 0 | 0.310 |
| 60 min | 21650 | 6.01 | 202 | 0.009 | 0 | 0.289 |
+----------+----------+--------------+------------+-------------+-------------------+-------------------+
使用 burnish elb status
获取已注册到负载均衡器的实例信息。省略 --app
以列出环境中所有应用程序。
$ burnish elb status --name my-example-elb
+---------------------+-----------+---------------------+-------- +----------------+------------------+--------------------+
| Instance ID | Health | Name | Version | IP Address | ASG | Uptime |
+---------------------+-----------+---------------------+---------+----------------+------------------+--------------------+
| i-fa2825f154cb662a4 | InService | my-example-instance | r1337 | 10.247.117.28 | my-example-asg | 3 days 3 hours ago |
| i-19418f7dabcd27c52 | InService | my-example-instance | r1337 | 10.247.116.250 | my-example-asg | 3 days 3 hours ago |
+---------------------+-----------+---------------------+---------+----------------+------------------+--------------------+
应用程序部署
假设您想将新版本部署到生产环境。
- 创建 AMI。使用 packer、Ansible 或其他工具创建包含您新应用程序版本的 AMI。
burnish
对您如何创建 AMI 没有偏见。 - 使用
app
和version
标签标记您的应用程序 AMI。app
标签应与宇宙文件中的app
值匹配,版本应是一个有意义的、唯一的字符串。 - 执行新代码的蓝/绿部署。
burnish
将使用 CLI 标志查找 AMI,然后从宇宙文件中推断环境数据(自动扩展组、负载均衡器等)。
burnish deployment do --app application_name --env dev --version 42
通用用法
使用 burnish help
查看完整的命令行操作集。
USAGE:
burnish [OPTIONS] [SUBCOMMAND]
FLAGS:
-h, --help Prints help information
-V, --version Prints version information
OPTIONS:
-l, --log-level <STRING> Logging Level: 'debug' for verbose, 'info' for terse (default: 'info')
-p, --profile <STRING> AWS Profile (Default: 'default')
-r, --region <STRING> AWS Region (Default: 'us-east-1')
-u, --universe <FILE> YAML Universe file
SUBCOMMANDS:
autoscalegroup create & manipulate autoscale groups
debug debug application inventory json
deployment perform deployment actions
help Prints this message or the help of the given subcommand(s)
launchconfig create a new launch config
loadbalancer create & manipulate elastic load balancers
oneoff launch or terminate a one-off instance
依赖关系
~32MB
~620K SLoC