________________________________________________________________
◆アプリケーション統合
この章では2章の管理、モニタリング、ガバナンスで登場したAmazon SQS、Amazon SNS、Amazon EventBridge(旧CloudWatch Events)について学習していきます。より詳しい内容を取り上げていますので、しっかりと覚えましょう。
■イベント駆動型アーキテクチャとは※New
イベント駆動型アーキテクチャは、アプリケーションやシステムの設計において、特定のイベントが発生したときにそれに応じて動作するように構造化されたアーキテクチャのことです。
それぞれやり取りを行うシステム同士が非同期通信を行い、メッセージ処理やキューイングシステムを経由することで片方のシステムに障害が発生した場合でも、もう片方のシステムが停止してしまうことを防ぐことができます。
また、このような構築を「疎結合アーキテクチャ」とも表現します。
◆Amazon SQS
2章でもご紹介した通り、Amazon SQSはAWSにおける分散メッセージキューイングサービスです。
イベント駆動型アーキテクチャを構成するためのキューイングを行うために利用されるサービスで、導入することで可用性、耐障害性を高めることができます。
改めてSQSの機能を見ていきましょう。
■SQSの機能
・メッセージキュー
SQSの基本的な機能であるキューイングです。キューを作成した側を「Producer(生産者)」、
受け取る側を「Consumer(消費者)」と呼び、「Pull型」と呼ばれるConsumerがキューを自分から取得していく方法でキューを処理して行きます。

・キューの種類
SQSのキューには標準キューとFIFOキューが存在します。
①標準キュー
標準キューではキューイングしたメッセージに対する順序の保証が「ベストエフォートかつ2回以上の配信される可能性がある」ものとなっています。そのため、2重処理の対策のためにフラグを持たせたり、順序の許容が必要です。
②FIFOキュー
FIFOキューとは「first In first Out」の意味で先入り先出しという意味です。言葉の通り受け取ったメッセージの順序通りにキューを取り出すことが可能で、配信も厳密に1回限りとなっています。ただし、標準キューよりはスループットが低く、最大で300メッセージ/秒または最大で300 KB/秒までという条件があります。
・ポーリング
ポーリングとは、SQSにおけるConsumerが一定間隔でSQSのキューが存在するかの確認を行う仕組みの事です。
そもそもSQSはProducerが送ってきたメッセージをSQSがキューとして保管し、Consumerが受け取れるタイミングでキューとして受信処理を行うことで疎結合かつ非同期通信を実現しています。
SQSにおけるポーリングは2種類あります。
①ショートポーリング
SQSでのデフォルトの設定であり、間隔を空けずに(0秒)Consumerがキューを取得する為に常にリクエストをSQSへ送信します。
ただし、ショートポーリングを利用するとSQSの課金体制がリクエスト回数によるため、キューが存在しない空打ちの状態でも課金されることになるので注意が必要です。
②ロングポーリング
ショートポーリングとは異なり、Consumerが問い合わせを行って空だった場合は受信待機時間を1秒から20秒の間で設定を行うことで応答を遅らせることができる機能です。
ロングポーリングはリクエスト回数を減らすことができるため、問題がなければロングポーリングを利用することが推奨されます。
・可視性タイムアウト
可視性タイムアウトとは1つのConsumerがメッセージを取得してから他のConsumerが取得できるようにするまでの待ち時間のことです。
可視性タイムアウトを設定することで他のConsumerによる同一メッセージの処理を防ぐことができます。デフォルトでは30秒で設定されており、0秒から12時間までの間で設定することができます。
・デッドレターキュー
デッドレターキューは正常に処理できないメッセージがキューに滞在し続けることを防止する機能です。
SQSの「Redriveポリシー」にて、メッセージを移動させるまでの処理試行回数と移動先を指定することができ、それらの設定を行うことで、指定した回数の処理が失敗した場合にはデッドレターキューとして移動させたり、Amazon SNSを組み合わせて通知を行うことができます。
◆Amazon SNS
Amazon SNSはAWSで用いることができるメッセージングサービスです。主に、アプリケーション、サービス、ユーザーに対して、メッセージや通知を迅速に送信するために使用することができます。
Amazon SNSの情報管理は「トピック」という単位で行います。
情報の発信側をPublisher(パブリッシャー)と呼び、受信側をSubscriber(サブスクライバー)と呼びます。事前に配信する項目や内容の設定、条件を管理者が設定しておくことで、Publisherがメッセージの配信を行い、サブスクライバーは配信された内容を閲覧することができます。
Amazon SNSは様々なプロトコルに対応していることから、SMS、Eメール(JSON)、Amazon SQS、HTTP/HTTPS、モバイル端末(iOS、Android)へのプッシュ通知など様々な要件に対応することができます。

