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を単体でストレージとして使用するだけでなく、このイベントトリガーを上手く活用する事でその他のサービスと連携を行い、通知を受け取ったりオブジェクトの加工や処理を行うことができます。利便性の向上や作業の効率化、コストの最適化をおこなうことができるため積極的にイベントトリガーを使用していきましょう。
【番外編】USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
プログラミング塾に半年通えば、一人前になれると思っているあなた。それ、勘違いですよ。「なぜ間違いなの?」「正しい勉強法とは何なの?」ITを学び始める全ての人に知って欲しい。そう思って書きました。是非読んでみてください。
「フリーランスエンジニア」
近年やっと世間に浸透した言葉だ。ひと昔まえ、終身雇用は当たり前で、大企業に就職することは一種のステータスだった。しかし、そんな時代も終わり「優秀な人材は転職する」ことが当たり前の時代となる。フリーランスエンジニアに高価値が付く現在、ネットを見ると「未経験でも年収400万以上」などと書いてある。これに釣られて、多くの人がフリーランスになろうとITの世界に入ってきている。私もその中の1人だ。数年前、USBも知らない状態からITの世界に没入し、そこから約2年間、毎日勉学を行なった。他人の何十倍も努力した。そして、企業研修やIT塾で数多くの受講生の指導経験も得た。そこで私は、伸びるエンジニアとそうでないエンジニアをたくさん見てきた。そして、稼げるエンジニア、稼げないエンジニアを見てきた。
「成功する人とそうでない人の違いは何か?」
私が出した答えは、「量産型エンジニアか否か」である。今のエンジニア市場には、量産型エンジニアが溢れている!!ここでの量産型エンジニアの定義は以下の通りである。
比較的簡単に学習可能なWebフレームワーク(WordPress, Rails)やPython等の知識はあるが、ITの基本概念を理解していないため、単調な作業しかこなすことができないエンジニアのこと。
多くの人がフリーランスエンジニアを目指す時代に中途半端な知識や技術力でこの世界に飛び込むと返って過酷な労働条件で働くことになる。そこで、エンジニアを目指すあなたがどう学習していくべきかを私の経験を交えて書こうと思った。続きはこちらから、、、、
エンベーダー編集部
エンベーダーは、ITスクールRareTECHのインフラ学習教材として誕生しました。 「遊びながらインフラエンジニアへ」をコンセプトに、インフラへの学習ハードルを下げるツールとして運営されています。
関連記事
2020.02.25
完全未経験からエンジニアを目指す爆速勉強法
USBも知らなかった私が独学でプログラミングを勉強してGAFAに入社するまでの話
- キャリア・学習法
- エンジニア
2024.05.25
AWS Lambdaで未使用Elastic IP (EIP)を自動チェックして通知する方法
みなさん、AWSのコスト削減やっていますでしょうか?今回はうっかり見落としがちな、EIPの消し忘れを通知する仕組みをご紹介します。
- AWS
2023.12.25
TerraformでAWS Cognitoの認証機能を活用
この記事では、AWS Cognitoの基本概念と機能、そしてそれを利用する具体的な利点を理解することを目指しています。開発者や技術関係者がCognitoの機能を活用して、セキュリティが強化された効率的なユーザー認証システムを構築する方法について具体的な知識を提供します。
- AWS
2023.10.28
TerraformでAWS RDS/Auroraの時限起動を設定し、コストを削減
この記事では、AWSのデータベースサービスであるRDSとAuroraについて簡単に触れた後、なぜコスト削減が大事なのか、そしてそのためにどうやってTerraformを使うのかを紹介していきます。
- AWS