聚光灯
无服务器如何处理业务复杂性
无服务器有助于以标准化的方式传达业务复杂性。
今天,Trek10发布了 AWSets,这是一个新的开源实用程序,用于抓取AWS账户并导出其所有资源以进行进一步分析。
每天,Trek10都会与多个客户端之间的众多环境进行交互。这通常会带来独特的问题,而没有已知的解决方案,这导致我们构建自己的解决方案。这样的一个例子是 秋梅.
在这种情况下,Trek10经常被拖入缺少文档,不进行适当标记,不使用基础架构作为代码或仅包含太多资源的现有AWS账户中,以至于很难了解我们的工作方式用。不幸的是,没有一个AWS呼叫或服务可以提供对帐户中所有内容的完整评估,因此我们可以开始整理运行情况图。
当我们开始寻找解决方案时,我们遇到了为满足这一需求而编写的许多工具。它们在资源覆盖范围,方法和贡献者活动方面差异很大。尽管在此空间中有一些有用的实现,但是我们当时无法确定满足我们目标的任何目标,而最接近的目标则很难扩展。一些工具停止支持几十个资源。其他人则采用自动方法从SDK调用函数,因此在必要时难以覆盖。但是,最重要的是,它们都不包含最重要的方面之一,那就是所有资源如何相互关联。
在缺乏现有解决方案之后,我们决定探索实现新事物所需的资源。我们从研究中学到了很多东西,并且从我们在AWS生态系统中工作了很长时间以来的痛点中学到了很多东西。我们要实现的一些目标包括:
这项工作的结果是AWSets,这是用Go编写的CLI工具。的 GitHub页面 包括有关安装和使用的完整自述文件,但其中一些要点包括:
输出数据是一个JSON数组,每个对象都采用以下格式:
{
"Account": "123456789", // account resource is in
"Region": "us-east-1", // region resource is in
"Id": "12345", // resource id
"Version": "", // resource version
"Type": "ec2/instance", // resource type
"Name": "test-instance", // resource name
"Attributes": {}, // full dump of resource attributes
"Tags": {}, // normalized tags for resource
"Relations": [ // array of the identifiers of related resources
{
"Account": "123456789",
"Region": "us-east-1",
"Id": "vpc-123abc123",
"Version": "",
"Type": "ec2/vpc"
}
]
}
此设计的目的是使其易于与专门的JSON处理工具一起使用,例如 q 要么 jmespath.
AWSets还包括一个基本的DOT文件生成器,尽管随着复杂性的增加最终可能会被拆分。在关系中被引用但在帐户中不存在的资源显示为红色,从而易于查找孤立的资源。例如,此图像显示了为支持Redshift测试而创建的网络堆栈。 Redshift集群已删除(昂贵的部分),但支持的基础结构却未删除。我们还可以看到这些支持资源没有被其他东西使用。
每个区域都在其自己的子图中呈现,因此可以轻松快速地查看正在使用的区域。在此图中,黄色项目是没有已知关系的资源,通常是默认值,例如默认角色,RDS参数组等。
尽管此初始版本功能强大且有用,但还有很多工作要做,包括:
如前所述,您可以前往 GitHub上的项目 有关安装和使用AWSets的信息。试用一下,针对遇到的任何问题或需要支持的其他资源提出问题或PR。在Trek10上,AWSets被用作支持多种内部工具的基本实用程序-通过开源,我们很高兴看到社区可以提出什么!