使用新的 Amazon EventBridge 集成功能自动化您的 Amazon QuickSigh

用全新 Amazon EventBridge 集成自动化部署 Amazon QuickSight 资产

作者 Mayank Agarwal 和 Arun Santhosh,2023年11月17日,发表于 Amazon QuickSight。

关键要点

新发布的 Amazon EventBridge 集成可以帮助企业自动化、加速 BI 资产的部署,实现业务连续性。开发者能够处理 QuickSight 的创建、更新和删除事件,从而简化工作流程。实现连续部署和自动备份,确保关键资产的高度可用性。

商业智能BI和 IT 运营BIOps团队常常需要自动化和加快 BI 资产的部署,以确保业务的持续运作。我们了解到,您希望有一种可自动化、可扩展的方式在大规模下部署、备份或复制 Amazon QuickSight 资产,以便您所在组织的 BIOps 团队能够灵活工作。

我们推出了使用 Amazon EventBridge 的 QuickSight 资产创建、更新和删除CUD事件。通过 EventBridge,开发者可以自动响应 QuickSight 中的事件,比如创建或更新新的仪表板。这些事件几乎实时地传递给 EventBridge。开发者可以编写简单的规则来指示哪些事件对他们感兴趣,以及在事件匹配规则时要采取的行动。通过订阅并响应 QuickSight 在 EventBridge 上的事件,客户可以自动化其工作流程,如持续部署、复制和备份。此次发布涵盖了以下资产的创建、更新和删除事件:

仪表板共享文件夹VPC 连接分析

功能概述

所有事件负载包含账户 ID、区域和 UTC 时间戳。以下表格显示了每个事件的具体细节。

资产类型事件通用细节事件具体细节仪表板QuickSight 仪表板创建成功DashboardId VersionNumberQuickSight 仪表板创建失败ErrorsQuickSight 仪表板更新成功QuickSight 仪表板更新失败ErrorsQuickSight 仪表板已发布版本更新QuickSight 仪表板被删除DashboardId分析QuickSight 分析创建成功AnalysisIDQuickSight 分析创建失败ErrorsQuickSight 分析被删除文件夹QuickSight 文件夹创建FolderIdParentFolderArn如适用QuickSight 文件夹更新QuickSight 文件夹被删除QuickSight 文件夹成员更新MembersAdded[] MembersRemoved[]VPC 连接QuickSight VPC 连接创建成功VPCConnectionId AvailabilityStatusQuickSight VPC 连接创建失败QuickSight VPC 连接更新成功QuickSight VPC 连接更新失败QuickSight VPC 连接删除成功QuickSight VPC 连接删除失败

用例

让我们考虑一个虚构的公司,AnyCompany,该公司在全球范围内运营医疗设施。他们为作者创建和更新 QuickSight 资产设置了开发帐户,以及一个单独的生产帐户。此外,在某些情况下,由于数据居留规定,他们必须在多个区域内维护相同的资产。AnyCompany 正在扩大其业务,并希望在多个 QuickSight 帐户之间自动化部署,并在资产生命周期发生更改时尽快备份 QuickSight 资产。

AnyCompany 有以下关键的部署和备份要求:

持续部署:AnyCompany 希望自动将 QuickSight 资产从其开发帐户部署到生产帐户。某些团队的生产帐户位于不同区域,而其他团队则位于同一区域。AnyCompany 希望自动化这一部署过程。AnyCompany 使用 QuickSight 共享文件夹,供 DevOps 团队获取任何已更新的资产。当作者完成其更改时,他们会在特定共享文件夹中更新仪表板。迄今为止,作者必须通知 DevOps 团队仪表板已准备好进行部署,这种手动方式效率不高。自动化备份:作为 AnyCompany 发布关键仪表板的工作的一部分,他们需要确保仪表板高度可用。为了实现这一策略,AnyCompany 希望保持资产的备份,以备在发生灾难时恢复。迄今为止,AnyCompany 一直按照固定的时间表进行资产备份。他们希望缩短资产更改和备份之间的延迟。

持续部署

