はじめに
今回は以下のPubSub構成をAWSコンソールから作成していきます。
ハンズオン形式で簡単に構築できます。是非、取り組んでみてください。
![構成図](https://midorigame-jo.com/wp-content/uploads/2023/06/pub-sub.png)
※PubSubとは??
パブリッシュ/サブスクライブ(Publish/Subscribe、略してPub/Sub)はメッセージの配信を非同期に行うためのメッセージパターンの一つです。Pub/Subでは、メッセージを送信する側(パブリッシャー)とメッセージを受信する側(サブスクライバー)を切り離すことができます。
イベント駆動型アーキテクチャ、マイクロサービス、分散システムなどで有用です。
![](https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png)
基礎知識として簡単に使用するAWSサービスについて解説します。
- SNS(Simple Notification Service)
SNSはメッセージサービスであり、pub/subモデルを使用して、メッセージを送信します。SNSは、通知、アラート、イベント駆動型のアプリケーションなど様々な場面で使用されます。
今回は、SNSで送信したメッセージをSQSが受信します。
![](https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png)
- SQS(Simple Queue Service)
SQSはメッセージキューサービスです。メッセージは送信者から送信されると、キューに蓄積され、受信者は自分のペースで受信することができます。
分散システムや非同期処理を必要とする場合に使用されます。
今回は、SNSが送信者、Lambdaが受信者になります。
![](https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png)
- Lambda
Lambdaはサーバーレスのコンピューティングサービスです。サーバーのプロビジョニングや管理の必要性なく、ソースコードを実行することができます。
API Gateway、SQSなどをトリガーとし実行でき、データ処理、バッチ処理、APIなど様々なアプリケーションで使用されます。
今回は、SQSからのメッセージを取得し、ログの出力を行います。
![](https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png)
- Cloud Watch
モニタリング、監視のためのサービスです。AWSリソース(Lambda、ECS、EC2、RDS)からメトリクス、ログを収集し、リアルタイムで可視化することができます。
今回は、Lambda関数で実行された結果をCloud Watchのログとして確認するために使用します。
![](https://a0.awsstatic.com/libra-css/images/logos/aws_logo_smile_1200x630.png)
Lambdaの構築
IAMロールの作成
Lambda関数実行用のIAMロールを作成していきます。
AWSコンソールにてIAM→ロールを作成から以下の設定で作成していきます。
![](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-9.58.20.png)
![IAMロール作成](https://midorigame-jo.com/wp-content/uploads/2023/06/2023-06-24-9.58.47.jpg)
作成するロールに付与するポリシーを選択します。
今回は「AWSLambdaSQSQueueExecutionRole」を付与します。このポリシーはLambda関数がSQSメッセージを受け取り、Cloud Watchにログを書き込むための権限を持っています。
![ポリシー選択](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-9.59.33.png)
任意のロール名を入力し「ロールを作成」で完了です。
![ロール名](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.01.04.png)
![ロールを作成](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.01.32.png)
Lambdaの構築
AWSコンソール→Lambdaから新規の関数を作成していきます。
関数名、ランタイム(今回はNode.js)を選択し、関数を作成していきます。
![Lambdaの作成](https://midorigame-jo.com/wp-content/uploads/2023/06/2023-06-24-10.03.04.jpg)
ソースコードは以下の通りです。
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;
}
![ソースコード](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.04.28.png)
SNSの構築
AWSコンソールからSNSトピックを作成します。
タイプをスタンダードとし、他の設定はデフォルトで作成しています。
![SNSトピック](https://midorigame-jo.com/wp-content/uploads/2023/06/2023-06-24-9.53.17.jpg)
![トピック作成](https://midorigame-jo.com/wp-content/uploads/2023/06/2023-06-24-9.53.55.jpg)
SQSの構築
AWSコンソール→SQSからキューを作成します。
SNS同様、タイプを標準、その他の設定をデフォルトで作成します。
![キューの作成](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-9.55.34.png)
![キューの作成](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-9.56.06.png)
キューを作成後、SNS、Lambda関数との紐付けを行います。
画像のように、作成したキューを選択した状態で以下の設定でそれぞれ紐付けます。
・SNS:「アクション」→「Amazon SNSトピックにサブスクライブ」
・Lambda:「アクション」→「Lambda関数トリガーを設定」
![SNS、Lambdaとの紐付け](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.07.23.png)
構築は以上で完了になります。
動作確認
SNSに移動し、作成したトピックを選択します。
「メッセージの発行」を押下し「件名」、「メッセージ」を入力し「メッセージの発行」を行います。
![メッセージの発行](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.08.37.png)
![タイトルと本文](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.09.30.png)
![メッセージの発行](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.09.52.png)
Cloud Watchのログを確認すると、入力した件名、メッセージがログとして出力されていることを確認できました。
![ログ](https://midorigame-jo.com/wp-content/uploads/2023/06/スクリーンショット-2023-06-24-10.12.05.png)
終わりに
本記事はここまでとなります。
AWSの学習にはハンズオンで学習できるUdemyが非常に効率的でおすすめです。
以下におすすめ教材を紹介しておりますので、是非ご活用ください。
ご覧いただきありがとうございました。ご指摘等がございましたら頂けますと嬉しいです。
引き続き、プログラミングについて定期的に発信していきますのでよろしくお願いします!
また、もしよろしければtwitterもフォローしていただけると嬉しいです!🐢
コメント