JavaからS3にアップロードしてSNSを使ってメールを送信する方法

JavaからS3にアップロードしてSNSを使ってメールを送信する方法

JavaからS3にファイルをアップロードする方法は「JavaからAWS CLIのcredentialsを参照してS3にアクセスする方法」を参照ください。

S3にファイルがアップロードされたらメールで通知する仕組みを実装してみます。

トピック作成

まずはSNSのトピックを作成します。トピック作成時にアクセスポリシーをちゃんと設定しておきましょう。

サブスクリプション作成

次にサブスクリプションを作成します。

プロトコルはEメールにします。エンドポイントに送信したいメールアドレスを入力します。

サブスクリプションを作成したら、「保留中の確認」というステータスになります。

メールが来たら、Confirm subscriptionをクリックします。ブラウザが開かれるので、閉じます。そうするとステータスが「確認済み」になり、Eメール送信が可能になります。

S3のバケット設定

バケットはすでに作成済みとします。プロパティよりEventsをクリックします。

JavaからS3にアップロードしてSNSを使ってメールを送信する方法

ここでは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メールにメールが送信されます。

JavaからS3にアップロードしてSNSを使ってメールを送信する方法

SNSではなくSESにすれば、ファイル添付したメールを送信したりすることも可能です。

コメント

タイトルとURLをコピーしました