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ベースのルートを追跡して、どこが間違っているのかを理解したいと思います。
実際、あなたの例は正しいように見えます。これが私が試したものです
import boto3
sns = boto3.client('sns')
number = '+17702233322'
sns.publish(PhoneNumber = number, Message='example text message' )
魅力のように働いた。最初にrootアカウントの認証情報で構成されたawscliを使用して、テストドライブのコードを取得することをお勧めします。機能したら、必要な権限のみを持つ新しいユーザーを作成するか、それをインスタンスの役割に適用します。
SNS:Publish on resource:*(全員へのテキスト送信を許可)またはresource: '+17702233322'(特定の番号へのテキスト送信を許可)を許可するポリシーを作成する必要があります。