Server

AWS LambdaとSQSでキューを処理する

投稿日:

はじめに

前回の記事ではLambdaとAPI Gatewayを組み合わせる方法を紹介しました。今回の記事では、引き続きLambdaの掘り下げで、Amazon SQSと組み合わせてキューを処理する方法を紹介します。

今回紹介する内容

今回の記事では以下の内容について紹介します。

  • Amazon SQSでキューを作成する
  • Lambda関数でキューにメッセージを送る
  • キューの受信をトリガーにLambda関数を実行する
  • IAM周り

Amazon SQSとは

Amazon SQSはフルマネージドなメッセージキューイングサービスです。自分でサーバやミドルウェアなどを準備することなくすぐに使い始めることができ、他のAWSサービスとの連携が容易に行えるなどのメリットがあります。

Amazon SQSについてより詳しく知りたい方は、こちらなどをご覧ください。

実際に動かしてみる

それでは、AWS上に環境を構築してキューにメッセージを送ってみましょう。

SQSでキューを作成する

まず初めに、SQSにキューを作成します。

マネジメントコンソールのAmazon SQSのページを開き、「キューを作成」をクリックします。

キューの作成では、最初にキューのタイプを選択します。キューには、「標準」と「FIFO」の2種類のタイプがあります。

簡単に説明すると、「FIFO」タイプではメッセージの順番が保証され、メッセージの配信も厳密に1回のみ行われます。それに比べて、標準タイプではこのあたりが保証されませんが、スループットや料金面で優れています。

今回は順番などに制限はありませんので、標準を選択します。

「設定」の項目では、キューの制御について様々な設定を行います。

  • 可視性タイムアウト:メッセージを取得してから再度同じメッセージを取得できるようになるまでの時間
  • 配信遅延:コンシューマ(メッセージの受信者)の処理が完了する前にメッセージがキューに入った場合に配信を遅延させる時間
  • メッセージ受信待機時間:0の場合はショートポーリング、1以上の場合はロングポーリング

SQSのメッセージはデフォルトで暗号化されます。

アクセスポリシーでは、キューへのアクセス権限を設定します。

「許可ポリシーの再実行」と「デッドレターキュー」では、デッドレターキューに関する設定を行います。

デッドレターキューは、メッセージの配信が失敗し処理に失敗した場合にそのメッセージを再利用するために使用されます。

今回は特に設定は行いません。

これでキューの設定は完了です。「キューを作成」を押して作成します。

LambdaでMessage送信関数を作成する

今回は2種類のLambda関数を作成します。

1つ目の関数では、先ほど作成したキューにメッセージを送ります。

2つ目の関数では、キューにメッセージが送られるのをトリガーに起動し、そのメッセージをログに出力します。

sendMessage関数を作成する

関数の作成については、前回紹介したため割愛します。

関数のコードは以下のとおりです。

環境変数に設定したキューのURLに向けて SendMessage() 関数でメッセージを送ります。

このコードをビルドしてZIP化したものをLambda(sendMessage)にアップロードします。

IAMを修正する

このままだとキューにアクセスする権限がないので関数がエラーになります。そこで、Lambda関数作成時に作られるIAMロールにキューへのアクセス権限を追加します。

追加する権限は以下のとおりです。

権限修正後にテスト実行すると、先程作ったキューにメッセージが送られます。

LambdaでMessage受信関数を作成する

2つ目のLambdaを作成し、キューにLambda関数トリガーを設定します。

getMessage関数を作成する

関数のコードは以下のとおりです。

ハンドラの引数として SQSEvent型 を指定します。

SQSEvent.Records が送信したメッセージにあたり(今回は1件のみ)、それぞれ IDBody を持ちます。

こちらもLambda(getMessage)にアップロードします。

IAMを修正する

sendMessage関数と同様に、キューへのアクセス権限を付与する必要があります。この関数にアタッチされているIAMロールに以下の権限を追加します。

キューにLambda関数トリガーを設定する

このままだとキューにメッセージが送られてもgetMessage関数が実行されません。そこで、キューにLambda関数トリガーを設定します。

作成したキューのページを開いて、「Lambdaトリガー」のタブにある「Lambdaトリガーを設定」を押します。

「Lambda関数」getMessage関数を選択して「保存」を押します。

これでキューごgetMessage関数が関連付けれられるので、getMessage関数のページに戻ってトリガーを確認します。以下のようになっているはずです。

これ以降、sendMessage関数を実行すると、キューにメッセージが送られてそれをトリガーにgetMessage関数が実行されます。

CloudWatchでログを見てみると、このようなログが表示されるはずです。

さいごに

前回に引き続きLambdaについて深掘りして、Amazon SQSと連携させる方法を紹介しました。

おすすめ書籍

エバンジェリストの知識と経験を1冊にまとめた AWS開発を《成功》させる技術 AWSで実現するモダンアプリケーション入門 〜サーバーレス、コンテナ、マイクロサービスで何ができるのか AWSコスト最適化ガイドブック

blog-page_footer_336




blog-page_footer_336




-Server
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

aws

EC2インスタンスのメモリとディスクのメトリクスモニタリングでハマったこと

1 はじめに2 メモリとディスクのメトリクスモニタリング3 ハマりポイント4 対応方法5 さいごに はじめに AWSのEC2インスタンスでディスク容量やメモリの使用率をCloudWatchで監視をする ...

Python(bottle)をApacheで動かす

1 はじめに1.1 環境2 サーバーの立ち上げ3 Pythonのインストール3.1 IUS Community Project の yum リポジトリ3.2 インストール4 Apacheのインストール ...

DockerでRails + Vue.jsの環境を作ってみる

1 はじめに1.1 前回までのあらすじ1.2 今回の趣旨1.3 環境2 MySQLのUTF-8対応3 Node.jsをRubyコンテナに組み込む4 Webpackerを使用してVue.jsをインストー ...

CentOS7でwebサーバの初期設定

1 はじめに2 設定内容3 必要なパッケージをインストール3.1 まずはカーネルその他諸々アップデート3.2 dnf4 SSH設定4.1 ユーザー作成・設定4.2 ローカル側で鍵作成4.3 サーバにア ...

[WordPressのSEO対策]PageSpeed Insightsのスコアを上げる方法

1 はじめに2 現状のスコアと改善点を確認する3 ブラウザキャッシュを活用する4 圧縮を有効にする5 HTML/CCS/JavaScriptを縮小する6 画像を最適化する7 レンダリングをブロックして ...

フォロー

blog-page_side_responsive

2023年8月
 12345
6789101112
13141516171819
20212223242526
2728293031  

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。