LAC WATCH

セキュリティとITの最新情報

RSS

株式会社ラック

メールマガジン

サイバーセキュリティや
ラックに関する情報をお届けします。

ラックピープル | 

Hello from SQS to Lambda!AWSでサーバーレスに触ってみた #3

こんにちは。クラウドサービス部の小池です。

サーバーがない状態でどうやってシステムを構築するのか想像できない、実際に手を動かしてみないとピンと来ないという、スキルシフト仲間の声にお答えしたサーバーレス初心者向けの連載第3回です。今回は、SNS・SQS・Lambdaを連携させてファンアウトできるような仕組みを作ってみます。

Amazon SNS・SQS・Lambdaを連携させてファンアウトできるような仕組み

ここで言う「ファンアウト」とは、SNSトピックに発行されたメッセージがレプリケート(複製)され、Amazon SQSキューやLambda関数という複数のエンドポイントにプッシュされることで、並列非同期処理が可能になるシナリオを指します。ハンズオンなので並列化までしていませんが、用語として押さえておきましょう。

ここからは、AWSが公開しているハンズオンのセクション3をもとに実際に手を動かした結果や、前提知識が足りなくて迷ったところ、理解を深めるポイントを詳しく解説します。画面遷移は多少変わっていますが、ハンズオン手順の通りに構築は問題なくできます。「サーバーレス構築とは何なのか」について理解し、公式ハンズオンの隙間を埋める手がかりとして、この記事をご覧ください。

サービス連携の体験ハンズオン

Hello from SQS to Lambda!

はじめにSQSを準備し、SNSからSQSへ、SQSからLambdaへと連携を実行していきます。

作業環境

Webブラウザ Firefox
作業するリージョン AWS東京リージョン[アジアパシフィック(東京) ap-northeast-1 ]
利用するサービス AWS Lambda(イベント発生時にコードを実行)| AWS (amazon.com)
Amazon SNS(サーバーレスアプリのための pub/sub メッセージングサービス)| AWS
Amazon SQS(サーバーレスアプリのためのメッセージキューサービス)| AWS

SQSとは

Amazon Simple Queue Service、頭文字をとってSQS。これぞクラウドネイティブの申し子で、サーバーレスにはなくてはならないサービスだと個人的に感じています。SQSは、マイクロサービス化されたサーバーレスアプリケーションやサービス同士を連携させる、完全マネージド型メッセージキューイングのサービスです。

特に注目すべきはFIFOキューです。First In First Out、つまり先入先出の順序で処理が可能なので、順序性を持った処理を1つのアプリケーションにしなくても、小さな処理をたくさん作っておけばSQSでつなげられます。えっ、本当に?と思いましたか?さっそく試してみることにします。初心者向けハンズオンですので、まず標準キューからのお試しです。

SQSの準備

ハンズオン手順に従い、キューを1つ作ります。サーバーレス構築と異なり特別なコツは不要で、ハンズオンではデフォルトのままとしています。とはいえ、セキュリティやコスト観点から、自分が作成したリソースを後から追跡できるようタグを有効化したり、万が一に備えてアクセスログの記録を有効化したりすることをお勧めします。

タイプ 標準 選択
名前 rkoike-handson-queue
※ 冒頭部はユーザ固定読み替えしてください
入力
設定 (可視性タイムアウトなど全項目) デフォルト
暗号化 サーバー側の暗号化 有効 選択
キータイプ Amazon SQS キー(SSE-SQS) デフォルト
タグの有効化 UserName 個人名入力

Lambda画面でトリガー設定

マネージメントコンソールへの入力項目は、以下の通りです。

トリガーの設定 SQS 選択
SQSキュー rkoike-handson-queue
※ 冒頭部はユーザ固定読み替えしてください
検索+選択
トリガーをアクティブ化 (チェックボックスのみ) チェック

連載の第1回で作成したLambda関数を中心に、「サーバーレス連携」をしている感のある画面になってきましたね!ここまでの設定で、SQSからメッセージを送れば、Lambda関数が動くはずです。

