Как отправить 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 '(разрешить текст определенное число.)