【AWS】SNS、SQS、Lambdaで作るPubSubサンプル

【AWS】 SNS、SQS、Lambdaで作るPubSubサンプル インフラ
スポンサーリンク

はじめに

今回は以下のPubSub構成をAWSコンソールから作成していきます。
ハンズオン形式で簡単に構築できます。是非、取り組んでみてください。

構成図

PubSubとは??
パブリッシュ/サブスクライブ(Publish/Subscribe、略してPub/Sub)はメッセージの配信を非同期に行うためのメッセージパターンの一つです。Pub/Subでは、メッセージを送信する側(パブリッシャー)とメッセージを受信する側(サブスクライバー)を切り離すことができます。
イベント駆動型アーキテクチャ、マイクロサービス、分散システムなどで有用です。

Pub/Sub メッセージングとは何ですか? - Pub/Sub メッセージングの説明 - AWS
Pub/Sub メッセージングとは何か、企業が Pub/Sub メッセージングを使用する方法と理由、および AWS で Pub/Sub メッセージングを使用する方法。

基礎知識として簡単に使用するAWSサービスについて解説します。

  • SNS(Simple Notification Service)
    SNSはメッセージサービスであり、pub/subモデルを使用して、メッセージを送信します。SNSは、通知、アラート、イベント駆動型のアプリケーションなど様々な場面で使用されます。

    今回は、SNSで送信したメッセージをSQSが受信します。
Amazon SNS(サーバーレスアプリのための pub/sub メッセージングサービス)| AWS
Amazon SNSは柔軟なフルマネージド型の pub/sub メッセージング/モバイル通知サービスです。SNS を使用すると、分散システムやサービス、モバイルデバイスなど、多数の受信者にメッセージを...

  • SQS(Simple Queue Service)
    SQSはメッセージキューサービスです。メッセージは送信者から送信されると、キューに蓄積され、受信者は自分のペースで受信することができます。
    分散システムや非同期処理を必要とする場合に使用されます。

    今回は、SNSが送信者、Lambdaが受信者になります。
Amazon SQS(サーバーレスアプリのためのメッセージキューサービス)| AWS
Amazon SQS の完全マネージド型のメッセージキューは、マイクロサービス、分散システム、およびサーバーレスアプリケーションの切り離しとスケーリングを容易にします。

  • Lambda
    Lambdaはサーバーレスのコンピューティングサービスです。サーバーのプロビジョニングや管理の必要性なく、ソースコードを実行することができます。
    API Gateway、SQSなどをトリガーとし実行でき、データ処理、バッチ処理、APIなど様々なアプリケーションで使用されます。

    今回は、SQSからのメッセージを取得し、ログの出力を行います。
AWS Lambda(イベント発生時にコードを実行)| AWS
AWS Lambda を使用すれば、サーバーのプロビジョニングや管理なしでコードを実行できます。課金は実際に使用したコンピューティング時間に対してのみ発生し、コードが実行されていないときには料金も発生...

  • Cloud Watch
    モニタリング、監視のためのサービスです。AWSリソース(Lambda、ECS、EC2、RDS)からメトリクス、ログを収集し、リアルタイムで可視化することができます。

    今回は、Lambda関数で実行された結果をCloud Watchのログとして確認するために使用します。
Amazon CloudWatch(リソースとアプリケーションの監視と管理)| AWS
Amazon CloudWatch は、AWS リソースと AWS で実行するアプリケーションのモニタリングサービスです。様々なメトリクスやログを収集・追跡することで、システム全体のリソース使用率、ア...

Lambdaの構築

IAMロールの作成

Lambda関数実行用のIAMロールを作成していきます。
AWSコンソールにてIAM→ロールを作成から以下の設定で作成していきます。

IAMロール作成

作成するロールに付与するポリシーを選択します。
今回は「AWSLambdaSQSQueueExecutionRole」を付与します。このポリシーはLambda関数がSQSメッセージを受け取り、Cloud Watchにログを書き込むための権限を持っています。

ポリシー選択

任意のロール名を入力し「ロールを作成」で完了です。

ロール名
ロールを作成

Lambdaの構築

AWSコンソール→Lambdaから新規の関数を作成していきます。
関数名、ランタイム(今回はNode.js)を選択し、関数を作成していきます。

Lambdaの作成

ソースコードは以下の通りです。
SQSから受け取った情報をconsole.log()で表示するだけのシンプルな内容です。

export const handler = async function(event) {
  let body = null;
  event.Records.forEach(record => {
    body = record;
  });
  console.log(body);
  const response = {
             statusCode: 200,
             body: JSON.stringify('hello'),
  };
  return response;
}
ソースコード

SNSの構築

AWSコンソールからSNSトピックを作成します。
タイプをスタンダードとし、他の設定はデフォルトで作成しています。

SNSトピック
トピック作成

SQSの構築

AWSコンソール→SQSからキューを作成します。
SNS同様、タイプを標準、その他の設定をデフォルトで作成します。

キューの作成
キューの作成

キューを作成後、SNS、Lambda関数との紐付けを行います。
画像のように、作成したキューを選択した状態で以下の設定でそれぞれ紐付けます。
・SNS:「アクション」→「Amazon SNSトピックにサブスクライブ」
・Lambda:「アクション」→「Lambda関数トリガーを設定」

SNS、Lambdaとの紐付け

構築は以上で完了になります。

動作確認

SNSに移動し、作成したトピックを選択します。
「メッセージの発行」を押下し「件名」、「メッセージ」を入力し「メッセージの発行」を行います。

メッセージの発行
タイトルと本文
メッセージの発行

Cloud Watchのログを確認すると、入力した件名、メッセージがログとして出力されていることを確認できました。

ログ

終わりに

本記事はここまでとなります。

AWSの学習にはハンズオンで学習できるUdemyが非常に効率的でおすすめです。
以下におすすめ教材を紹介しておりますので、是非ご活用ください。

ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢

コメント