AWSの部屋

AWS学習者向けのブログです

S3 へのファイル格納時に SQS キューに通知をしてみる

はじめに

AWS認定試験に必ず出題される SQS ですが、今まで触ったことがなかったので本日は S3 と連携させて SQS を試してみたいと思います。

使用するサービス

  • Amazon S3・・・AWS が提供するオブジェクトストレージサービス
  • Amazon SQS・・・フルマネージド型のメッセージキューイングサービス

アーキテクチャ

手順

  1. S3 でバケットを作成
  2. SQS キューを作成
  3. S3 でイベント通知を作成
  4. 動作確認

1. S3 でバケットを作成

「20220807-sqs-test」というバケットを作成します。設定はデフォルトでOKです。

2. SQS キューを作成

「TestQueue」という SQS キューを作成します。

アクセスポリシーを以下のように設定します。

{
  "Version": "2008-10-17",
  "Id": "__default_policy_ID",
  "Statement": [
    {
      "Sid": "__owner_statement",
      "Effect": "Allow",
      "Principal": {
        "AWS": "*"
      },
      "Action": "SQS:*",
      "Resource": "arn:aws:sqs:ap-northeast-1:xxxxxxxxxxxxx:TestQueue",
      "Condition": {
        "ArnLike": {
          "aws:SourceArn": "arn:aws:s3:*:*:20220807-sqs-test"
        }
      }
    }
  ]
}

3. S3 でイベント通知を作成

イベント名とイベントタイプを設定し、作成した SQS キューを設定して「変更の保存」をクリックします。

4. 動作確認

バケットにファイルをアップロードします。

「メッセージを送受信」をクリックします。

「メッセージをポーリング」をクリックします。

メッセージが2件表示されます。

上のキューのメッセージ

アップロードしたファイルの情報などが記載されています。

{"Records":[{"eventVersion":"2.1","eventSource":"aws:s3","awsRegion":"ap-northeast-1","eventTime":"2022-08-07T14:33:59.870Z","eventName":"ObjectCreated:Put","userIdentity":{"principalId":"AWS:AIDAVMRY2N7OKTN33RYNV"},"requestParameters":{"sourceIPAddress":"60.95.0.122"},"responseElements":{"x-amz-request-id":"Q73VJ1CPJ64CKJQ0","x-amz-id-2":"jqP4VGy4ubSEOvB+XRCdTjWUJEuCkkWRyiRlxdKCNqjP8cTjRUg0JGhDYsW9RprSsQPqdnlOviWD11mpmynwSJzlRyzzT8rgCka5XEnLzq8="},"s3":{"s3SchemaVersion":"1.0","configurationId":"SQS-Event","bucket":{"name":"20220807-sqs-test","ownerIdentity":{"principalId":"A2B5KBXGR14B9R"},"arn":"arn:aws:s3:::20220807-sqs-test"},"object":{"key":"hane.jpg","size":9846,"eTag":"ad1cdeed43375dca5b5e892be0968525","sequencer":"0062EFCD57CFFC5419"}}}]}
下のキューのメッセージ

こちらは S3 からの通知など概要レベルの情報が記載されています。

{"Service":"Amazon S3","Event":"s3:TestEvent","Time":"2022-08-07T14:33:31.875Z","Bucket":"20220807-sqs-test","RequestId":"0D8YVTX0QRFW78X3","HostId":"xj8sYZZALIXycdCYK54KnulIng2R3MMjMqjMAMM3gCQ5UqsHcL46nXX3FZ8x/Wpg4Duwz1IHXGY="}

さいごに

はじめて SQS を使用してみましたが設定は簡単にできました。何となく理解していたものが実際にサービスを使用することで理解が深まった気がします。次は SQS と Lambda の連携を試してみようと思います。