Как отправить 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 документация, метод publish принимает следующие параметры,
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 (string) -- номер телефона, на который вы хотите доставить SMS-сообщение. Используйте формат E. 164.
Если значение параметра PhoneNumber не указано, необходимо укажите значение для параметров TargetArn или TopicArn.
при выполнении моего кода возвращается ошибка проверки параметров. В нем говорится:
неизвестный параметр на входе: "PhoneNumber", должен быть одним из: TopicArn, TargetArn, >Сообщение, Тема, 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 '(разрешить текст определенное число.)