当作者完成其更改时,他们会在特定共享文件夹中更新仪表板。如果该仪表板不再需要在生产环境中使用,他们只需从文件夹中删除仪表板。DevOps 团队在 EventBridge 中创建了一个规则,捕获并将文件夹成员更新事件发送到 Lambda 函数,该函数然后利用 QuickSight 导出和导入 API 将更新后的仪表板从开发帐户部署到生产帐户。

使用新的 Amazon EventBridge 集成功能自动化您的 Amazon QuickSigh

DevOps 选择以下事件并创建一个规则,将其发送到 Lambda 函数。

QuickSight 文件夹成员更新

json{ version 0 id 3acb26c8397c4c89a80ace672a864c55 detailtype QuickSight Folder Membership Updated source awsquicksight account 123456789012 time 20231030T220631Z region useast1 resources [arnawsquicksightuseast1123456789012folder/77e307e8b41b472a90e8fe3f471537be] detail { folderId 77e307e8b41b472a90e8fe3f471537be membersAdded [arnawsquicksightuseast1123456789012analysis/e5f37119e24c4874901aaf9032b729b5] membersRemoved [] }}

熊猫加速器创建 EventBridge 规则打开 Amazon EventBridge 控制台,在导航面板中选择 Rules。选择 Create rule。输入规则的名称和描述。例如,输入 QuickSightAssetChangeRule。选择 default 事件总线。选择 Rule with an event pattern 然后选择 Next。对于 Event source,选择 AWS events or EventBridge partner events。滚动到 Creation method 部分。 选择 Custom pattern (JSON editor)。在 Event pattern 文本框中输入以下代码片段并选择 Next。

json{ source [awsquicksight] detailtype [{ anythingbut AWS Service Event via CloudTrail }]}

对于 Target types,选择 AWS service 和 Lambda function。选择 Function,选择您创建的 Lambda 函数,然后选择 Next。在 Configure tags 中,选择 Next,然后选择 Create rule。

一旦 Lambda 函数被调用,它将使用以下 QuickSight API 将更新后的仪表板从开发帐户导出并导入到生产帐户。有关如何使用这些 API 的详细信息,请参阅 QuickSight 开发者指南 和 使用新 API 自动化和加速您的 Amazon QuickSight 资产部署。

导出 API

您可以使用以下 API 启动、跟踪和描述生成源账户中资源包文件的导出作业。资源包文档是一个 zip 文件带有 qs 扩展名,其中包含调用者指定的资产及其所有依赖项可选。

StartAssetBundleExportJob 使用此异步 API 导出资产包文件。DescribeAssetBundleExportJob 使用此同步 API 获取导出作业的状态。当成功时,此 API 调用的响应将具有获取资产包的预签名 URL。ListAssetBundleExportJobs 使用此同步 API 列出过去的导出作业。列表将包含过去15天的完成和进行中的作业。导入 API

这些 API 启动、跟踪和描述导入作业,以带入资产包文件,并在目标账户中创建或更新资产。

StartAssetBundleImportJob 使用此异步 API 启动资产包文件的导入操作。DescribeAssetBundleImportJob 使用此同步 API 获取导入作业的状态。ListAssetBundleImportJobs 使用此同步 API 列出过去的导入作业。列表将包含过去15天的完成和进行中的作业。

