AWSのSQSの使い方

AWSのSQSの使い方

AWS SQSは何気に便利です。時間がかかる処理はSQSにエンキューしておいて、バックエンドで処理して、フロントでは先に「処理終了しました。」みたいな感じのことができます。実際の処理はバックエンドでゆっくり別のLambdaとかBatchで処理しておく仕組みです。(非同期処理)

2019/4/21時点で東京リージョンでfifoキューが使えるようになっています。先入れ先出しが保証されるようになって、これはこれで大変便利です。

Amazon Web Services ブログ

AWSのSQSの使い方

fifoキューの命名規約は最後は.fifoが必要だそうです。

AWSのSQSの使い方

Lambda(node.js8.10)からエンキューしてみます。

AWSのSQSの使い方

エンキューされていることが確認できます。

以前、数分間隔でポーリングしておいてエンキューされていたらLambdaを実行するといったことを実装したことがあります。この時はポーリングするプログラムを別途作ったりしましたが、イベントソースにSQSがいつの間にか追加されているのでどうもSQSからLambdaを実行できるようです。AWSのアップデートの速さには本当についていけないですね!

Amazon Web Services ブログ

SQSをトリガーにするLambdaには「AWSLambdaSQSQueueExecutionRole」をアタッチしておく必要があります。

イベントソースにするにはFIFOじゃなくて標準キューのみっぽいです。普通に考えたらイベントソースがFIFOである必要はない気もしますね。

AWSのSQSの使い方

こんなデザインになります。これはSQSにエンキューされたらLambdaが実行されるデザインです。

この前段で、LambdaがSQSをエンキューしたら、上のLambdaが実行されるというイメージです。

ちなみにSQSのLambdaトリガー欄は以下のように1つ追加されているはずです。

AWSのSQSの使い方

SQSのLambdaトリガーから✖印をクリックすればトリガー削除することが可能になっています。

こんな感じですが、とりあえずこれでLambdaA → SQS → LambdaBが実行できます。

デッドレターキューが便利

プログラムですから、どうしてもキューが残ってしまったりします。

そういうときの為にデッドレターキューを設定しておくと便利です。この設定はマストでしておいた方が良いと個人的には思います。

普通のキューに対してデッドレターキューというのを設定します。

キュー名 種類
a キュー
b デッドレターキュー

設定したポーリング回数(最大受信数)キューを受信しようとしたらデッドレターキューに移動します。

再処理ポリシーにデッドレターキューが表示されるようになります。

AWSのSQSの使い方

キューを受信して処理中のメッセージに移動する

エンキューすると利用可能なメッセージにキュー数が表示されます。

これを受信すると処理中のメッセージに移動されます。処理中に移動する時間は「デフォルトの可視性タイムアウト」で指定した時間になります。処理中の間はこのメッセージを他のWorkerが取得することができなくなります。

以下は受信するLambda(node.js8.10)です。

Lambdaを実行すると「処理中のメッセージ」に移動します。

AWSのSQSの使い方

「デフォルトの可視性タイムアウト」が経過したら「利用可能なメッセージ」に戻ります。

もう一度受信すると「処理中のメッセージ」に移動しますが、デッドレターキューを指定していると、最大受信数を超えるとデッドレターキューに移動されてしまいます。

Delayキュー(遅延キュー)

キューの配信遅延を設定することによってエンキューされるメッセージを一定時間見えなくするようにしてくれます。(0秒から15分までの設定ができます)

これはキュー全体に対して設定します。

メッセージタイマー

キューにメッセージタイマーを設定してエンキューされるメッセージを一定時間見えなくすることができます。この設定はDelayキューの設定を上書きます。(メッセージタイマーが優先されます)

これはメッセージに対して設定します。

参考サイト

スポンサーリンク
  • このエントリーをはてなブックマークに追加
スポンサーリンク

コメントをどうぞ

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

CAPTCHA