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
});
我在 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
});