#ec2 #aws #elb #command-line #command-line-tool #cli #asg

app burnish

使用基于 Rust 的命令行工具安全地将代码部署到自动扩展组

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2020年1月12日

#18#ec2

MIT 许可证

54KB
1K SLoC

Rust 886 SLoC // 0.0% comments HCL 138 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 |
+---------------------+-----------+---------------------+---------+----------------+------------------+--------------------+

应用程序部署

假设您想将新版本部署到生产环境。

  1. 创建 AMI。使用 packer、Ansible 或其他工具创建包含您新应用程序版本的 AMI。 burnish 对您如何创建 AMI 没有偏见。
  2. 使用 appversion 标签标记您的应用程序 AMI。 app 标签应与宇宙文件中的 app 值匹配,版本应是一个有意义的、唯一的字符串。
  3. 执行新代码的蓝/绿部署。 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