SageMaker NodeJS 的 SDK 未锁定 API 版本

SageMaker NodeJS's SDK is not locking the API Version

我是 运行 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()

此代码在 2.418.0 上的 aws-sdk 本地运行良好。

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

  • MissingRequiredParameter: Missing required key 'PrimaryContainer' in params
  • UnexpectedParameter: Unexpected key 'Containers' found in params

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

如您所见,aws-sdk 的 'embedded' 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,这个方法的params才包含Containers,不需要PrimaryContainer.

如您所述,解决方法 是使用您正在使用的 aws-sdk 版本部署 lambda。这有时被认为是最佳实践,因为它将 aws-sdk 固定在您构建和测试的功能上。