自由気ままに書いちゃおう

好きなことをつらつらと・・・

【AWS】S3バケットのイベント発生を検知しSQSに通知する

今回は、「S3バケットのイベント発生を検知しSQSに通知する」です。

 

■ はじめに

今回やりたいことをもう少し詳細に言うと、

1.S3バケットにオブジェクト(今回はテキストファイル)を格納する

2.上記1をトリガーにして、SQSに通知が来るようにする

です。

■ 用語説明

この後に出てくる用語について先に簡単に説明致します。

【イベント】

S3バケットに対して行われたアクションのことです。
例えば、S3で発生するイベントには以下のようなものがあります。
・S3バケットにオブジェクトが作られたとき
・S3バケットに存在するオブジェクトが削除されたとき
詳細はAWS公式サイトで確認できます。

イベント通知のタイプおよび送信先 - Amazon Simple Storage Service

【イベント通知】

S3バケットに設定します。
「S3バケットに対してどんなことをしたときに、どこに通知するのか」を定義します。
「S3バケットにイベント発生したときにSQSへ通知する」などの設定ができます。

■ 手順(概要)

以下手順で実施します。

1.S3バケットの作成

2.SQSでキューの作成

3.上記2で作成したキューのアクセスポリシーを変更

4.S3バケットの「イベント通知」設定

5.S3バケットにテキストファイルを格納

6.SQSキューにメッセージが届ていることを確認

■ 手順(1.S3バケットの作成)

特に変わった設定はしないので、画面だけ。
※バケット名は任意なので、ここでは「s3testbucket-yyyymmdd」としてます。
※手順3でS3バケットのARNを利用するため、コピーしてどこかに控えておいてください。

 

■ 手順(2.SQSでキューの作成)

1.SQSを開きます。

2.「キューを作成」をクリックします。

3.作成画面に遷移後、以下設定を行います。
【詳細】
今回は「標準」タイプを選択します。

【設定】
「メッセージ保持期間」のみデフォルトから変更し短くしています。
※長く保持している理由は特にないので。

【暗号化】
デフォルトのままです。

【アクセスポリシー】

SQSキューを作成後に変更するので、今はデフォルトのままで問題ありません。


【許可ポリシーの再実行】【デッドレターキュー】【タグ】は何も設定せずデフォルトのままです。


4.画面右下の「キューを作成」をクリックします。

5.作成が完了するとキューが表示されるため、キューをクリックします。

6.キューのARNをコピーします。(次の手順で使います。)

 

■ 手順(3.上記2で作成したキューのアクセスポリシーを変更)

1.SQSのコンソール画面にて作成したキューをクリックします。
2.「アクセスポリシー」タブをクリックします。

3.「編集」ボタンをクリックします。


4.編集画面に遷移後、「アクセスポリシー」欄を以下の通り編集します。
今回、S3バケットからSQSキューに対して通知を送る必要があるため、デフォルトのアクセスポリシーから変更が必要です。
※以下の「ここにS3バケットのARNを貼り付けてください」部分を先ほどコピーしたS3バケットのARNに変更下さい。
※同じく「ここにキューのARNを貼り付けてください」部分を先ほどコピーしたSQSキューのARNに変更下さい。


{
  "Version": "2012-10-17",
  "Id": "Policy1663902688260",
  "Statement": [
    {
      "Sid": "Stmt1663902684796",
      "Effect": "Allow",
      "Principal": "*",
      "Action": "sqs:SendMessage",
      "Resource": "ここにキューのARNを貼り付けてください",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "ここにS3バケットのARNを貼り付けてください"
        }
      }
    }
  ]
}


5.画面右下の「保存」をクリックします。



■ 手順(4.S3バケットの「イベント通知」設定)

1.手順1で作成したS3バケットを開きます。

2.「プロパティ」タブをクリックします。

3.画面下の方にある「イベント通知」欄の「イベント通知を作成」をクリックします。


4.「イベント通知を作成」画面にて以下の通り設定します。
※今回は、「S3バケットに新しいオブジェクトが作成されたらSQSに通知を飛ばす設定」を行います。

【一般的な設定】


【イベントタイプ】

「PUT」にチェックを入れます。

※他の項目はチェック不要です。

 

【送信先】

作成したSQSを指定します。
「SQSキュー」のプルダウンメニューから任意のキューを選択することができます。

5.「変更の保存」をクリックします。

 

■ 手順(5.S3バケットにテキストファイルを格納)

1.S3バケットを開き、テキストファイルをアップロードします。
※ドラッグ&ドロップでアップロード。

 

■ 手順(6.SQSキューにメッセージが届ていることを確認)

1.SQSキューに開きます。

2.画面右上の「メッセージを送受信」をクリックします。

3.「メッセージを受信」欄の「メッセージをポーリング」をクリックします。

4.上手くいくと、メッセージ欄に先ほどS3バケットにオブジェクトを生成したイベントの内容が届いているかと思います。
※ 画面は空のものです。実際は項目が表示されます。

 

5.メッセージをクリックすると「本文」タブの中に、今回のS3バケットに対して発生したイベント内容がJSON形式で確認することができます。

「本文」の中には、
・リージョン名
・イベント発生時刻
・格納されたオブジェクト情報(今回の場合には、テキストファイルの情報)
などが記載されています。

 

少し長くなりましたが、以上です。