1. ホーム
  2. 記事一覧
  3. 【AWS】Amazon S3イベント通知の活用法

2022.12.30

【AWS】Amazon S3イベント通知の活用法

Amazon S3(以降、S3)にはイベントを通知してくれる機能が備わっており、S3バケットで特定のイベントが発生したときにAWSの他のサービスに通知することが出来ます。SNSのトピック・SQSのキュー・Lambda関数に送信することが可能で、それを元にさまざまな処理を行うことができます。

AWSのチュートリアルなどで例としてよく挙げられるのがS3にアップロードされた画像ファイルをのサムネイル画像を作成する処理です。この例だと、ObjectCreateというイベントが発生した際に通知され、その通知をトリガーにLambda関数を呼び出して実行しています。

何のためのイベント通知?

サービスの自動化を目的としています。画像やファイルのアップロードや変更をトリガーに別の処理を実行することで実現可能です。

イベント通知の種類

現在S3では次のイベントの通知を行うことができます。

  • New object created events
  • Object removal events
  • Restore object events
  • Reduced Redundancy Storage (RRS) object lost events
  • Replication events
  • S3 Lifecycle expiration events
  • S3 Lifecycle transition events
  • S3 Intelligent-Tiering automatic archival events
  • Object tagging events
  • Object ACL PUT events

イベントの通知先

現在Amazon S3ではAmazon Simple Notification Service (以降、SNS) Amazon Simple Queue Service(以降、SQS) AWS Lambda(以降、Lambda)の3つのサービスへイベントを通知することができます。

Amazon SNSを活用

バケットへのオブジェクトアップロードや削除など、なんらかのイベントが発生した際にログなどの通知を受け取りたい場合があります。SNSを用いることでそれらの通知をメールやコミュニケーションツールなどに送信することができます。

Amazon SNSとは

Amazon SNSとは、モバイルプッシュ通知やSMS送信など様々なメディアに対応したフルマネージド型メッセージングサービスです。SNSでは以下の形式に対応しています。

  • HTTP
  • HTTPS
  • Email
  • Email (JSON)
  • Amazon SQS

SNSのユースケース

バケット内にオブジェクトを作成した際にObject createdイベントが発生します。そのイベントをトリガーにSNSへ通知を行い、SNSからメールやSlackなどのコミュニケーションツールへ送信を行うことができます。

Amazon SQSを活用

SQSについてお話をする前に、まずはメッセージキューイングについて説明を行います。

メッセージキューイングとは、異なるシステム間でデータを送受信する際に直接データを渡すのではなく一度第三者のシステムに預けることで、送信側も受信側も好きなタイミングで送受信処理をおこなうことができるようにする方式のことを言います。

通常システム間でのメッセージングは同期的に行われます。しかし同期的なメッセージングでは受信側の状態に問題があった場合、送信側のシステムが処理できないまま停止(スタック)してしまいます。ですがこのメッセージキューイングを用いることで送信側は受信側の状態に左右されずにメッセージを送信し、元の作業に戻ることができるため、システムの可用性を高めることができます。

Amazon SQSとは

SQSとはフルマネージド型のメッセージキューイングサービスです。 SQSには標準キューFIFOキューの2種類のサービスが存在し、両者の主な違いは次のとおりです。

機能標準キューFIFOキュー
メッセージの順序送信されたときと異なる順序で配信されることがある送信または受信された順序が厳密に保持される
配信回数少なくとも 1 回は確実に配信されるが、重複することがある正確な 1 回の配信が行われ、重複することはない
TPS1秒あたり無制限1秒あたり300

SQSのユースケース

アプリケーション間の連携に用いられ、疎結合を実現できます。

通常システム間を直接繋ぐ同期的な連携の場合、受信側で問題が発生した場合は送信者側の機能もスタックしてしまいます。ですが、SQSを間に挟むことで受信者側に問題が発生しても送信者側の機能はそのまま維持され、送信されたメッセージはキューに留まるため問題が解消された場合は処理を再開することができます。

Amazon SNSとAmazon SQSの違い

SNSは受信者の状態に関わらずメッセージを送信するプッシュ式で、SQSは受信者側がSQSをポーリングし、キューがあれば取得を行います。

Lambdaを活用

Lambdaは単体で使用することはできず、その他のサービスと連携し、Lambdaを呼び出すことで処理を行えます。

まずはLambda 関数を設定します。関数を設定するにはLambda コンソールやLambda APIなどを使用して関数のコードを作成し、デプロイパッケージを使用してコードをアップロードします。 その後連携しているサービスによるイベントをトリガーに、Lambda が関数を呼び出し処理を行います。

Lambdaのユースケース

S3バケット内にログなどのHTMLファイルをアップロードするとObjectCreateイベントが発生します。そのイベントをトリガーにLambdaが呼び出され、あらかじめ設定をしておいたLambda 関数を基にログを見やすい文へ修正し、別のS3バケットへ戻すといった使い方ができます。

AWS Lambdaとは

AWS Lambda(以降、Lambda)とは、サーバレスコンピューティングサービスです。

利用者はサーバーやOSなどのインフラ管理が不要で、プログラムコードを準備しLambdaにアップロードするだけでプログラムの実行が行えます。主な特徴にオートスケーリング機能などがあります。この機能はアクセス数や負荷に応じて自動的に利用するサーバーの数を増減します。これによって、ユーザーはサーバを意識することなくプログラムを実行することができます。

現在Lambdaは次の言語に対応しています。

  • Java
  • Go
  • PowerShell
  • Node.js
  • Closes#
  • Python
  • Ruby

また、Custom Runtimeを使用する事で次の言語を使用することもできます。

  • Erlang
  • Elixir
  • COBOL
  • N|Solid
  • PHP
  • Closes++

その他のユースケースとして冒頭で少し触れたようにS3とLambdaを連携するとS3への動作をトリガーにLambdaを呼び出し、あらかじめLambdaにコーディングしていた処理を行うことができます。

例えば写真共有アプリケーションを例にするとユーザーがアプリケーションを使用し、写真をアップロードします。その写真をアプリケーションがS3のバケット内に格納し、ObjectCreateイベントが発生したのをトリガーに、Lambdaを呼び出します。呼び出されたLambdaはコードを基に画像のサムネイルを自動作成し、別のバケットへ格納するといったことができます。

まとめ

イベント通知とはS3バケットで特定のイベントが発生した通知を元に他のAWSサービスと連携することを指します。

S3を単体でストレージとして使用するだけでなく、このイベントトリガーを上手く活用する事でその他のサービスと連携を行い、通知を受け取ったりオブジェクトの加工や処理を行うことができます。利便性の向上や作業の効率化、コストの最適化をおこなうことができるため積極的にイベントトリガーを使用していきましょう。

エンベーダー編集部

エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。

RareTECH 無料体験授業開催中! オンラインにて実施中! Top10%のエンジニアになる秘訣を伝授します! RareTECH講師への質疑応答可

関連記事