web-dev-qa-db-ja.com

AWS Lambda関数でboto3を使用してAWS SNS経由でSMSを送信しますか?

SMS経由でユーザーに問題を通知するために、boto3 publishメソッドを使用してAWS Lambda関数からSMSメッセージを送信したいと思います。私のラムダ関数はPythonで記述されており、boto3モジュールを使用しています。私のラムダ関数はSNSに対する完全な権限を持っています。私はこのコードを持っています、

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

Boto3 documentation によると、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'
        }
    }
)

ドキュメントで説明されているように、「メッセージ」パラメータと次の3つのパラメータのいずれかが必要です。

TopicArn(文字列)-パブリッシュするトピック。

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が可能なパラメーターではないことが示されます。私は明白で単純な何かが足りないのではないかと思いますが、いくつかの助けを使うことができます。

メールゲートウェイや、Twilioなどのベンダー提供のソリューションなど、SMSメッセージを送信する他の方法があることはわかっていますが、SNSベースのルートを追跡して、どこが間違っているのかを理解したいと思います。

15
kelflanagan

実際、あなたの例は正しいように見えます。これが私が試したものです

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

魅力のように働いた。最初にrootアカウントの認証情報で構成されたawscliを使用して、テストドライブのコードを取得することをお勧めします。機能したら、必要な権限のみを持つ新しいユーザーを作成するか、それをインスタンスの役割に適用します。

SNS:Publish on resource:*(全員へのテキスト送信を許可)またはresource: '+17702233322'(特定の番号へのテキスト送信を許可)を許可するポリシーを作成する必要があります。

23
Atifm