JavaからS3にアップロードしてSNSを使ってメールを送信する方法
JavaからS3にファイルをアップロードする方法は「JavaからAWS CLIのcredentialsを参照してS3にアクセスする方法」を参照ください。
S3にファイルがアップロードされたらメールで通知する仕組みを実装してみます。
トピック作成
まずはSNSのトピックを作成します。トピック作成時にアクセスポリシーをちゃんと設定しておきましょう。
サブスクリプション作成
次にサブスクリプションを作成します。
プロトコルはEメールにします。エンドポイントに送信したいメールアドレスを入力します。
サブスクリプションを作成したら、「保留中の確認」というステータスになります。
メールが来たら、Confirm subscriptionをクリックします。ブラウザが開かれるので、閉じます。そうするとステータスが「確認済み」になり、Eメール送信が可能になります。
S3のバケット設定
バケットはすでに作成済みとします。プロパティよりEventsをクリックします。
ここではPUTにチェックを入れています。SNSトピックを選択すると、先ほど作成したSNSがセレクトボックスに表示されるのでそれを選択して保存します。
Unable to validate the following destination configurations. Permissions on the destination topic do not allow S3 to publish notifications from this bucket.
このエラーが出たら、トピック作成時のアクセスポリシーが間違っています。トピックのアクセスポリシーを修正しましょう。
よくわからない場合は以下のように修正すればエラーは解消されます。※バケット名には本当のバケット名を指定してください
"Condition": { "ArnLike": { "aws:SourceArn": "arn:aws:s3:*:*:バケット名" } }
再度バケットのEventsで同じSNSトピックを選択して保存すると正常に保存できます。
これで、JavaからS3にファイルをアップロードすれば、そのタイミングでSNSのサブスクリプションで登録したEメールにメールが送信されます。
SNSではなくSESにすれば、ファイル添付したメールを送信したりすることも可能です。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント