[英]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.