簡體   English   中英

AWS SNS只能在本地發布,而不能從lambda發布

[英]AWS SNS publish only works locally, but not from lambda

這是在本地成功發送短信的代碼

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);
});

但是,這不會從我部署的lambda中觸發。

我的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管理控制台進行了檢查,以了解我的lambda角色中包含SNS

在此處輸入圖片說明

我該如何進行這項工作? 我想念什么?

我認為問題可能出在promise中,因為該行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);
  }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM