Amazon web services Boto3 SNS发布短信的不一致行为

Amazon web services Boto3 SNS发布短信的不一致行为,amazon-web-services,aws-lambda,amazon-sns,Amazon Web Services,Aws Lambda,Amazon Sns,我有一个在运行时发送文本消息的功能: def txtUserValidationCode(countryCode, phoneNum, message): sns = boto3.client('sns') try: logger.info("Trying to send text") sns.publish( PhoneNumber="+" + countryCode + phone

我有一个在运行时发送文本消息的功能:

def txtUserValidationCode(countryCode, phoneNum, message):
    sns = boto3.client('sns')
    try:
        logger.info("Trying to send text")
        sns.publish(
            PhoneNumber="+" + countryCode + phoneNum,
            Message=message
        )
    except:
        logger.info("Text message failed")
    else:
        logger.info("Text message successful")
有时工作,有时超时,即使输入参数完全相同。有没有一个节流阀,你可以发送多少短信与三个社交网站?我只是试着硬编码电话号码和信息,以测试是否是我的输入导致发布方法失效,但它仍然不起作用

更令人困惑的是,它没有抛出错误,只是超时

更令人困惑的是,当我将相同的代码复制并粘贴到另一个函数中时,它工作得很好

有人对此有解释吗?我通读了SNS的文档,没有找到任何可以解释这一点的东西。我在想也许我需要申请增加配额

顺便说一句:lambda拥有管理员权限

更新
功能刚刚成功,没有任何更改,只是在15分钟后再次测试。我很想知道超时的原因是什么。我应该增加lambda的超时吗?我还将文本消息的默认类型更改为事务性,因为我看到它们获得了更高的优先级?也许这就是为什么?任何答案都有帮助

听起来您有一个AWS Lambda函数,它与多个子网关联,其中一些子网是公共的,一些是私有的

首选使用与VPC无关的AWS Lambda函数。这将提供对互联网的直接访问,因此也将提供对亚马逊SNS的直接访问

但是,如果AWS Lambda功能与VPC关联,请确保:

  • Lambda功能仅与专用子网相关
  • 公用子网中存在NAT网关或NAT实例

我转到SNS控制台,将默认消息更改为事务消息,这使其在AWS队列中具有更高的优先级。到目前为止,这是成功的。

不,您不需要请求配额增加,只要您没有收到实际错误。即使下面的消息发布超时,您是否确实打印了第一条日志语句?它以什么方式超时?lambda函数本身是否超时或发布调用?打印“尝试发送文本”日志语句,然后整个函数超时,但这是整个lambda函数中的最后一个函数调用,因此根据我的日志记录,它完成了所有其他操作,然后,当它点击文本消息功能时,它无法通过将lambda超时时间增加到15分钟,然后看看日志会怎么说,如果lambda本身仍然超时,或者如果您从sns收到正确的响应/错误。将尝试,功能刚刚成功,不知道为什么。非常奇怪这些症状表明存在连接问题。在调用SNS API(例如,curl/ping Google或其他可用服务)之前,您可能希望增强Lambda功能以测试连接性。Lambda位于专用vpc中,通过NAT网关与internet连接您确定它仅配置为使用专用子网吗?您的描述与将其配置为混合使用公用和专用子网时会发生的情况相匹配。