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 (JSON)
- Amazon SQS
SNSのユースケース
バケット内にオブジェクトを作成した際にObject createdイベントが発生します。そのイベントをトリガーにSNSへ通知を行い、SNSからメールやSlackなどのコミュニケーションツールへ送信を行うことができます。
Amazon SQSを活用
SQSについてお話をする前に、まずはメッセージキューイングについて説明を行います。
メッセージキューイングとは、異なるシステム間でデータを送受信する際に直接データを渡すのではなく一度第三者のシステムに預けることで、送信側も受信側も好きなタイミングで送受信処理をおこなうことができるようにする方式のことを言います。
通常システム間でのメッセージングは同期的に行われます。しかし同期的なメッセージングでは受信側の状態に問題があった場合、送信側のシステムが処理できないまま停止(スタック)してしまいます。ですがこのメッセージキューイングを用いることで送信側は受信側の状態に左右されずにメッセージを送信し、元の作業に戻ることができるため、システムの可用性を高めることができます。
Amazon SQSとは
SQSとはフルマネージド型のメッセージキューイングサービスです。 SQSには標準キューとFIFOキューの2種類のサービスが存在し、両者の主な違いは次のとおりです。
機能 | 標準キュー | FIFOキュー |
---|---|---|
メッセージの順序 | 送信されたときと異なる順序で配信されることがある | 送信または受信された順序が厳密に保持される |
配信回数 | 少なくとも 1 回は確実に配信されるが、重複することがある | 正確な 1 回の配信が行われ、重複することはない |
TPS | 1秒あたり無制限 | 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のインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.04.22
AWS CodePipelineとGitHubで実現するCICDハンズオン
このハンズオンでは、AWS CodePipelineとGitHub、Elastic Beanstalkを使って、簡単なWebアプリケーションのCI/CDパイプラインを構築する方法を学びます。CI/CDの自動化により、開発プロセスの効率化と高速なリリースを実現することができます。
- AWS
- ハンズオン
2024.02.01
AWS Healthでシステムの信頼性を高める方法
この記事では、AWS Healthの基本的な概要から始め、AWS Healthが解決する主要な課題、その利点、基本的な使い方、そしてTerraformを用いた設定方法について詳しく解説します。
- AWS
2023.05.26
【実践】TerraformのinstallからAWS EC2の作成〜ssh接続までを実践してみた
Terraformとは、インフラストラクチャを管理するためのオープンソースのツールです。こちらの記事では、Terraformを使用してAWSのEC2を作成し、ssh接続するまでの流れをご紹介します。
- AWS