错误:找不到模块“@aws-sdk/client-sns”

rah*_*rma 12 amazon-sns aws-sdk aws-sdk-nodejs

我在调用 lambda 时收到此错误。

"errorType": "Runtime.ImportModuleError", "errorMessage": "错误: 找不到模块 '@aws-sdk/client-sns'\n需要堆栈:\n- /var/task/handler.js\n- /var /runtime/UserFunction.js\n- /var/runtime/index.js", "trace": [ "Runtime.ImportModuleError: 错误: 找不到模块 '@aws-sdk/client-sns'",

import * as AWS from '@aws-sdk/client-sns';
import { JamaSnsMessage } from './models/jama';
import { region, snsTopicArn } from './utils/constants';
import { log } from './utils/logger';

const client = new AWS.SNS({ region });

/**
 * Publishes given SNS formatted Jama items to SNS topic
 *
 * @param {JamaSnsMessage[]} items
 */
export const publishItems = async (items: JamaSnsMessage[]): Promise<void> => {
  if (!items || items.length <= 0) {
    return;
  }

  for (const item of items) {
    const params = {
      /* eslint-disable */
      MessageStructure: 'json',
      Message: JSON.stringify(item),
      TopicArn: snsTopicArn,
      /* eslint-enable */
    };
    log.info(`Sending jama item: ${JSON.stringify(item)} to sns`);
    await send(params);
  }
};

export const send = async (params: AWS.PublishInput): Promise<void> => {
  try {
    const data = await client.send(new AWS.PublishCommand(params));
    log.info(`Item: ${JSON.stringify(params)} was published with id: ${data.MessageId}`);
  } catch (error) {
    log.error(`Error while publishing message ${JSON.stringify(params)}. Cause: ${error}`);
  }
};
Run Code Online (Sandbox Code Playgroud)

bmu*_*mur 6

如果您使用的是 SDK V2,请使用:

var AWS = require('aws-sdk');
AWS.config.update({region: 'REGION'});

// Create promise and SNS service object
const SNS = new AWS.SNS({apiVersion: '2010-03-31'})
Run Code Online (Sandbox Code Playgroud)

如果由于大小原因您只想在 Lambda 函数中使用 SNS 模块,我建议您使用适用于 JavaScript 的 AWS SKD V3。默认情况下,Lambda 仍然仅与 SDK 的 V2 兼容,但有一个解决方法。以下是仅使用 AWS SDK for JavaScrpt - 版本 3 的模块创建函数的示例

  • 我已经解决了,这是我使用的节点版本的问题。我将节点版本更新到 12.X,现在它可以找到该库了。所以,我可以说 V3 至少需要节点版本 12.X。除了节点版本之外,我没有更改任何其他内容。 (2认同)