■CloudWatchとの連携※New
CloudWatchのアラームを設定することでAmazon SNSにトリガーを通知することができます。
設定するとAmazon SNSはCloudWatchからの通知を受けてメールを飛ばしたり、Lambda関数を呼び出すことができます。以下に具体例をご紹介します。
・CPU使用率の検知
EC2インスタンスのCPU使用率が一定の閾値を超えた場合、担当者へ通知を行います。
・請求額の検知
月額が指定以上の請求金額に到達したら管理者にメールを送ります。
■FIFOトピック※New
FIFOトピックとは、Amazon SQSのFIFOキュー同様に処理順序を厳守する処理方法のことです。SQSほど厳守する必要があるシーンは少ないものの、処理の順番を保証することで利用できるシーンは広がるため覚えておきましょう。
◆Amazon EventBridge※New
Amazon EventBridge(旧CloudWatch Events)はイベント駆動型アプリケーションを簡単に構築・管理するためのサービスで、イベントの発行、受信、処理を簡素化するために設計されています。
EventBridgeを利用するためには以下4つの項目が必要となります。
①イベントソース
②イベントバス
③ターゲット
④ルールの設定
①イベントソース
イベントソースは、イベントの発生元のことを指します。具体的にはイベントが生成され、EventBridgeに送信される元となるAWS Lambda、Amazon SQS、Amazon SNSなどのAWSサービス、Python、Node.js、Java、Goなどの開発言語で作られた独自アプリケーション、 AWSのパートナー企業が提供していSaaSアプリケーションが該当します。
②イベントバス
イベントバスは、EventBridgeがイベントを受け取り、処理するための受け口のことを指します。
③ターゲット
ターゲットは、イベントバスから受信したイベントに対して実行されるアクションや処理を指します。
ターゲットとして指定できるものには、AWS Lambda関数、Amazon SNSトピック、Amazon SQSキュー、Amazon Kinesis Data Streamなどがあります。
④ルールの設定
ルールは、イベントバスに届いたイベントを処理するための条件とアクションのセットです。
ルールはイベントのパターンマッチングを利用して、特定の条件に合致するイベントだけを処理します。
これらの要素を組み合わせることで、Amazon EventBridgeは異なるサービスやアプリケーション間でのイベント駆動型の連携を行うことができます。
次に具体的な利用シーンをご紹介します。
■EventBridgeの利用例
①サーバレスデータ処理アプリケーション
S3バケットに新しいオブジェクトがアップロードされるたびに、そのオブジェクトをLambda関数で処理してデータを抽出し、結果をAmazon Redshiftに格納するアプリケーション。
Lambda関数をEventBridgeのターゲット指定することで可能となります。
②モニタリングおよびアラート通知アプリケーション
特定のCloudWatchロググループに新しいエラーログが書き込まれた場合に、即座に通知を受けるアプリケーション。CloudWatchログイベントをトリガーとするルールを作成し、エラーログが書き込まれた場合に運用担当へ通知が行くように設定します。
◆Amazon MQ※New
Amazon MQはAmazon SQS同様にメッセージキューイングシステムを構築するためのサービスです。Amazon MQを用いることでメッセージの送信側と受信側は非同期になるため、疎結合通信が可能になり、耐久性や耐障害性を高めることができます。
Amazon SQSとの違いは、Amazon MQはApache ActiveMQなどのベースとなるアプリケーションから作られているため、オンプレミス上で既にメッセージキューサービスを利用しており、それらをAWSへ移行する場合はAmazon MQを利用することが推奨されます。
逆に新規で導入する場合はAmazon SQSを導入することが推奨されています。
最後に小テストをご用意しましたので、チャレンジしてみましょう。
アプリケーション統合