根据Quicksight 定价页面,如果您正在为 Quicksight“阅读器”创建嵌入式仪表板,那么您为此阅读器的每 30 分钟登录会话支付 0.30 美元/会话。
会话的有效期可以在API的SessionLifetimeInMinutes
参数中设置GetDashboardEmbedUrl
,上限为600分钟(10小时)。
例如,假设您SessionLifetimeInMinutes
为 Reader 用户设置了 600 分钟。还假设该用户保持登录状态并连续使用仪表板 10 小时,那么这将等同于 20 次使用会话(因为计费是以 30 分钟为单位的增量)。乍一看,这似乎会导致 0.30 美元/会话 * 20 个会话块 = 6 美元被计费。
但是,根据定价页面,每位读者每月的上限为 5.00 美元。这意味着无论为他们创建了多少 Quicksight 会话(无论持续时间如何),这个 Reader 每月都不能超过 5 美元。因此,无论您GetDashboardEmbedUrl
为给定的 Reader 调用 API 多少次,该用户的上限为 5 美元/月。
也可用于构成阅读器会话的内容(来自定价页面):
When does a Reader Session start and end?
A Reader Session starts with user-initiated action (e.g., login, dashboard load, page refresh, drill-down or filtering) and runs for next 30-minutes.
Keeping Amazon QuickSight open in a background browser window/tab does not result in active sessions until the Reader initiates action on page.
但是当用户重新启动它(通过关闭/重新打开选项卡/浏览器)时,我的网络应用程序将请求一个新的嵌入 URL。这是否意味着创建并计费了一个新的用户会话。
我对此不是 100% 确定,但是是的,我相信选项卡的刷新(或打开/关闭)会导致同一用户的新会话。
阅读器会话以用户启动的操作(例如登录、仪表板加载、页面刷新、向下钻取或过滤)开始,并运行接下来的 30 分钟。
以上摘录来自定价页面。因此,页面刷新(以及对 的另一个调用)似乎确实GetDashboardEmbedUrl
会为用户触发一个新会话。
上面的错误信息中提到了哪个“授权码”?
API 响应是一个 JSON 对象,GetEmbedDashboardUrl
如下所示:
{
"Status": 200,
"EmbedUrl": "https://us-east-1.quicksight.aws.amazon.com/embed/f4147cd0d4d_BLAH_BLAH_...",
"RequestId": "c15a7bad-629e-444a-b643-ff3142c9ae41"
}
如果您仔细查看EmbedUrl
,除了仪表板 url 本身之外,还有这些查询字符串参数:
- 验证码
- 代码
- 身份提供者
- statePersistenceEnabled
- 潜在的:其他参数也是
code
参数(嵌入在 embedUrl 中)是您询问的“授权码” 。
如果同一用户关闭选项卡/浏览器并再次打开 Web 应用程序和仪表板(当然在同一个浏览器中),是否可以存储嵌入 URL 并重用它(只要用户会话持续)?
不,那是做不到的。正如您共享的链接中所说:
The following rules apply to the combination of URL and authorization code:
- They must be used together.
- They can be used one time only.
- They are valid for 5 minutes after you run this command.
因此 embedURL 及其关联的授权码只能一起使用一次。这是有道理的,因为这将防止其他场景中的 MITM 重放攻击。此外,我实际上尝试缓存响应,然后在缓存命中的情况下重新使用 embedUrl,因为这将改善最终用户体验。但这不起作用 - QuickSight 阻止了 embedUrl 的“重播”,如他们的文档中所述。
关于时间的任何评论?
这也是我们的经验。我们的应用程序的GetDashboardEmbedUrl
REST API 大约需要 5-7 秒 (us-east-1),然后实际嵌入需要另外 3-5 秒。不是很好,但到目前为止我还没有看到解决这种糟糕的用户体验的方法。