Публикация AWS SNS работает только локально, но не из лямбды - PullRequest
0 голосов
/ 30 октября 2018

Это код, который успешно выполняется на локальном компьютере для отправки смс

const snsParams = {
  Message: "Hello World",
  PhoneNumber: normalizedPhoneNumber,
};

const sms = messager.publish(snsParams).promise();

sms.then(data => {
  console.log('Success!', data);
}).catch(err => {
  console.log('Error!', err);
});

Однако это не срабатывает из-за моей развернутой лямбды.

Мой serverless.yml содержит необходимые iamRoleStatements, подобные этому

iamRoleStatements:
- Effect: Allow
  Action:
    - dynamodb:DescribeTable
    - dynamodb:Query
    - dynamodb:Scan
    - dynamodb:BatchGetItem
    - dynamodb:BatchWriteItem
    - dynamodb:GetItem
    - dynamodb:PutItem
    - dynamodb:UpdateItem
    - dynamodb:DeleteItem
  Resource:
    - arn:aws:dynamodb:us-west-1:*:table/${app-name}-${self:custom.stage}
    - arn:aws:dynamodb:us-west-1:*:table/${app-name}-${self:custom.stage}/*
- Effect: Allow
  Action:
    - sns:*
  Resource: "*"

Я также проверил с консоли управления IAM, что SNS включен в мою роль лямбды

enter image description here

Как я могу заставить эту работу? Чего мне не хватает?

1 Ответ

0 голосов
/ 31 октября 2018

Я думаю, что проблема может быть в обещаниях, потому что линия messager.publish(snsParams).promise(); создает только обещание, и при выполнении обещания нет ожидания.

Вы можете изменить свой код так:

exports.handler = async function(event) {
  ...
  const snsParams = {
    Message: "Hello World",
    PhoneNumber: normalizedPhoneNumber,
  };
  try {
    const sms = await messager.publish(snsParams).promise();
    console.log('Success!', sms);
  } catch (err) {
    console.log('Error!', err);
  }
}
...