声明:
本文转自 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。