我正试图从AP-South-1(即孟买)地区托管的AWS Lambda函数发送OTP。我正在使用SNS的全球短信功能。由于"AP-South-1"区域不支持全球短信功能,我将SNSClient的区域端点发送为"APNortheast1"(即东京)区域,因为它支持全球短信。
现在,我已经赋予lambda函数管理员权限(通过使用管理员策略附加角色)。但是,它似乎仍然不起作用(没有将消息发送到我的手机)。我在执行该功能时没有收到任何异常,我也收到了该SMS的"TransactionID"。在SNS控制台中,SMS显示为失败。所以,我已经为它启用了cloudwatch日志。我得到的日志如下-
{
"notification": {
"messageId": "8cba93de-b794-577d-99be-c1ba5d5d21dd",
"timestamp": "2017-10-21 06:26:17.946"
},
"delivery": {
"destination": "+91XXXXXXXXXX",
"smsType": "Transactional",
"providerResponse": "Internal error",
"dwellTimeMs": 79
},
"status": "FAILURE"
}
现在,具有讽刺意味的是,这实际上是一个新帐户,我正在从另一个帐户(手动)迁移资源。在这个旧帐户中,我有完全相同的设置,但它似乎能正确地将消息传递到我的手机上。供您参考,我的Lambda功能是在.net核心中编写的,我正试图将短信发送到一个印度手机号码。
截至2017年10月,亚马逊SNS在以下地区支持短信:
- 美国东部(北弗吉尼亚州)
- 美国西部(俄勒冈州)
- 欧盟(爱尔兰)
- 亚太地区(东京)
- 亚太地区(新加坡)
- 亚太地区(悉尼)
发送SMS的一种快速方法是使用AWS命令行界面(CLI):
aws sns publish --phone-number 9112345678 --message foo --region ap-southeast-2
使用ap-south-1
时会失败,因为该区域不支持SMS。
您的Lambda代码可以通过其他区域发送消息,但您需要在其他区域创建您的SNS客户端对象。