SDK SageMaker NodeJS не блокирует версию API - PullRequest
1 голос
/ 20 марта 2019

Я запускаю некоторый код в AWS Lambda, который динамически создает модели SageMaker. Я блокирую версию API Sagemaker следующим образом:

const sagemaker = new AWS.SageMaker({apiVersion: '2017-07-24'});

А вот код для создания модели:

await sagemaker.createModel({
        ExecutionRoleArn: 'xxxxxx',
        ModelName: sageMakerConfigId,
        Containers: [{
            Image: ecrUrl
        }]
    }).promise()

Этот код работает локально с aws-sdk на 2.418.0.

Однако, когда этот код развернут в Lambda, он не работает из-за некоторых ошибок проверки при создании модели:

  • MissingRequiredParameter: отсутствует обязательный ключ 'PrimaryContainer' в параметрах
  • Неожиданный параметр: в параметрах обнаружен неожиданный ключ «Контейнеры»

Кто-нибудь знает о существующих ошибках в aws-sdk для NodeJS, использующих SDK, предоставляемый AWS в контексте Lambda? Я полагаю, что SDK, доступный в AWS Lambda, является более современным, чем 2.418.0, но, очевидно, существуют проблемы совместимости.

Ответы [ 2 ]

1 голос
/ 21 марта 2019

Как вы заметили, «встроенная» лямбда-версия aws-sdk отстает.Это на самом деле на 2.290.0 (вы можете увидеть полную информацию об окружающей среде здесь: https://docs.aws.amazon.com/lambda/latest/dg/current-supported-versions.html)

Вы можете увидеть здесь: https://github.com/aws/aws-sdk-js/blame/master/clients/sagemaker.d.ts, что это только до 2.366.0, что параметры дляэтот метод включал Containers и не требовал PrimaryContainer.

Как вы заметили, обходной путь заключается в развертывании вашей лямбды с версией aws-sdk, которую вы используетеИногда это отмечается как лучшая практика, так как это указывает aws-sdk на функциональность, которую вы создали и протестировали.

0 голосов
/ 20 марта 2019

Мне удалось исправить это, удалив aws-sdk из devDependencies в моем package.json и переместив его в dependencies, поэтому Lambda будет вынуждена использовать его.

"dependencies": {
    "aws-sdk": "^2.418.0"
  }

Тем не менее, это явно ошибка для меня.

...