AWS SQSを使う際に調べた事

API リファレンス

Class: AWS.SQS — AWS SDK for JavaScript

送信/受信/削除

AWS SDK for Node.js を用いた SQS の操作 – ゴミ箱

FIFO になって情報古くなってる面もあるが有益な情報

【AWS】SQS をただただ触ってみただけの話 - ニクニクドットミー Amazon SQS を利用する前に抑えておくべき 7 つのポイント - Qiita Amazon SQS を使う前に知っておきたい基本的なこと - Qiita Schoo の非同期パイプライン処理について - Qiita

『ロングポーリングして』という話は下記でも触れてる(一番下の方) フレクトのクラウド blog(New): lambda から lambda を起動するリレー方式 SQS コンシューマ

ショートポーリングの場合、キュー内のメッセージ数が少ない(1000以下など)場合、
キュー内のメッセージ数で重み付けされたサンプル数のサーバにしか問い合わせにいかないため、
MaxNumberOfMessagesに指定した数より少ないメッセージしか返ってこず、
キュー内のメッセージ数が極めて少ない場合、メッセージが返却されないことがあるため、
繰り返しreceiveMessageを発行する必要がある。

という理解であってるんですかね?

ロングポーリングの場合はどうなんでしょうか? 次の記述が見つかりました。
どうやらロングポーリングの場合、上記の問題は発生しないようです。

(receiveMessageのWaitTimeSecondsを1以上にすると、ロングポーリングになる)

Lambdaはコンピューティング時間で課金されるため、なるべく「待ち」の時間は減らしたいところですが、ショートポーリングで1,2件づつメッセージを処理するよりは効率が良さそうです。

ログポーリング必須…

ロングポーリングを利用する(これは必須。劇的にリクエスト数が改善されます)
ロングポーリングは管理画面から設定できるので簡単。
送信側はバッチリクエストを利用すると良い(SendMessageBatch)
受信側も複数メッセージを一度に受信すると良い(MaxNumberOfMessages)

FIFO に関する情報

【新機能】Amazon SQS に FIFO が追加されました!(重複削除/単一実行/順序取得に対応) | Developers.IO FIFO/重複排除のイメージがつかみやすい

SQS パラメータ検討

http://blog.nikuniku.me/entry/2015/12/23/141000

DelaySeconds(遅延キュー)は『キューに追加されてから非表示になる時間』(0〜15 分)

メッセージタイマー

上の DelaySeconds に似てる。メッセージに紐づく遅延表示設定、DelaySeconds より優先される。

Visibility Timeout(可視性タイムアウト)

あるコンポーネント A がメッセージを取得したら、他コンポーネントに見せない時間。個人的には、これはロックの仕組みに近い気がする。 Visibility Timeout は延長が可能。なので、例えば lambda で処理が長引く場合は、延長することができる、というのもロックに近い。 が、このデザインは、例えば『プロセスは死ぬ可能性がある』という前提に立ってる気がする。プロセスが時間がかかっても(延長がされないのであれば)処理のハンドルというか、ロックは SQS に戻ってくるのだ。

ロングポーリング

WaitTimeSecondsで設定した秒数待機する事で、メッセージが空の場合でもメッセージが入ってくるまでWaitTimeSecondsの秒数まで待機し、その間にメッセージが入ってくれば取得する事が出来ます。

実装例

lambda から 5 分おきに処理する

SQS のメッセージを Lambda で 5 分おきに処理する(Scheduled Event) | cloudpack.media

PHP での使い方

Amazon Simple Queue Service(SQS)を PHP でいじる - Qiita

User
CloudFront
ALB
EC2
RDS