マネージメントコンソールへ必要な情報を入力した結果

SQSからメッセージを送ってみた

特にオプションを付けず、シンプルにメッセージを送ってみました。

Amazon SQSからメッセージを送信

おお、LambdaのログにSQSからメッセージが来たことが記録されていますね。無事連携がうまくいったようです。

Lambdaのログイベント画面

SQS連携させるためのSNSの準備

「SQSとSNSを連携させるためのトピックを追加します」の入力項目は、以下の通りとしました。ここでも、自分の作ったリソースを後から追跡するためにタグを有効化します。

タイプ スタンダード 選択
名前 rkoike-sqs-topic
※ 冒頭部はユーザ固定読み替えしてください
入力
表示名 同上 入力
暗号化 暗号化 チェック
AWS KMSキー (デフォルト)alias/aws/sns デフォルト
アクセスポリシー (特に設定しない) デフォルト
データ保護ポリシー (特に設定しない) デフォルト
配信ポリシー(HTTP/s) (特に設定しない) デフォルト
配信ステータスのログ記録 (特に設定しない) デフォルト
タグの有効化 UserName 個人名入力

SQSキューをSNSトピックにサブスクライブさせるということ

連載の第2回ではSNSトピック作成後にサブスクリプション登録しましたが、今回はSQSとSNSの連携を試します。SQSキューがSNSトピックからのメッセージを受信できるように、SQSの画面でサブスクライブの設定をします。そう、いわゆる「サブスク」の仕組みです。SNSが提供し、SQSが受信します。

名前 (当記事の冒頭で作成したキューを選択) 選択
SNSトピック (先ほど作成したSNSトピックのARN) 検索+選択
Amazon SNS トピックにサブスクライブ

第2回で試したメール送信とは異なり、ここの連携でLambdaは絡みません。SNSからはSQSへ連携されます。Lambdaと連携するのはあくまでもSQSで、SNSから直接Lambdaへ連携するわけではないことを踏まえておきましょう。

SNSトピックからメッセージを送信、SQSを経由してLambda関数が起動

SNS画面からメッセージを送ってみます。

トピックへのメッセージの発行

LambdaのログにSQSからメッセージが来たことが記録されていますね。無事にSNSからSQSへ、そしてSQSからLambdaへと連携がうまくいったようです!

Lambdaのログイベント画面

SQSのお財布事情

さて、ここまではハンズオン資料のおさらいと、結果の共有でした。例によって実際利用するにあたり気になるのは、費用の問題です。いったいどのくらいかかるのかと見てみると......、このくらいなら余裕で無料の範囲ですね。実際にかかる費用は、扱うデータ量と処理内容、処理する頻度によると考えてください。

標準キュー(100万リクエストあたり) FIFO キュー(100万リクエストあたり)
最初の100万リクエスト/月 無料 無料

料金 - Amazon SQS | AWS
「Amazon SQSの料金」より引用(2024年9月3日現在)

おわりに

さらに他のサービスとLambdaの連携を試してみましょう。次回は、API Gatewayを使ったREST APIとの連携を取り上げます。

API Gatewayを使ったREST APIとの連携

なお、ラックはセキュリティの会社ですが、筆者のようなスキルシフト中のエンジニアだけでなく、経験豊富なクラウド技術者やコンサルタントが多数在籍しています。AWSだけではなく、OCI、Azure、Google Cloudも取り扱い、クラウド移行からクラウドネイティブ支援、サーバーレス構築まで、幅広くサポートしますので、お気軽にご相談ください。

関連記事

プロフィール

小池 玲子

小池 玲子
外国語学部出身でIBM Power/AIX/PowerHA育ちのインフラエンジニア。
現場でマネジメント修業を積み、PMP取得を経て、クラウド系PMへ移行中。

関連サービス
AWSインテグレーション

この記事は役に立ちましたか?

はい いいえ
関連サービス
AWSインテグレーション