pythondef lambdahandler(event context) try loggerinfo(Start) loggerdebug(event)

    #提取事件中的文件夹 ID    folderId = event[detail][folderId]    eventTime = datetimedatetimestrptime(event[time] YmdTHMSz)    loggerinfo(Folder id     folderId)    loggerinfo(Event time    str(eventTime))    # 获取我们文件夹中所有成员的列表。    listFolderMembersResponse = quicksightSourcelistfoldermembers(            AwsAccountId = awsAccountId            FolderId = folderId        )    loggerdebug(listFolderMembersResponse)    # 提取文件夹成员的 ARN    folderMemberArns = [ member[MemberArn] for member in listFolderMembersResponse[FolderMemberList]]    loggerdebug(folderMemberArns)    if len(folderMemberArns) == 0        # 如果文件夹为空,则无需处理        loggerinfo(Folder is empty Not processing further)        return    # 添加多个资产到文件夹时将触发多个事件。    # 在此示例中,我们提取所有文件夹成员,无论是哪个成员触发了此 Lambda。    # 如果适用,您可以针对触发的成员集中逻辑。    # 由于我们在文件夹级别操作,因此检查是否有其他导出正在运行。    WaitForExportToComplete(folderId eventTime)    loggerinfo(Starting export job)    loggerinfo(str(datetimedatetimenow(datetimetimezoneutc)))    # 启动资产包导出    startAssetBundleExportJobResponse = quicksightSourcestartassetbundleexportjob(            AwsAccountId = awsAccountId            AssetBundleExportJobId = FolderExportfolderId            ResourceArns = folderMemberArns            ExportFormat=QUICKSIGHTJSON            IncludeAllDependencies=True        )    # 等待上面调用的导出作业完成。传递当前时间以绕过时间检查。    WaitForExportToComplete(folderId datetimedatetimenow(datetimetimezoneutc))    # 下载资产包文件    DownloadExportBundle(folderId)    # 读取包文件的内容    fileHandle = open(/tmp/FolderExportfolderIdqs mode=rb)    fileContent = fileHandleread()    # 在目标区域启动资产包导入    assetBundleImportJobresponse = quicksightTargetstartassetbundleimportjob(            AwsAccountId = awsAccountId            AssetBundleImportJobId = FolderImportfolderId            AssetBundleImportSource={                Body fileContent            }        )    loggerdebug(assetBundleImportJobresponse)    # 等待上述导入作业完成    WaitForImportToComplete(folderId)except Exception as e    if str(e) != NOFURTHERPROCESSINGNEEDED        loggererror(str(e))

自动化备份

AnyCompany 部署了涉及商业关键的仪表板,因此确保具备适当的备份和版本控制流程至关重要。除了在规律的时间间隔内运行计划导出作业外,他们还希望在关键资产更新后立即进行备份。除了部署外,他们会备份导出的文件。AnyCompany 的 DevOps 团队已创建 EventBridge 规则,以捕获仪表板更新事件。当事件被触发时,他们使用导出资产 API StartAssetBundleExportJob 导出并在其首选的存储系统中备份仪表板。他们按照之前提到的步骤创建 EventBridge 规则,并使用以下事件模式。该规则仅在指定 ID 的仪表板更新时触发。

json{ source [awsquicksight] detailtype [QuickSight Dashboard Update Successful] detail { dashboardId xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx }}

结论

使用 EventBridge 进行 QuickSight 资产事件能够消除手动流程或轮询更新的需要,为跨多个环境自动化部署流程提供了一种方式。本文展示了一些可以应用这些事件进行自动化的用例。有关更多信息,请参阅 Amazon QuickSight 和 QuickSight 开发者指南。

如果您有任何问题或反馈,请留言。如需进一步讨论并寻求问题答案,请访问 QuickSight 社区。

加入 QuickSight 社区 提问、分享答案,与他人共同学习,并探讨更多资源。

关于作者

Mayank Agarwal 是 Amazon QuickSight 的产品经理,专注于嵌入式分析和开发者体验。他的职业生涯始于嵌入式软件工程师,开发手持设备。在 QuickSight 之前,他在 Credence ID 领导工程团队,使用 AWS 服务开发定制的移动嵌入式设备和网络解决方案,使生物识别登记和识别快速、直观且具有成本效益,应用于政府部门、医疗保健和交易安全等领域。

Arun Santhosh 是 Amazon QuickSight 的高级解决方案架构师。Arun 的职业生涯始于 IBM 作为开发者,后来晋升为应用架构师,曾在 Cognizant 担任技术架构师。在之前的角色中,商业智能也是他关注的核心。

使用 Amazon Bedrock 知识库对表格数据进行元数据过滤重点摘要在本篇文章中,我们介绍了如何使用 Amazon Bedrock 的新功能元数据过滤,来提高从知识库检索表格数据的准确性。通过配...

域名欺诈攻击的再认识关键要点域名欺诈攻击是网络钓鱼的老手法,施害者模仿知名品牌网站的域名,以误导用户进入假网站。常见的域名伪造类型包括相似域名、子域名劫持和同形攻击。新的通用顶级域gTLD正在被广泛用...