quicksight.getSessionEmbedUrl не является функцией

Я успешно сгенерировал URL-адрес для встраивания панели мониторинга после https://github.com/aws-samples/amazon-quicksight-embedding-sample/blob/master/OpenIdAuthentication/lambda/index.js (хотя я только что нашел https://embed-workshop.learnquicksight.online/1.introduction.html и жаль, что не нашел его раньше), но когда я попытался сгенерировать URL-адрес для внедрения сеанса, чтобы разрешить портам разработки разрешить пользователю создавать ресурсы QuickSight, точно так же, как они могут в консоли AWS для QuickSight, я получаю эту ошибку в своих журналах CloudWatch:

quicksight.getSessionEmbedUrl не является функцией

Я дважды проверил документы AWS здесь - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/QuickSight.html#getSessionEmbedUrl-property

и даже скопировал / вставил пример кода в мою лямбда-функцию, и я все еще получаю сообщение об ошибке.

Я что-то просто забыл или это ошибка в документации?

Соответствующий фрагмент кода:

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,
      ...

Это похоже на то, что я ожидал.




Ответы (2)


Для тех, кто нашел этот вопрос, потому что их лямбда, похоже, не знает о некоторых функциях, задокументированных в AWS-SDK.

Проблема действительно в том, что версия, связанная со средой выполнения Lambda, не самая последняя.
Узнать, какая версия входит в комплект, можно здесь

Решение состоит в том, чтобы создать слой лямбда, включающий последнюю версию, и использовать его в своей лямбде.
Это довольно просто сделать. Мне очень понравилось это руководство полезный.

TL; DR:
Создание слоя с помощью последней версии 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

person Raph    schedule 12.11.2020

Не уверен, что вы нашли ответ на этот вопрос, но для меня проблема заключалась в версии SDK, поставляемой вместе со средой выполнения Lambda (обновлено это, и не более того, ошибка `` не функция ''.

person James Hunter    schedule 29.10.2020