Amazon S3 バケットの変更を Amazon SNS でメール通知する

# 1. はじめに

Amazon S3 バケットにファイルが追加されたり更新されたりした際の通知を Amazon SNS で通知させる際の手順をまとめます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/362248aa-ee91-1978-25d0-12406ed3ff26.png)

# 2. 実装手順

シンプルで待ち時間もないので、慣れると 10-15 分程度で作業が完了します。

(1) Amazon SNS でトピックとサブスクリプションを作成
(2) 登録された宛先 E メールでサブスクライブ登録
(3) Amazon SNS でアクセスポリシーの設定
(4) Amazon S3 でイベント通知の設定
(5) E メール通知の確認

変更を通知したい Amazon S3 バケットはすでに作成されているものとします。

## 2-1. Amazon SNS でトピックの作成

新規にトピックを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/b4936d5f-789f-569b-07cd-e89f16113832.png)

今回は特に要件がないので、タイプはスタンダードを選択しました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/ca804d78-f2ca-5196-d72c-3f2d35c0f996.png)

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

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/5cc8eb25-3a3e-ad73-4a82-dcab632da36e.png)

「トピック ARN」は先ほど作成したものを選択します。

変更の通知先は E メールを選択しました。
他にも SMS や、イベント駆動させたい場合は AWS Lambda なども選択できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/dc4d5b00-ec34-b9aa-27f5-ebe8aced2561.png)

## 2-2. 登録された宛先 E メールでサブスクライブ登録

初回は宛先のメールアドレスにサブスクリプションの確認依頼が届くので、「Confirm Subscription」を実施します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/452c710c-da0f-fd64-32f6-ef80fe40c987.png)

サブスクリプションが完了したことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/cce4439a-3d06-3cdf-3903-e5f39a6866c3.png)

Amazon SNS のコンソールでも「確認済み」と表示されていることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/06631402-3663-f281-c445-b81445d75074.png)

## 2-3. Amazon SNS でアクセスポリシーの設定

Amazon SNS トピックのアクセスポリシーを編集します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/f260dad9-0d36-c70c-8974-97f030738eb4.png)

</details>

<details><summary> Amazon SNS トピックのアクセスポリシー (参考例) </summary>

```json: Amazon SNS アクセスポリシー
{
  "Version": "2012-10-17",
  "Id": "<任意の ID>",
  "Statement": [
    {
      "Sid": "<任意のポリシー名>",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SNS:Publish",
      "Resource": "<作成した Amazon SNS トピックの ARN>",
      "Condition": {
        "StringEquals": {
          "AWS:SourceArn": "arn:aws:s3:::<Amazon S3 バケット名>"
        }
      }
    }
  ]
}
```

[(参考) Amazon S3 ユーザーガイド - Amazon SNS トピックを作成する](https://docs.aws.amazon.com/ja_jp/AmazonS3/latest/userguide/ways-to-add-notification-config-to-bucket.html)

</details>

## 2-4. Amazon S3 でイベント通知の設定

対象の Amazon S3 バケットの「プロパティ」から、イベント通知を作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/059e559b-0131-71ff-e588-176ef675e68d.png)

今回はオブジェクト作成に関連する変更の際にイベント通知する設定にしています。
あわせて、オブジェクト削除などの際にイベント通知するような設定も追加できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/280f7c1a-64b5-a95e-aada-cdc6e2f28298.png)

イベントの通知先として、先ほど作成した SNS トピックを選択します。
もちろん他の活用例として AWS Lambda や Amazon SQS に通知させてイベント駆動のジョブを実行させることもできます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/420ac068-b018-d93e-cf0a-35e044293e95.png)

S3 のイベント通知が作成されたことを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/d352b14e-d61b-8d4e-81d7-7d1e5e55aca0.png)

## 2-5. E メール通知の確認

試しに対象の S3 バケットにファイルを追加してみると、早速 E メールで通知が届きました。

「file03.txt.gz」というファイルが追加されたことがわかります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/864151/8cd60bed-8f72-cb0c-e987-caa1e66887a9.png)

# 3. まとめ

Amazon S3 バケットにファイルが追加されたり更新されたりした際の通知を Amazon SNS で通知させる際の手順をまとめました。

Amazon S3 + Amazon SNS という超基本的な構成ですが、シンプルなだけに色々と応用が効きそうです。

# 4. 関連ブログ

前段として、異なる AWS アカウント間の S3 バケットを手動で同期させる手法について紹介しています。

https://qiita.com/sanjushi003/items/98a1f3b478f26a391e38

https://qiita.com/sanjushi003/items/6e72df957fd8ea7ac8ac