服务
关于
CloudProse博客
聚光灯

AWSets:简化AWS资源列表

宣布AWSets,这是一个新的开源实用程序,用于抓取AWS帐户并导出其所有资源以进行进一步分析。
杰夫·卡特·崔克10
杰夫·卡特 | 2020年9月3日
3分钟阅读

今天,Trek10发布了 AWSets,这是一个新的开源实用程序,用于抓取AWS账户并导出其所有资源以进行进一步分析。

问题

每天,Trek10都会与多个客户端之间的众多环境进行交互。这通常会带来独特的问题,而没有已知的解决方案,这导致我们构建自己的解决方案。这样的一个例子是 秋梅.

在这种情况下,Trek10经常被拖入缺少文档,不进行适当标记,不使用基础架构作为代码或仅包含太多资源的现有AWS账户中,以至于很难了解我们的工作方式用。不幸的是,没有一个AWS呼叫或服务可以提供对帐户中所有内容的完整评估,因此我们可以开始整理运行情况图。

现有方法

当我们开始寻找解决方案时,我们遇到了为满足这一需求而编写的许多工具。它们在资源覆盖范围,方法和贡献者活动方面差异很大。尽管在此空间中有一些有用的实现,但是我们当时无法确定满足我们目标的任何目标,而最接近的目标则很难扩展。一些工具停止支持几十个资源。其他人则采用自动方法从SDK调用函数,因此在必要时难以覆盖。但是,最重要的是,它们都不包含最重要的方面之一,那就是所有资源如何相互关联。

新解决方案

在缺乏现有解决方案之后,我们决定探索实现新事物所需的资源。我们从研究中学到了很多东西,并且从我们在AWS生态系统中工作了很长时间以来的痛点中学到了很多东西。我们要实现的一些目标包括:

  • 不要做太多-它应该主要集中在查询数据上
  • 全面介绍AWS资源
  • 建立资源之间的关系
  • 易于使用-无需复杂的安装,可在所有平台上使用
  • 标准化数据以进行进一步处理-提取诸如帐户,区域,ID,类型,标签,与顶级对象的关系之类的内容

这项工作的结果是AWSets,这是用Go编写的CLI工具。的 GitHub页面 包括有关安装和使用的完整自述文件,但其中一些要点包括:

  • 查询和建立200多个AWS资源的关系
  • 能够同时查询多个区域
  • 能够选择性地包括或排除AWS资源类型
  • 只读角色中的功能

输出数据是一个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参数组等。

下一步

尽管此初始版本功能强大且有用,但还有很多工作要做,包括:

  • 支持更多的AWS资源和关系-200多个版本是一个不错的开始,但还有很多工作要做
  • 除了支持更多资源外,现有资源可能还存在一些缺口。例如,某些资源需要二次调用才能获得标签
  • 改善关系建立-通过环境变量传递DDB表时,AWSets应该能够将DynamoDB表与Lambda函数匹配
  • 为数据构建其他后处理器。一些想法包括:
    • IaC计分卡-查找不受IaC管理的资源
    • 自动聚集相关资源以补救标记
    • 拍摄帐户的每日或每周快照
    • “智能”资源清除-删除目标资源及其仅使用的任何相关资源

入门

如前所述,您可以前往 GitHub上的项目 有关安装和使用AWSets的信息。试用一下,针对遇到的任何问题或需要支持的其他资源提出问题或PR。在Trek10上,AWSets被用作支持多种内部工具的基本实用程序-通过开源,我们很高兴看到社区可以提出什么!

作者
杰夫·卡特·崔克10
杰夫·卡特