web-dev-qa-db-fra.com

Envoyer un SMS via AWS SNS en utilisant boto3 dans une fonction AWS Lambda?

Je souhaite envoyer un message SMS à partir d'une fonction AWS Lambda à l'aide de la méthode de publication boto3 pour informer l'utilisateur des problèmes via SMS. Ma fonction lambda est écrite en Python et j'utilise le module boto3. Ma fonction lambda a tous les droits sur SNS. J'ai ce code,

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

Selon la documentation de boto3 , la méthode de publication accepte les paramètres suivants,

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

Il nécessite un paramètre "Message" et l'un des trois paramètres suivants, comme décrit dans la documentation:

TopicArn (string) - Le sujet que vous souhaitez publier.

Si vous ne spécifiez pas de valeur pour le paramètre TopicArn, vous devez spécifier une valeur pour les paramètres PhoneNumber ou TargetArn.

TargetArn (string) - Soit TopicArn ou EndpointArn, mais pas les deux.

Si vous ne spécifiez pas de valeur pour le paramètre TargetArn, vous devez spécifier une valeur pour les paramètres PhoneNumber ou TopicArn.

PhoneNumber (string) - Le numéro de téléphone auquel vous souhaitez envoyer un message SMS. Utilisez le format E.164.

Si vous ne spécifiez pas de valeur pour le paramètre PhoneNumber, vous devez spécifier une valeur pour les paramètres TargetArn ou TopicArn.

Lorsque mon code est exécuté, une erreur de validation des paramètres est renvoyée. Il est dit,

Paramètre inconnu en entrée: "PhoneNumber", doit être l'un de: TopicArn, TargetArn,> Message, Subject, MessageStructure, MessageAttributes ".

Ainsi, la documentation semble indiquer que PhoneNumber est un paramètre valide, mais lorsqu'il est utilisé, une erreur se produit et le retour d'information de l'erreur indique que PhoneNumber n'est pas un paramètre possible. Je soupçonne que je manque quelque chose d'évident et de simple, mais je pourrais avoir besoin d'aide.

Je sais qu'il existe d'autres moyens d'envoyer SMS des messages tels que des passerelles de messagerie et d'autres solutions fournies par les fournisseurs comme Twilio, mais je voudrais poursuivre l'itinéraire basé sur SNS et comprendre où je me suis trompé.

15
kelflanagan

En fait, votre exemple semble correct. Voici ce que j'ai essayé

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

A fonctionné comme un charme. Je recommande d'abord d'utiliser awscli configuré avec les informations d'identification de votre compte root et de prendre le code pour un essai routier. Une fois que cela fonctionne, créez un nouvel utilisateur avec uniquement les droits dont vous avez besoin ou appliquez-le à un rôle d'instance.

Vous devez créer une stratégie qui autorise SNS: Publier sur la ressource: * (autoriser l'envoi de SMS à tout le monde) ou la ressource: '+17702233322' (autoriser le texte vers un numéro spécifique).

23
Atifm