声明:
本文转自 DEV Community 网站,文章翻译由开发者社区提供;
点击下方链接,查看英文原文:
一些历史背景
大概两年前,我开始尝试使用 QuickSight 来解决我就职的公司在 BI 方面遇到的一些问题。相比其他类似工具,QuickSight 能与很多亚马逊云科技数据服务实现一流的集成,并且成本非常低,这些都是我所看重的。借助该服务,我们可以快速构建分析原型和仪表板。然而有个问题我们一直很费解:为何不支持使用DynamoDB作为数据源?
我在StackOverflow 咨询了 Hive-mind 如何在 Amazon Quicksight 中对 DynamoDB 数据进行可视化,这已经成为该平台上获得支持最多的QuickSight提问,因为大家都需要这样的功能,但一直没得到解答……直到最近。
大部分变通的解决方案都需要将 DynamoDB 数据导出(例如复制)到其他位置,例如 S3 或 RDS,随后即可作为数据源加入 QuickSight。最终,我们创建了一个Glue计划作业,借此将 DynamoDB 数据移动到 S3。随后使用 AWS Glue Crawler 爬取 S3 数据并以 Amazon Athena 表的形式作为数据集加入 QuickSight。这种方法有效,但实际上需要更多定制化的基础设施,并且也无法直接进行实时查询。
2019 年底,亚马逊云科技宣布用户将可以通过 Amazon Athena 新增的联合查询功能查询任何数据源。这个功能很酷,他们甚至通过示意图展示了查询 DynamoDB 数据的概念,但这需要我们自行开发并维护自己的连接器,并且该功能当时还是预览版,Amazon QuickSight 的集成也尚未进行更新,无法用到 Athena 的这项新功能。
2020 年 3 月,我发现Amazon Athena 公布了一个适用于 DynamoDB 的预构建数据连接器。这让我很激动,因为我终于可以在 Athena 中快速设置一个数据连接器并借此真正查看和查询 DynamoDB 数据,同时还不需要编写任何自定义代码。但该功能依然是预览版,并且暂时还不支持 QuickSight。
到了一年后,Athena 数据连接器在多个区域正式发布,还提供了第 2 版 Athena 引擎,并且 QuickSight 的集成功能也可以让我们选择所需的 Athena 工作组和数据源。
在 DynamoDB 成为 Amazon QuickSight 中的“一类”数据源之前,这些功能已经足以满足我的需求了。
详细实现过程
使用第 2 版 Athena 引擎所提供的 Athena 数据连接器,我终于能在 QuickSight 中可视化 DynamoDB 数据,并且不需要创建任何定制资源,也无需将数据复制到另一个数据源中。
先决条件/假设
- 你希望将 DynamoDB 表中的数据通过 QuickSight 进行可视化
- 你可以访问自己账户 IAM 中的用户/角色
- 创建一个存储桶,用于存储 Athena 查询结果数据以及数据连接器溢出的数据
- 如果要将其用在生产环境中的大规模查询中,建议为该存储桶添加S3 生命周期策略,以确保该存储桶不会以不受控的方式增大
- 你使用的区域必须同时支持:
- Athena 第2 版引擎
- QuickSight
切换为使用第 2 版 Athena 引擎
如果还没有已经在使用第 2 版 Athena 引擎的 Athena 工作组,请创建一个符合要求的工作组。
截止撰写本文时,默认的主要组依然会使用第 1 版 Athena 引擎,但这些组会在未来某时自动升级到第 2 版。
没人有时间等待亚马逊云科技来升级,因此我们需要提前创建(如果需要的话)工作组并切换到第 2 版 Athena 引擎。
1.在 Athena 控制台中选择 Workgroups 选项卡:
2.确保存在“Athena Engine version 2”工作组并切换至该工作组。
a)你很可能没有这样的工作组,因此需要点击“Create Workgroup”按钮创建一个。几乎所有选项都可以使用默认设置,但一定要选择“Manually choose an engine version now”,并且在创建工作组时,请务必选择“Athena engine version 2 (recommended)”。
创建 DynamoDB Athena 数据连接器
创建了第 2 版 Athena 引擎的工作组后,接下来需要创建我们的 DynamoDB Athena 数据连接器了。
1.打开 Athena 控制台的 Data Sources 选项卡,选择“Connect data source”按钮。
2.在 Data Sources 向导的第一步中选择“Query a data source”选项,随后选择“Amazon DynamoDB”并点击下一步。
3.第二步和最后一步中,亚马逊云科技需要我们指定连接器 Lambda。该 Lambda 尚不存在,因此我们需要点击“Configure new AWS Lambda function”按钮进行部署。
点击该按钮会打开一个新窗口并显示 Lambda 控制台,我们可以在这里部署预构建的 AthenaDynamoDBConnector 应用程序。
b)在 Application 设置下,至少需要设置 SpillBucket和AthenaCatalogName 参数,因为它们不包含任何默认值。
c)点击 Deploy。
d)该 Lambda 部署完成后,重新回到 Athena 控制台窗口。
4.至此我们的 AthenaDynamoDBConnector 函数已经部署,点击“Choose Lambda function”下拉菜单列表旁边的刷新按钮,随后应该能看到刚才部署的 Lambda 函数。选择该函数,为分类输入一个名称,点击“Connect”按钮。
5.至此我们就应该可以通过为资源设置的数据源和分类名称,使用 Athena 查询 DynamoDB 数据了。
为 QuickSight IAM 角色分配 Lambda 权限
Athena 数据连接器需要调用 Lambda 来查询并返回 DynamoDB 数据,因此我们需要为 QuickSight 的服务角色提供调用 Lambda 函数的权限。
1.打开 IAM 控制台并选择“Roles”。
2.查找并点击 QuickSight 服务角色。角色名称应该以类似“aws-quicksight-service-role”的字样开头,例如“aws-quicksight-service-role-v0”。
3.点击“Attach Policies”。
4.选择“AWSLambdaRole”并点击“Attach Policy”。
配置 QuickSight 使用新连接器
随后需要对 QuickSight 进行一些配置!
1.打开 QuickSight 并显示 Data Sets 菜单。
2.点击“New Dataset”并选择 Athena 作为数据源。
3.选择刚才创建的,使用了第 2 版 Athena 引擎的工作组。
4.随后选择在刚才的步骤中为 DynamoDB 连接器创建的分类。
a)如果看到“没有足够的权限连接到此数据集或运行此查询”的错误,很可能是因为没有将 Lambda 调用权限正确地分配给 QuickSight 角色。具体操作方法请参阅上一步。
5.随后要选择是否希望通过 SPICE 缓存数据,或是直接查询数据。直接查询将能查看 DynamoDB 中的实时数据,但因为不缓存,性能和成本可能会受到影响。
a)你也可以添加额外的 DynamoDB 表数据集并继续重复使用在上述第 2 步创建的第 2 版 Athena 引擎数据源。
进行可视化
至此我们已经创建了 DynamoDB 数据集(通过 Athena 和 DynamoDB 数据连接器),接下来终于可以通过分析和仪表板对 DynamoDB 数据进行可视化了。
本文的示例中我使用了一个很小的 DynamoDB 范例数据集,因此可视化出来的结果不怎么有趣,仅供参考。
总结
期待了这么久,终于可以在无需自定义资源和复制数据的前提下用 QuickSight 处理 DynamoDB 数据。这只是众多数据源中的一个示例,现在我们已经可以通过第 2 版 Athena 引擎的数据连接器轻松添加多种数据源,并能直接在 QuickSight 中选择要使用的 Athena 工作组和 Athena 分类。
相信随着亚马逊云科技继续发布新功能以及技术的不断革新,本文所介绍的技术迟早会过时,但大家可以将本文介绍的方法作为练习探索更多新功能。
如果本文对你有帮助,或如果你针对该方法的改善和增补有任何建议,欢迎随时留言。
文章作者: Jared Donboch
Jared Donboch for AWS Community Builders。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。