【问题标题】:SageMaker NodeJS's SDK is not locking the API VersionSageMaker NodeJS 的 SDK 未锁定 API 版本
【发布时间】:2019-03-21 05:32:54
【问题描述】:

我在 AWS Lambda 中运行一些动态创建 SageMaker 模型的代码。 我像这样锁定 Sagemaker 的 API 版本:

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

这是创建模型的代码:

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

此代码在 aws-sdk2.418.0 上运行良好。

但是,当将此代码部署到 Lambda 时,由于创建模型时出现一些验证错误,它无法工作:

  • MissingRequiredParameter:参数中缺少必需的键“PrimaryContainer”
  • UnexpectedParameter:在参数中发现意外的键 'Containers'

是否有人知道在 Lambda 上下文中使用 AWS 提供的开发工具包的 NodeJS aws-sdk 中存在的错误?我相信 AWS Lambda 中可用的 SDK 比 2.418.0 更新,但显然存在兼容性问题。

【问题讨论】:

    标签: node.js aws-lambda aws-sdk amazon-sagemaker


    【解决方案1】:

    您已经注意到 aws-sdk 的“嵌入式”lambda 版本落后了。它实际上在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 版本部署您的 lambda。这有时被认为是一种最佳实践,因为它将aws-sdk 固定在您构建和测试的功能上。

    【讨论】:

    • 我稍微反思了一下,如果 API 从 2.290.0 更改为 2.418.0,那么 API 版本也应该更改。因此,尝试在2.290.0 上设置2017-07-24 应该会立即失败。不幸的是,截至目前,只有一个 API 版本可用,所以我认为 AWS 一直在进行更改而不对 API 进行版本控制。
    • 我认为他们只会在 API 发生重大变化时才恢复 API(例如,给出新的日期)。为2.290.0 编写的所有代码都将在2.418.0 中运行——他们所做的是添加功能(例如,现在您可以指定容器,这使得 PrimaryContainer 成为可选)。
    猜你喜欢
    • 1970-01-01
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 2022-06-23
    • 1970-01-01
    • 2014-08-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多