quicksight.getSessionEmbedUrl 不是函数

quicksight.getSessionEmbedUrl is not a function

我在 https://github.com/aws-samples/amazon-quicksight-embedding-sample/blob/master/OpenIdAuthentication/lambda/index.js (although I did just find https://embed-workshop.learnquicksight.online/1.introduction.html 之后成功生成了一个仪表板嵌入 url,希望我之前能找到它)但是当我尝试生成会话嵌入 url 以启用“创作端口允许用户创建 QuickSight 资产,就像他们在 QuickSight 的 AWS 控制台中一样” 我在 CloudWatch 日志中收到此错误:

quicksight.getSessionEmbedUrl is not a function

我在这里仔细检查了 AWS 文档 - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/QuickSight.html#getSessionEmbedUrl-property

甚至 copy/pasted 我的 lambda 函数中的代码示例仍然出现错误。

我是不是忘记了什么,或者这是文档中的错误?

相关代码片段:

var quicksight = new AWS.QuickSight()

...

quicksight.getSessionEmbedUrl(sessionParams, function(err, data) {
    if (err) console.log('Get Session Embed Url:::::::::::::::: ', err, err.stack); // an error occurred
    else {
        console.log( 'Get Session Embed Url:::::::::::::::: ', data)
        res.statusCode = 200
        res.body = JSON.stringify(data)
        callback(null, res)
    }    

另外,当我通过控制台注销 quicksight 以确保它正确启动时,我在我的 CloudWatch 日志中得到了这个:

INFO    quicksight Service {
  config: Config {
    credentials: CognitoIdentityCredentials {
      expired: false,
      ...

所以它看起来像我预期的那样。

不确定您是否找到了这个问题的答案,但对我来说,问题是与 Lambda 运行时捆绑在一起的 SDK 版本(。更新了那个,不再有 'not a function' 错误。

对于那些发现这个问题的人,因为他们的 lambda 似乎不知道 AWS-SDK 中记录的某些函数。

问题确实是Lambda运行时捆绑的版本不是最新的。
您可以找到捆绑的版本 here

解决方案是创建一个包含最新版本的 lambda 层并在您的 lambda 中使用它。
这很简单。我发现 this guide 很有帮助。

TLDR:
使用最新的 aws-sdk 创建您的层:

mkdir my-lambda-layer
cd my-lambda-layer
mkdir nodejs
cd nodejs
npm init
npm install --save aws-sdk
cd ..
zip -r layer.zip nodejs

创建图层时使用layer.zip文件

这似乎是一个错误。 AWS docs 明确指出函数 generateEmbedUrlForAnonymousUser 存在。要使其正常工作,请在您的项目中包含 quicksights api json 文件,并在 quicksights 配置对象中提供其位置。

const AWS = require("aws-sdk");
const https = require('https');
var quicksight = new AWS.Service({
    apiConfig: require('./quicksight-2018-04-01.min.json'),
    region: process.env.AWS_REGION
});