如何在AWS Lambda函数中使用boto3通过AWS SNS发送SMS消息?

时间:2016-07-13 17:59:55

标签: python-2.7 sms amazon-sns boto3 aws-lambda

我想使用boto3发布方法从AWS Lambda函数发送SMS消息,以通过SMS通知用户问题。我的lambda函数是用Python编写的,我使用的是boto3模块。我的lambda函数拥有SNS的完全权限。我有这个代码,

sns = boto3.client('sns')
sns.publish(
    PhoneNumber = '+11234567890',
    Message = 'Simple text message'
)

根据boto3 documentation,发布方法接受以下参数,

response = client.publish(
    TopicArn='string',
    TargetArn='string',
    PhoneNumber='string',
    Message='string',
    Subject='string',
    MessageStructure='string',
    MessageAttributes={
        'string': {
            'DataType': 'string',
            'StringValue': 'string',
            'BinaryValue': b'bytes'
        }
    }
)

它需要一个“Message”参数和以下三个参数之一,如文档中所述:

  

TopicArn(string) - 您要发布的主题。

     

如果没有为TopicArn参数指定值,则必须   指定PhoneNumber或TargetArn参数的值。

     

TargetArn(string) - TopicArn或EndpointArn,但不是两者。

     

如果没有为TargetArn参数指定值,则必须   指定PhoneNumber或TopicArn参数的值。

     

PhoneNumber(字符串) - 您要传送的电话号码   短信息。使用E.164格式。

     

如果没有为PhoneNumber参数指定值,则必须   为TargetArn或TopicArn参数指定一个值。

执行代码时,会返回参数验证错误。它说,

  

输入中的未知参数:“PhoneNumber”,必须是以下之一:TopicArn,   TargetArn,> Message,Subject,MessageStructure,MessageAttributes“。

因此,文档似乎表明PhoneNumber是一个有效的参数,但在使用时,会发生错误,并且错误的反馈表明PhoneNumber不是可能的参数。我怀疑我错过了一些明显而简单的东西,但可以使用一些帮助。

我知道还有其他途径可以发送短信,例如电子邮件网关和其他供应商提供的解决方案,如Twilio,但我想继续使用基于SNS的路线并了解我出错的地方。

1 个答案:

答案 0 :(得分:23)

实际上你的例子看起来是正确的。这是我试过的

import boto3
sns = boto3.client('sns')
number = '+17702233322'
sns.publish(PhoneNumber = number, Message='example text message' )

像魅力一样工作。我建议首先使用配置了root帐户凭据的awscli,然后将代码用于测试驱动器。一旦它工作,或者只创建一个只需要你所需权限的新用户,或者将它应用于实例角色。

您需要创建一个允许SNS的政策:在资源上发布:*(允许向所有人发短信)或资源:'+ 17702233322'(允许文本到特定数字)。

相关问题