Отправить SMS через AWS SNS с помощью boto3 в функции AWS Lambda?
Я хотел бы отправить SMS-сообщение из функции AWS Lambda, используя метод публикации boto3, чтобы уведомить пользователя о проблемах с помощью SMS. Моя лямбда-функция написана на Python, и я использую модуль boto3. Моя лямбда-функция имеет полные права на SNS. У меня есть этот код,
sns = boto3.client('sns')
sns.publish(
PhoneNumber = '+11234567890',
Message = 'Simple text message'
)
В соответствии с документацией boto3 метод публикации принимает следующие параметры:
response = client.publish(
TopicArn='string',
TargetArn='string',
PhoneNumber='string',
Message='string',
Subject='string',
MessageStructure='string',
MessageAttributes={
'string': {
'DataType': 'string',
'StringValue': 'string',
'BinaryValue': b'bytes'
}
}
)
Для этого требуется параметр "Сообщение" и один из следующих трех параметров, как описано в документах:
ТемаArn (строка) - тема, которую вы хотите опубликовать.
Если вы не указали значение параметра TopicArn, вы должны укажите значение для параметров PhoneNumber или TargetArn.
TargetArn (строка) - либо TopicArn, либо EndpointArn, но не оба.
Если вы не укажете значение для параметра TargetArn, вы должны укажите значение для параметров PhoneNumber или TopicArn.
PhoneNumber (строка) - номер телефона, которому вы хотите доставить SMS-сообщение. Используйте формат E.164.
Если вы не укажете значение для параметра PhoneNumber, вы должны укажите значение для параметров TargetArn или TopicArn.
Когда мой код выполняется, возвращается ошибка проверки параметров. В нем указано,
Неизвестный параметр на входе: "PhoneNumber", должен быть одним из: TopicArn, TargetArn, > Message, Subject, MessageStructure, MessageAttributes ".
Поэтому в документации, по-видимому, указывается, что PhoneNumber является допустимым параметром, но при использовании возникает ошибка, и обратная связь от ошибки указывает, что PhoneNumber не является возможным параметром. Я подозреваю, что упускаю что-то очевидное и простое, но могу использовать некоторую помощь.
Я знаю, что есть другие способы отправлять SMS-сообщения, такие как шлюзы электронной почты и другие поставляемые поставщиком решения, такие как Twilio, но я хотел бы продолжить маршрут на основе SNS и понять, где я поступил неправильно.
Ответы
Ответ 1
На самом деле ваш пример выглядит правильно. Вот что я пробовал
import boto3
sns = boto3.client('sns')
number = '+17702233322'
sns.publish(PhoneNumber = number, Message='example text message' )
Работал как шарм. Я рекомендую сначала использовать awscli, настроенный с учетными данными учетной записи root, и взять код для тестового диска. После его создания либо создайте нового пользователя с правами, которые вам нужны, либо примените его к роли экземпляра.
Вам необходимо создать политику, которая позволяет SNS: публиковать на ресурсе: * (разрешить текстовое сообщение всем) или ресурс: '+17702233322' (разрешить текст конкретному номеру).